3、RAW图基础:Bayer阵列格式与存储

好,咱们今天聊聊RAW图。很多刚入行的朋友觉得RAW就是个原始数据,没啥好讲的。其实不然。我做了这么多年ISP调试,可以说,对RAW图的理解深度,直接决定了你调出来的图像质量上限。

说白了,RAW图就是传感器直接输出的“毛坯房”。它没经过任何装修,保留了最原始的感光信息。你想想看,后面所有的ISP处理——去噪、插值、白平衡、色彩校正——全都是在RAW图上打地基。地基没打好,后面再怎么折腾也白搭。

3.1 Bayer阵列格式

先说说Bayer阵列。这是最经典的彩色传感器结构。每个像素只能感知光的强度,不能感知颜色。那怎么得到彩色图像呢?答案就是在像素上覆盖滤色片。

最常见的格式是RGGB。也就是一个2x2的单元里,有1个红色像素、2个绿色像素、1个蓝色像素。为什么绿色多一个?因为人眼对绿色最敏感。这个设计很巧妙,对吧?

RGGB 2x2单元示意:

R  G
G  B

每个像素只记录一种颜色的亮度值。后续通过插值算法,才能恢复出每个像素的RGB三通道信息。

除了RGGB,还有RCCB和RYYB。这两种格式我都在项目中遇到过。

  • RCCB:把两个绿色像素换成了两个透明像素(Clear)。透明像素不滤色,能接收更多光线。好处是暗光下灵敏度高,坏处是色彩容易偏。我记得有一次调一个RCCB的模组,暗光下噪点确实少,但颜色怎么调都偏紫。后来发现是透明通道的串扰没处理好。
  • RYYB:把绿色像素换成了黄色像素。黄色能同时透过红光和绿光,所以进光量更大。华为P系列用过这个方案。但Y通道和R、B通道的响应曲线重叠严重,色彩还原难度很大。我曾经调试过RYYB的模组,白平衡算法得专门写一套,不能用常规的灰度世界法。

我的建议:如果你是刚接触ISP,先从RGGB入手。RGGB最成熟,资料最多,调试工具也最完善。RCCB和RYYB虽然性能有优势,但坑也多。等你把RGGB吃透了,再碰这些特殊格式不迟。

3.2 RAW图存储格式

RAW图的数据位深,直接决定了动态范围的上限。常见的位深有10bit、12bit、14bit。

位深 灰度级数 动态范围(理论) 常见应用
10bit 1024 约60dB 早期手机、低端模组
12bit 4096 约72dB 主流手机、安防
14bit 16384 约84dB 高端旗舰、单反

为什么会这样?位深每增加1bit,灰度级数翻倍。10bit到12bit,从1024级跳到4096级,暗部细节的区分度明显提升。我调试过一款12bit的传感器,在极暗场景下,暗部过渡比10bit的平滑很多,没有那种“断层”感。

但位深不是越高越好。14bit的数据量是12bit的4倍,对带宽和存储都是压力。而且,如果传感器的信噪比本身不够,高位深带来的只是更多的噪声级数,而不是有效信号。

注意:RAW图在存储时,通常不是直接存成16bit或32bit的整数。为了节省空间,很多传感器用packed格式。比如10bit数据,4个像素打包成5个字节。你读RAW文件时,一定要搞清楚存储格式,否则数据解析出来全是乱的。我曾经踩过这个坑,解析出来的图像像马赛克一样,查了半天才发现是字节对齐的问题。

3.3 黑电平与白电平

这两个概念,很多初学者容易搞混。我简单说说。

黑电平,也叫暗电流补偿。传感器在没有光照时,理论上输出应该是0。但实际上,由于热噪声、电路漏电等原因,暗场下会有一定的输出值。这个值就是黑电平。调试时,我们需要把这个值减掉,让真正的黑色对应到0。

举个例子:假设黑电平是64(12bit下),那么传感器输出的64,实际对应的是0。输出100,实际有效值是100-64=36。

白电平,也叫饱和电平。它代表像素能容纳的最大电荷量。当入射光强到一定程度,像素就饱和了,输出不再增加。白电平就是这个饱和值。在12bit下,白电平通常是4095。

黑电平和白电平之间的范围,就是传感器的有效动态范围。我建议你在调试时,先确认这两个值是否准确。方法很简单:盖上镜头盖拍一张全黑图,统计像素均值,那就是黑电平。对着均匀光源拍一张过曝图,看饱和值是多少。

避坑指南:我曾经调试一个模组,发现暗部偏绿。查了半天,原来是黑电平校准不准。不同通道的黑电平可能不一样,RGGB四个通道各有各的暗电流。如果你只用一个全局黑电平去减,那颜色肯定偏。所以,好的ISP会做通道独立的黑电平校正。

嗯,RAW图的基础就这些。看似简单,但每个点都值得深挖。你想想看,Bayer阵列决定了色彩采样的方式,位深决定了量化精度,黑电平和白电平决定了动态范围的起点和终点。这三者共同构成了ISP处理的“原材料”质量。原材料不好,再好的厨师也做不出好菜。