3、RAW图数据格式:RAW10/RAW12/RAW16格式、Bayer排列模式、黑电平与白平衡基础
好,咱们今天聊聊RAW图。很多刚入行的朋友,一听到RAW就头大,觉得这东西又玄又复杂。其实说白了,RAW就是传感器最原始的“底片”,它什么都没加工过,像素点里存的就是光电转换后的电压值。你想想看,没有它,后面所有的ISP处理都是空中楼阁。
我个人习惯,拿到一颗新传感器,第一件事就是看它的RAW输出格式。这决定了后面整个pipeline怎么搭。咱们今天就把RAW10、RAW12、RAW16,还有Bayer排列、黑电平、白平衡这些基础,一次性讲透。
3.1 RAW数据格式:位深度的选择
RAW数据的位深度,说白了就是每个像素用多少个bit来表示。常见的就三种:RAW10、RAW12、RAW16。
RAW10:每个像素10bit。这是手机传感器最常用的格式。为什么?因为省带宽、省存储。我做过一个项目,用RAW10跑30fps,数据量刚好卡在MIPI接口的极限上。要是换成RAW12,帧率就得降。所以,追求高帧率或者低功耗的场景,RAW10是首选。
RAW12:每个像素12bit。动态范围比RAW10大不少。我在调试安防摄像头时遇到过,晚上拍路灯,RAW10很容易过曝,换成RAW12,高光细节就保住了。代价是数据量大了20%。
RAW16:每个像素16bit。这通常是经过多帧合成或者高动态范围处理后的结果。原生传感器很少直接出RAW16,因为太费带宽了。但做后期处理时,用RAW16可以避免精度损失。
嗯,这里要注意:RAW10和RAW12在存储时,为了对齐字节,经常会有一些“打包”技巧。比如RAW10,4个像素刚好凑成5个字节。你写驱动的时候,千万别搞错位。
核心要点:位深度越高,动态范围越大,但数据量也越大。选哪个,取决于你的带宽、存储和画质需求。
3.2 Bayer排列模式:马赛克的秘密
传感器上的每个像素,其实只能感知光的强度,分不清颜色。那彩色照片怎么来的?靠的是在像素表面覆盖一层彩色滤光片,这就是Bayer模式。
最常见的Bayer排列是RGGB。也就是一个像素滤红光,一个滤蓝光,两个滤绿光。为什么绿色多一个?因为人眼对绿色最敏感。我刚开始做ISP时,总觉得这设计有点浪费像素,后来才明白,这是用空间分辨率换色彩灵敏度。
除了RGGB,还有几种变体:
- BGGR:和RGGB本质上一样,只是顺序不同。有些传感器厂商喜欢用这个。
- RCCC:用于车载摄像头,红色像素多,对红绿灯识别更友好。
- RCCB:两个绿色换成两个透明,进光量更大,适合低光照。
我曾经调试过一个项目,传感器手册上写的是RGGB,结果实际采出来的图全是偏色的。折腾了两天,最后发现是驱动里把Bayer顺序配反了。从那以后,我每次拿到新模组,第一件事就是拍一张纯白画面,然后检查Bayer顺序对不对。
小技巧:怎么快速判断Bayer顺序?拍一张均匀光照下的白纸,然后用RAW查看工具打开。如果画面有明显的网格状偏色,那就是顺序搞反了。RGGB的图,绿色通道应该是最亮的。
3.3 黑电平:从零开始的基准
黑电平,英文叫Black Level。听起来很专业,其实道理很简单:传感器在没有光照的时候,理论上输出应该是0。但实际因为电路噪声、暗电流等原因,输出不会是0,可能是个16、32或者64这样的值。
这个值就是黑电平。ISP处理的第一步,通常就是把这个值减掉。不然的话,你拍出来的黑色画面会发灰,而且会影响后面的白平衡和色彩校正。
我遇到过最坑的一次,是某款传感器的黑电平会随温度变化。白天调试得好好的,晚上一开机,画面整体偏绿。查了半天,发现是黑电平漂了。后来我加了一个动态黑电平校正,才搞定。
黑电平的校正方式一般有两种:
- 固定值校正:从传感器手册里读一个固定值,直接减掉。简单,但不适应环境变化。
- 动态校正:利用传感器边缘的遮光像素(OB像素)实时计算黑电平。更准,但需要硬件支持。
注意:黑电平校正一定要在去马赛克之前做。否则,插值后的像素会引入额外的误差,后面怎么调都调不回来。
3.4 白平衡基础:让白色回归白色
白平衡,说白了就是让白色物体在任何光源下都看起来是白色的。人眼会自动适应,但传感器不会。你在日光灯下拍的白纸,可能偏蓝;在白炽灯下拍,可能偏黄。
白平衡的核心,就是给R、G、B三个通道乘上不同的增益,让它们恢复平衡。怎么算这个增益?常见的方法有:
- 灰度世界法:假设整张图的平均颜色是灰色。那么R、G、B的平均值应该相等。如果不相等,就调整增益让它们相等。
- 白点法:在画面中找一个最亮的区域,假设它是白色。然后调整增益,让这个区域的R=G=B。
我个人习惯,在调试初期先用灰度世界法。它简单粗暴,能快速得到一个可用的白平衡。但遇到大面积单色场景(比如一片蓝天),灰度世界法就会失效。这时候就得用更复杂的算法,比如基于色温估计的。
嗯,这里要提醒一句:白平衡增益不要调得太大。我曾经见过一个项目,为了把偏黄的画面拉回来,把蓝色增益调到了2.0以上。结果蓝色通道的噪声被放大了好几倍,画面全是噪点。白平衡增益一般控制在1.0到1.5之间比较安全。
实战建议:白平衡和黑电平是联动的。黑电平没校准时,白平衡怎么调都调不准。所以,我的调试顺序永远是:先黑电平,再白平衡,最后做色彩校正。
好了,RAW图的基础就这些。你想想看,这些概念其实都不难,关键是要理解它们为什么存在。下一章,咱们聊聊去马赛克和色彩插值,那才是真正考验算法功底的地方。