2. 图像传感器基础:Bayer阵列、RAW数据格式、黑电平与线性化

图像传感器是ISP流水线的起点。理解传感器的原始输出特性——Bayer阵列、RAW数据格式、黑电平与线性化——是进行AWB校准与HDR融合的前提。本节将深入这些基础概念,为后续的调优工程打下坚实的理论基础。

2.1 Bayer阵列:色彩滤波的起点

大多数CMOS图像传感器是单色器件,每个像素只能感知光的强度,无法区分颜色。为了捕获彩色图像,需要在像素阵列上覆盖一层色彩滤波阵列(CFA),其中最广泛使用的是Bayer阵列。

Bayer阵列由Bayer(拜耳)于1976年发明,其核心模式是:在2x2的像素单元中,包含1个红色(R)像素、2个绿色(G)像素和1个蓝色(B)像素。人眼对绿色光最敏感,因此绿色通道的采样率是红蓝的两倍,以模拟人眼的亮度感知特性。

Bayer阵列 2x2 单元结构 R G G B 通道比例: R : G : B = 1 : 2 : 1 G通道采样率是R/B的2倍 模拟人眼对绿光敏感特性 完整阵列示意:
工程要点: Bayer阵列的G/R/B比例直接影响AWB增益计算的精度。在暗光场景下,B通道信噪比通常最差,AWB算法需要针对B通道做额外的噪声抑制处理。

2.2 RAW数据格式:传感器的原始语言

经过Bayer阵列滤波后,传感器输出的数据即为RAW格式。RAW数据是未经任何ISP处理的原始像素值,直接反映了每个像素的光电转换结果。理解RAW数据的存储格式是进行黑电平校正、线性化、去马赛克等操作的基础。

2.2.1 RAW数据的关键参数

参数 说明 典型值
位深 每个像素的量化比特数,决定动态范围 10-bit / 12-bit / 14-bit
Bayer模式 Bayer阵列的起始排列顺序 RGGB / BGGR / GRBG / GBRG
黑电平 无光照时的像素输出值 64 (10-bit) / 256 (12-bit)
白电平 饱和时的像素输出值 1023 (10-bit) / 4095 (12-bit)
增益 模拟/数字增益倍数 1x ~ 16x

2.2.2 RAW数据在内存中的布局

RAW数据在内存中通常以“打包”或“非打包”形式存储。以12-bit RAW为例,每个像素占用12位,但内存按字节对齐,因此常见的存储方式有两种:

  • 非打包模式:每个像素占用2字节(16位),高4位填充0。优点是访问简单,缺点是浪费存储空间。
  • 打包模式:每3个像素占用4字节(32位),紧密排列。优点是节省带宽,缺点是需要位操作解包。
代码示例:12-bit RAW 打包解包(C语言)
// 非打包读取:每个像素占2字节
uint16_t raw_pixel = raw_data_16bit[index];

// 打包读取:每3个像素占4字节
// 假设 raw_data_packed 为 uint8_t 数组
uint32_t pack = *(uint32_t*)&raw_data_packed[(index / 3) * 4];
uint16_t pixel0 = (pack & 0xFFF);
uint16_t pixel1 = (pack >> 12) & 0xFFF;
uint16_t pixel2 = (pack >> 24) & 0xFFF;

2.3 黑电平与线性化:校正传感器的非理想特性

图像传感器并非理想器件,存在暗电流、像素响应不一致等问题。黑电平校正和线性化是ISP流水线中最早的两个校正步骤,直接影响后续所有处理的质量。

2.3.1 黑电平(Black Level)

黑电平是指传感器在完全无光照(如盖上镜头盖)时,像素仍然输出的非零值。产生原因包括:

  • 暗电流:热激发产生的电子,随温度升高而增加。
  • 像素复位噪声:像素复位时的电荷注入。
  • ADC偏移:模数转换器的直流偏置。

黑电平校正通常通过减去一个固定的偏移值来实现:

// 黑电平校正
uint16_t black_level = 256;  // 12-bit RAW 典型黑电平
uint16_t corrected_pixel = raw_pixel - black_level;
// 防止下溢
if (corrected_pixel < 0) corrected_pixel = 0;
工程陷阱: 黑电平并非恒定值,会随温度、增益、曝光时间变化。高端ISP会使用传感器周边的“光学黑像素(OBP)”实时动态计算黑电平,而非使用固定值。

2.3.2 线性化(Linearization)

理想情况下,像素输出应与入射光强成线性关系。但实际传感器在高增益或高亮度区域可能存在非线性响应,尤其是在HDR模式或多增益读出时。线性化的目的是将非线性响应映射回线性空间。

线性化通常使用分段线性校正或多项式拟合:

// 分段线性校正示例
// 假设传感器在低光区增益为1x,高光区增益为0.5x
float linearize_pixel(uint16_t raw, uint16_t threshold) {
    if (raw < threshold) {
        // 低光区:增益1x,无需校正
        return (float)raw;
    } else {
        // 高光区:增益0.5x,需要乘以2
        return (float)raw * 2.0f;
    }
}
黑电平校正与线性化流程 RAW 输入 黑电平校正 线性化 输出 关键说明: 1. 黑电平校正:减去暗电流/ADC偏移,使暗区输出接近0。 2. 线性化:校正传感器在高增益/高光区的非线性响应。 3. 顺序不可颠倒:必须先做黑电平校正,再做线性化。 4. 校正参数需在传感器标定阶段获取,并随温度/增益动态调整。

2.4 本节知识点总结

概念 核心要点 对AWB/HDR的影响
Bayer阵列 RGGB 1:2:1比例,G通道双采样 决定去马赛克算法选择,影响AWB色差估计
RAW数据格式 位深、Bayer模式、打包/非打包 位深决定HDR融合的动态范围上限
黑电平校正 减去暗电流偏移,防止暗区偏色 黑电平不准会导致AWB在暗区产生色偏
线性化 校正非线性响应,恢复光强线性关系 线性化是HDR多曝光融合的前提条件
工程实践建议: 在开始AWB校准或HDR融合调优前,务必先验证传感器的黑电平校正和线性化参数是否准确。一个常见的调试技巧是:拍摄一张均匀灰卡,检查RAW数据中R/G/B三个通道在暗区和亮区的比例是否一致。如果比例随亮度变化,说明线性化存在问题。