图像传感器数据手册里面经常会出现RAW格式,我以前一直在找RAW格式的标准是啥,但是找不到,今天应该算是解惑了。
就是原始数据的量化值,就是比如RGB(A,B,C)十进制,然后把A,B,C用一组二进制数表示,比如8位深度,就是0~255量化一个颜色的通道值。
1600W种颜色,但还是太少了
算算?
每个像素占用 3 字节 = 24位(8位 * 3)。
总像素数 = 400 * 400 = 160,000 像素
图像大小 = 每个像素所占字节数 * 总像素数 图像大小 = 3 字节/像素 * 160,000 像素 = 480,000 字节
将字节转换为常见的单位,可以得到图像大小为 480,000 字节,约为468.75 KB(1 KB = 1024 字节)。
RGB格式、分辨率为400x400的图像的大小为约468.75 KB。
RAW DATA,可以理解为:RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据,是无损的,包含了物体原始的颜色信息等。
RAW数据格式一般采用的是Bayer排列方式,通过滤波光片,产生彩色滤波阵列(CFA),鉴于人眼对绿色波段的色彩比较敏感,Bayer数据格式中包含了50%的绿色信息,以及各25%的红色和蓝色信息。
光线经过镜头,被传感器上的为滤镜分解成一个个单色的光,由传感器记录下每个点的光强度数值,这就得到了RAW数据。把RAW的灰度值转换成图像,是这样的:
不经过后期处理的RAW,就只有这样的黑白马赛克
然后把每个地方的像素显示出来是这样,还是不清晰
接下来这步是猜色:
每个滤光点周围有“规律”地分布其他颜色的滤光点,那么就有可能结合它们的值,判断出光线本来的颜色。
以黄光为例,它由红光和绿光混合而成,那么通过滤光层以后,红点和绿点下面的像素都会有值,但是蓝点下面的像素没有值,因此看一个像素周围的颜色分布——有红色和绿色,但是没有蓝色——就可以推测出来这个像素点的本来颜色应该是黄色。
一个颜色点还原过程
会变成这样
1.人眼观察到的图像 2.RAW原始图像 3.Bayer格式输出图像 4.运用插值计算后输出图像
那就是4步走,运算量都不低啊。
说了半天这个Byer长什么样?
这是我能看到的唯一一个实物的样子
二分之一 二分之一 四分之一除以3不就是三分之一
输入的 RAW Bayer 图像数据转换成 RGB 域的数据。在 RAW 域中,每个像素点只包含 RGB 分量中的一个,这也就是为什么RAW格式大的原因。
按照理想情况,每个像素点有3个值,而实际上,R和B各只有1/4,G有1/2,因此,bayer pattern得到的图像中,实际只有1/3的内容是真实的,其他都是根据先验知识插值得到。这也说明了自然图像中具有大量的冗余信息。
然后插值算法就是下面图的意思,把各个通道的未知值算出来,插进去:
我应该是说明白了
线性插值:在这种插值算法中,缺失的颜色像素将使用其邻近像素的值进行插值。
例如,对于 BGGR Bayer 模式图像,缺失的绿色像素可以通过其周围的四个相邻像素的平均值来得到。对于缺失的红色或蓝色像素,可以使用相邻行或相邻列的值计算。
修正的 bilinear 插值:这是一种更精确的插值算法,它对线性插值进行了改进。
在这种算法中,缺失的颜色像素将使用邻近像素和它们的邻近像素来进行插值。这种算法在处理高畸变图像时可以提供更好的效果。额,不就是个双线性插值,兜兜转转的装逼,扣一分。
就是这么多的像素,就为算一个绿B
源图像位置在它附近的2*2区域4个邻近象素的值通过加权平均计算得出的。双线性内插值算法放大后的图像质量较高,不会出现像素值不连续的的情况。然而此算法具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。
自己搜索
还有gradient-corrected linear interpolation,出自微软研究院,该算法被matlab中的demosaic函数所使用。
该算法的主要原理为:在5*5大小的窗口中,利用中心点像素所属颜色的梯度值对其它颜色的插值结果进行补偿。其中,R和B都考虑了上下左右4个方向的梯度;G除了上下左右4个方向,还考虑了4个对角线方向的梯度,这应该是由于G的像素点个数是R和B的2倍,而且人眼对于绿色的敏感度更强。
效果
这个图就更清晰啦
色彩滤波矩阵(CFA)
更多的上面是科普,我们一般是使用传感器,看一个OV2640的输出格式:
这里先说这些格式适合用在哪里:
- Raw RGB:
- 适用场景:专业摄影、图像处理和计算机视觉等领域。原始的RGB数据提供了最大的色彩信息和灵活性,在后期处理中可以进行精确的颜色校正、白平衡调整和图像增强等操作。
- RGB (RGB565/555):
- 适用场景:嵌入式系统、显示器驱动和图形处理器等。RGB565和RGB555是对RGB色彩信息的一种压缩表示,适合于有限存储资源或需要高效传输的场景,如嵌入式设备、游戏开发等。
- GRB422:
- 适用场景:视频处理、传输和压缩领域。GRB422格式在视频领域中较为常见,可用于捕获、处理和传输视频数据,同时提供较高的色彩和亮度精度。
- YUV (422/420):
- 适用场景:视频编解码、视频通信和存储等应用。YUV422和YUV420是对彩色图像进行色度抽样的编码格式,能够有效地减少数据量并提供较好的视觉质量,常用于数字视频和图像压缩标准中。
- YCbCr (4:2:2):
- 适用场景:数字视频编码、广播、流媒体和视频会议等。YCbCr 4:2:2是一种常见的视频色彩空间格式,经常用于视频编解码器中,可实现高质量的视频压缩和传输,同时保持较高的图像质量。
Bayer 数据几种常用的类型:
(应该可以这样说,RAW8,10,16,就是专门来传输Bayer图像的编码方式,也不对。。)
RAW8、RAW10和RAW16是用于表示原始图像数据的格式,它们分别表示每个像素的位深度为8位、10位和16位。
一个像素的构成方式有很多种:
- RGB格式:
- 红色通道(R):表示像素的红色分量。
- 绿色通道(G):表示像素的绿色分量。
- 蓝色通道(B):表示像素的蓝色分量。
- 例如,对于RGB888格式的像素,每个分量通常占用8位,总共24位(3字节)。
- Bayer格式:
- 红色滤镜通道(R):表示像素使用红色滤镜的亮度。
- 绿色滤镜通道(G):表示像素使用绿色滤镜的亮度。
- 蓝色滤镜通道(B):表示像素使用蓝色滤镜的亮度。
- 在Bayer格式中,每个像素只包含一个颜色通道的信息。
- YUV/YCbCr格式:
- 亮度(Y):表示像素的亮度。
- 色度蓝(Cb):表示像素的蓝色色度。
- 色度红(Cr):表示像素的红色色度。
- 这些格式通常用于视频编码和传输,其中亮度通道(Y)包含了图像的明亮度信息,而色度通道(Cb和Cr)则包含了颜色信息。
- 灰度格式:
- 只包含一个通道,表示像素的灰度级别或亮度级别。
- 例如,对于8位灰度图像,每个像素仅包含8位的灰度信息
具体的RAW看来还得再区分。
通常每个颜色通道(红色、绿色、蓝色)都有特定的位深度(例如,RAW8每个通道8位,RAW10每个通道10位)。
原始RGB数据未经处理,直接表示每个颜色通道的强度。
RAW8:
Raw8即是用8bits表示 G/R/B/G 中的一个分量,而不是使用8bits表示 RG/GB 四个分量。
RAW10:
Raw10就是使用10bit 表示上述的一个 G/R/B/G,但是数据中是16bit 的,高6位没用。
咋感觉多出来这么多
RAW12:
Raw12 就是使用12bit 表示上述的一个 G/R/B/G,但是数据中是16bit的,高4位没用。
比较
可以看到最后这个最细腻
RGB(RGB565/555):RGB565和RGB555是颜色编码格式,每个像素用16位表示。RGB565使用5位表示红色,6位表示绿色,5位表示蓝色,而RGB555每个颜色通道使用5位。这些格式通常用于显示,因为它们的表示方式紧凑。
每个像素用16比特位表示,占2个字节,RGB分量分别使用5位、6位、5位。
565
每个像素用16比特位表示,占2个字节,RGB分量都使用5位(最高位不用)。
555
YUV(422/420):YUV422和YUV420是视频压缩和传输中使用的颜色空间格式。
YUV422每个像素有8位用于亮度(Y),以及8位用于色度蓝(U)和色度红(V)。
YUV420使用色度抽样,通常有8位用于亮度(Y),以及8位共享给色度蓝(U)和色度红(V),但比YUV422有更少的色度信息。
在视频录制中,颜色采样有助于减小文件大小,同时保持最小的视觉差异。
书老,但是也可以看看
关于采样的书,180页
CMOS封装
这个也可以,如果我有机会做传感器的话
OVM6946接口分析-AntLinx的由来
拿OV6946内窥砸场子,我终于悟透了
OV6946无损USB采集卡“小窥窥”发布!
OV426硬件设计-CCU(相机控制单元)
使用OVM6946和OV426设计内窥镜吧!
DIY 胶囊内窥镜
这些是以前的文章,可以参考。
代码语言:javascript复制https://snapshot.canon-asia.com/article/eng/videography-faq-what-do-422-and-420-mean