2. RAW图基础理论:RAW图格式详解
在图像信号处理(ISP)流水线中,RAW图是传感器直接输出的原始数据,未经任何插值、白平衡或色彩校正处理。理解RAW图的格式、位深以及关键电平参数,是进行后续图像调优的基石。本章将系统讲解Bayer Pattern、RAW位深、黑电平与饱和电平的核心概念。
2.1 Bayer Pattern:彩色滤波阵列的排列方式
大多数CMOS图像传感器在每个像素上覆盖一层彩色滤波阵列(CFA),其中最通用的模式是Bayer Pattern。Bayer Pattern使用一个2x2的滤波单元,包含1个红色(R)、2个绿色(G)和1个蓝色(B)像素。由于人眼对绿色最敏感,因此绿色通道的采样率是红蓝的两倍。
根据R、G、B在2x2单元中的排列顺序,Bayer Pattern主要分为四种常见变体:
| Pattern名称 | 第一行(奇数行) | 第二行(偶数行) | 常见传感器厂商 |
|---|---|---|---|
| RGGB | R G R G ... | G B G B ... | Sony、OmniVision(多数型号) |
| GRBG | G R G R ... | B G B G ... | 部分Samsung、Onsemi |
| BGGR | B G B G ... | G R G R ... | 部分CCD传感器、老旧型号 |
| GBRG | G B G B ... | R G R G ... | 部分CMOS传感器 |
sensor_fmt 或 csi_pixel_fmt 中的Bayer顺序。如果配置错误(例如将RGGB配置为GRBG),会导致输出图像出现严重的颜色混叠(紫色/绿色条纹),且无法通过后期白平衡校正。
下图展示了RGGB与GRBG两种最常见的Bayer排列结构:
2.2 RAW位深:RAW10 / RAW12 / RAW14
RAW位深表示每个像素量化后的比特数,直接决定了传感器的动态范围和信噪比。位深越高,可表示的灰度等级越多,暗部细节和亮部层次越丰富。
| 位深 | 最大码值 | 灰度等级 | 典型应用场景 | 数据量(每像素) |
|---|---|---|---|---|
| RAW10 | 1023 | 1024 | 低端手机、USB摄像头、低功耗场景 | 10 bit |
| RAW12 | 4095 | 4096 | 主流安防、车载、中高端手机 | 12 bit |
| RAW14 | 16383 | 16384 | 专业相机、医疗影像、HDR传感器 | 14 bit |
在RK平台中,RAW数据通常通过MIPI CSI接口传输。不同位深的打包方式不同:
- RAW10:常用打包格式为
RAW10(4个像素占用5字节)或RAW10_CSI2(4个像素占用5字节,高位对齐)。 - RAW12:常用打包格式为
RAW12(2个像素占用3字节)或RAW12_CSI2。 - RAW14:常用打包格式为
RAW14(4个像素占用7字节),部分传感器使用RAW16对齐(每像素2字节,低2位填充0)。
// 示例:RAW12 解包代码片段(2个像素解包为3字节)
// 输入:buf[0], buf[1], buf[2] 为连续3字节
// 输出:pixel0 为12位值,pixel1 为12位值
uint16_t pixel0 = ((uint16_t)buf[0] << 4) | ((uint16_t)buf[1] >> 4);
uint16_t pixel1 = ((uint16_t)(buf[1] & 0x0F) << 8) | (uint16_t)buf[2];
下图展示了不同RAW位深在码值空间上的差异:
2.3 黑电平与饱和电平
黑电平(Black Level)和饱和电平(Saturation Level)是RAW图中两个最重要的参考电平,直接影响后续的增益计算、去噪和动态范围映射。
2.3.1 黑电平(Black Level)
黑电平是指传感器在完全无光照(镜头盖遮挡)条件下,像素输出的平均数字码值。由于传感器存在暗电流、读出噪声和ADC偏移,黑电平通常不为0。典型值范围:
- RAW10:黑电平通常在 64 ~ 128 之间(码值)。
- RAW12:黑电平通常在 256 ~ 512 之间。
- RAW14:黑电平通常在 1024 ~ 2048 之间。
isp_params 结构中,bls 参数必须与传感器实际黑电平匹配。
2.3.2 饱和电平(Saturation Level)
饱和电平是指像素阱满(Full Well Capacity)时对应的最大数字码值。对于N位RAW,理论饱和电平为 2^N - 1,但实际传感器由于非线性响应、抗溢出设计等原因,饱和电平可能略低于理论最大值。
| 位深 | 理论饱和电平 | 典型实际饱和电平 | 说明 |
|---|---|---|---|
| RAW10 | 1023 | 1000 ~ 1023 | 部分传感器预留顶部码值用于标识 |
| RAW12 | 4095 | 4000 ~ 4095 | 高动态传感器可能使用线性+分段响应 |
| RAW14 | 16383 | 16000 ~ 16383 | 专业传感器通常接近理论值 |
2.3.3 黑电平与饱和电平在ISP中的作用
在ISP流水线中,黑电平和饱和电平用于以下关键计算:
- 黑电平校正(BLC):从每个像素值中减去黑电平,使暗部归零。公式:
P_corrected = P_raw - BLS - 增益计算:自动曝光(AE)算法根据当前亮度水平计算模拟/数字增益时,需要以黑电平为基准。
- 动态范围映射:饱和电平决定了最大可表示亮度,用于后续的色调映射(Tone Mapping)和HDR合成。
- 去噪阈值:黑电平附近的噪声标准差用于设定去噪强度。
下图展示了RAW图中黑电平、有效信号区间和饱和电平的关系:
cat /sys/class/video4linux/v4l-subdev*/sensor_mode 或读取传感器寄存器获取黑电平值。建议在暗室环境下采集100帧RAW图取平均,作为黑电平校准值。饱和电平则可通过拍摄均匀强光源并逐步增加曝光时间,观察码值不再增长的点来确定。