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传感器
调优提示: 在RK平台驱动配置中,必须正确设置 sensor_fmt 或 csi_pixel_fmt 中的Bayer顺序。如果配置错误(例如将RGGB配置为GRBG),会导致输出图像出现严重的颜色混叠(紫色/绿色条纹),且无法通过后期白平衡校正。

下图展示了RGGB与GRBG两种最常见的Bayer排列结构:

常见Bayer Pattern排列对比 RGGB R G G B GRBG G R B G Bayer Pattern 关键特征 • 每个2x2单元包含:1R + 2G + 1B • 绿色通道采样率是红/蓝的2倍,匹配人眼亮度感知 • 驱动配置错误会导致颜色通道错位,产生固定色偏

2.2 RAW位深:RAW10 / RAW12 / RAW14

RAW位深表示每个像素量化后的比特数,直接决定了传感器的动态范围和信噪比。位深越高,可表示的灰度等级越多,暗部细节和亮部层次越丰富。

位深 最大码值 灰度等级 典型应用场景 数据量(每像素)
RAW10 1023 1024 低端手机、USB摄像头、低功耗场景 10 bit
RAW12 4095 4096 主流安防、车载、中高端手机 12 bit
RAW14 16383 16384 专业相机、医疗影像、HDR传感器 14 bit
位深与动态范围的关系: 每增加1 bit,理论上动态范围提升约6 dB。RAW14相比RAW10,动态范围提升约24 dB,这意味着传感器能同时捕捉更暗和更亮的场景细节。

在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位深在码值空间上的差异:

RAW位深码值范围对比 RAW10 0 ~ 1023 RAW12 0 ~ 4095 RAW14 0 ~ 16383 位深每增加1 bit,码值范围翻倍,动态范围提升约6 dB RAW14 的码值空间是 RAW10 的 16 倍

2.3 黑电平与饱和电平

黑电平(Black Level)和饱和电平(Saturation Level)是RAW图中两个最重要的参考电平,直接影响后续的增益计算、去噪和动态范围映射。

2.3.1 黑电平(Black Level)

黑电平是指传感器在完全无光照(镜头盖遮挡)条件下,像素输出的平均数字码值。由于传感器存在暗电流、读出噪声和ADC偏移,黑电平通常不为0。典型值范围:

  • RAW10:黑电平通常在 64 ~ 128 之间(码值)。
  • RAW12:黑电平通常在 256 ~ 512 之间。
  • RAW14:黑电平通常在 1024 ~ 2048 之间。
常见调优陷阱: 如果黑电平设置过高(例如将实际黑电平为64的传感器配置为128),会导致暗部被错误裁切,丢失暗部细节;如果设置过低(例如配置为0),则暗部噪声会被放大,出现“黑场发紫/发绿”现象。在RK平台的 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流水线中,黑电平和饱和电平用于以下关键计算:

  1. 黑电平校正(BLC):从每个像素值中减去黑电平,使暗部归零。公式:P_corrected = P_raw - BLS
  2. 增益计算:自动曝光(AE)算法根据当前亮度水平计算模拟/数字增益时,需要以黑电平为基准。
  3. 动态范围映射:饱和电平决定了最大可表示亮度,用于后续的色调映射(Tone Mapping)和HDR合成。
  4. 去噪阈值:黑电平附近的噪声标准差用于设定去噪强度。

下图展示了RAW图中黑电平、有效信号区间和饱和电平的关系:

RAW图电平结构示意图(以RAW12为例) 码值 黑电平区 0 ~ BLS 有效信号区间 线性响应区 BLS ~ SAT 饱和区 SAT ~ 4095 BLS 有效动态范围 SAT
实战要点: 在RK平台调试时,通过 cat /sys/class/video4linux/v4l-subdev*/sensor_mode 或读取传感器寄存器获取黑电平值。建议在暗室环境下采集100帧RAW图取平均,作为黑电平校准值。饱和电平则可通过拍摄均匀强光源并逐步增加曝光时间,观察码值不再增长的点来确定。