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