当前位置:   article > 正文

Camera和Image sensor技术基础笔记(3) -- 色彩空间,CFA,bayer数据处理_bayer格式色彩还原 梯度还原

bayer格式色彩还原 梯度还原

色彩空间

        颜色通常用三个分量描述,这三个分量分别作为三个维度,直观上会形成一个空间上的区域,这块立体的区域就是色彩空间(color space)。不同的色彩空间,是这个坐标系的三个轴的用来衡量颜色的标准不同所产生的。色彩空间的基本结构主要有两大类:基本颜色空间(RGB)以及色度、亮度分离颜色空间(YUV,HSV)。通常ISP芯片都带有CSC(color space conversion)功能,用来转换不同的颜色空间

RGB色彩空间

        通常显示器使用RGB色彩空间,其中有Red,Green,Blue三种颜色分量。

        RGB色彩空间中,一个图像的采样点由三个数字组成,代表三种颜色分量的值。上图为一个简单的示例图,其中的绿色小圆点各个分量的值对应RGB坐标系里的坐标点在各个轴的投影。

        除了R、G、B外,实际应用中常见的还有一个A通道的值,A是alpha缩写,代表透明度(0为完全透明,最大值为不透明)。

        常见RGB数据格式

        

格式 说明
RGB55516bits,2 bytes。最高位不使用,剩下每5位表示一种颜色值
RGB155516bits,2 bytes。RGBA的一种,和RGB555类似,但多了一位alpha值,0代表透明,1代表不透明
RGB56516bits,2 bytes。R,G,B分别使用5,6,5个bits
RGB2424bits,3 bytes。R,G,B分别使用8,8,8bits
RGB3232bits, 4 bytes。R,G,B,A分别使用8,8,8,8 bits

        当然还有很多RGB格式比如RGB555等,这里不再列举。

YUV色彩空间

        视频处理系统中常用的色彩空间,由一个亮度信号Y(Luminance/Luma)和两个色度信号U、V(Chrominance/Chroma)组成。它主要利用了人眼对亮度信号敏感而对色度信号不敏感的特点,对RGB转换为一个亮度信号Y和两个色差分量信号U(R-Y)、V(B-Y)。

        YUV和RGB的转换公式为:

RGB  -->  YUVYUV  --> RGB
Y = 0.299R + 0.587G + 0.114B
U = -0.147R - 0.289G + 0.436B
 V = 0.615R - 0.515G - 0.100B
R = Y + 1.14V
G = Y - 0.39U - 0.58V
B = Y + 2.03U

        YUV类型

        YUV细分为Y'UV,YUV,YCbCr,YPbPr等类型。YCbCr是计算机系统中应用最多的类型,JPEG、MPEG,H264均采用此格式。后文所说的YUV都是指YCbCr。

        YUV采样

        YUV有很多种采样方式,这里对常见的三种进行说明:444,422,420

        上图中,实心黑点表示Y,空心圆表示UV

        YUV4:4:4   --  每一个Y有一个UV,每个像素24bits

        YUV4:2:2   --  每两个Y共享一个UV,每个像素16bits

         YUV4:2:0  --  每四个Y共享一个UV,每个像素12bits

         YUV存储格式

         planar:先存所有像素点的Y,再存所有像素点的U,最后存所有像素点的V

                        下面以YUV422P为例,来理解planar的存储方式

Y1Y2Y3Y4
Y5Y6Y7Y8
Y9Y10Y11Y12
Y13Y14Y15Y16
U1U2U3U4
U5U6U7U8
V1V2V3V4
V5V6V7V8

        packed:每个像素点的Y,U,V交错存储

                       下面以UYVY422为例,来理解packed的存储方式

U1Y1V1Y2U2Y3V2Y4
U3Y5V3Y6U4Y7V4Y8
U5Y9V5Y10U6Y11V6Y12
U7Y13V7Y14U8Y15V8Y16

                     其它类型比如VYUY422,YUYV422,YVYU422等,只是Y,U,V的列顺序不同而已 

        semi-planar: 先存所有像素点的Y,再交错存储每个像素点的UV

                        下面以YUV422SP为例,来理解semi-planar的存储方式

Y1Y2Y3Y4
Y5Y6Y7Y8
Y9Y10Y11Y12
Y13Y14Y15Y16
U1V1U2V2
U3V3U4V4
U5V5U6V6
U7V7U8V8

 HSV色彩空间

         HSV色彩空间的三个分量是:

                Hue(色调、色相)

                Saturation(饱和度、色彩纯净度)

                Value(明度)

        Hue为固定值的时候,饱和度Saturation越小,表示对应颜色里的白色越多,光谱本身颜色越淡,饱和度为0时颜色呈现白色。明度Value越小,表示对应颜色里的黑色越多,光谱本身颜色就越看不出来,明度为0时颜色呈现黑色。饱和度和明度的值,可以理解为当前颜色占白色和黑色的比例。

        注意一点, HSV 中的Hue里没有白色,白色需要由S和V共同决定(S=0, V=100)。

HSL色彩空间

        HLS 的三个分量是hue(色相)、saturation(饱和度)、lightness(亮度)。和HSV类似,区别是亮度Lightness和明度Value。

        HLS 中的亮度为100表示白色,亮度为0,表示黑色;

        HSV 中的明度为100,表示光谱色,明度为0,表示黑色。

        HLS 中白色仅由亮度一个分量决定,在图像处理中检测白色时使用 HSL 颜色空间更准确。

其他色彩空间

        还有很多其他类型的色彩空间如HSB,Ycc,Lab,CMYK等,感兴趣的可以自行google。

CFA

         CFA全称Color Filter Array,色彩滤波阵列(颜色过滤阵列)。在这个专栏第一篇文章里有提到过sensor单个像素上存在一个颜色过滤片。

Camera和Image sensor技术基础笔记(1) -- 光和CCD/CMOS sensor基础知识_亦枫L的博客-CSDN博客

        需要注意的是这种方式实际Sensor的一个像素只能记录一种颜色,在CFA出现之前,单个像素上摆放的是R、G、B三个滤光片,单个像素实际上能得到的全部三通道的值。CFA出现之后,使用CFA的sensor,单个像素只能获得一种颜色值,然后再通过插值的方法恢复出其它两个分量的值。这样对于滤光片的制作的难度上要求就降低了,特别是当单个像素面积越变越小的时候。

        对于Bayer阵列颜色的排布方式,一般按照相邻的四个(2x2)格子的颜色排布顺序来定义。常见的bayer阵列pattern有:

        RGGB,例如从[R1,G2;G7,B8] 开始算起;

        GBRG,例如从[G7, B8; R12, G13]开始算起;

        GRBG, 例如从[G2,R3;B8,G8]开始算起;

        BGGR, 例如从 [B8,G8;G13,R14]开始算起;

        无论哪种形式,绿色格子总是会有两个,因为人眼对绿色更为敏感。下面的例子中sensor的byaer阵列采用了BGGR排布。

        这种方式下,sensor输出的原始数据会按照bayer pattern的形式输出。由于每个像素只有一个颜色,需要通过插值来补全像素的其它颜色分量的值。这个过程叫做“去马赛克”(Demosaic)。插值的算法有很多种。但通常来讲,将原始图像转换为RGB图的插值算法需要临近的像素的值作为参考,像素用的多一些,算法恢复的值就准确一些,同时计算的开销也就变得更大。

        常见的插值算法:双线性插值法、基于梯度方法、自适应方法等等。

        在实际应用中存在很多种不同的插值算法,除了公开的一些算法,还有一些是厂家的“秘籍”不公开。实际工作中,要么是用OpenCV这类软件去做,要么是有专门的IP硬件去做,具体的插值算法细节在之后如果有涉及到再具体展开。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/126175?site
推荐阅读