传感器与ISP的协同:传感器特性对画质的影响、RAW域预处理、黑电平校正与去噪的协同

各位好,欢迎来到第二章。上一章我们聊了ISP的整体架构,今天咱们把镜头往前推,看看最前端的传感器和RAW域处理。

说实话,做了这么多年ISP,我最大的体会就是:画质的天花板,其实在传感器阶段就定下来了。后端的算法再牛,也补不回来前端丢掉的信号。所以,理解传感器特性,是做好ISP的第一步。

2.1 传感器特性对画质的核心影响

传感器就像相机的“视网膜”。它把光信号转成电信号,但这个转换过程并不完美。我个人习惯把传感器的影响归纳为三个维度:

维度 关键参数 对画质的影响
灵敏度 量子效率(QE)、满阱容量(FWC) 决定暗光下的信噪比,QE越高,同等光照下信号越强
噪声 读出噪声、散粒噪声、固定模式噪声(FPN) 直接决定RAW域的底噪水平,影响暗部细节
色彩 滤色片(CFA)光谱响应、串扰 影响色彩还原准确性和边缘伪色

关键认知:传感器噪声是“源头噪声”,ISP去噪只能“抑制”而不能“消除”。源头信噪比每提升3dB,后端算法的压力就小一大截。

我在项目中遇到过一款传感器,标称的QE很高,但实际暗光下噪点特别多。后来一查,是读出电路的设计导致读出噪声偏大。你看,光看参数是不够的,得看实测。

2.2 RAW域预处理:为什么必须在RAW域做?

很多人问我:为什么不在RGB或者YUV域做预处理?非要折腾RAW域?

说白了,RAW域是唯一保留传感器原始信号的域。一旦做了去马赛克(Demosaic),像素之间的空间关系就被破坏了,很多噪声特性也会被“涂抹”掉。你想想看,在RAW域做校正,就像在毛坯房改水电,怎么改都行。等装修完了再改,就得砸墙了。

RAW域预处理的核心流程,我一般这么划分:

  1. 黑电平校正(BLC)——消除暗电流偏置
  2. 去固定模式噪声(FPN)——消除行/列噪声
  3. 去噪(NR)——降低随机噪声
  4. 坏点校正(DPC)——修复死点/亮点

嗯,这里要注意,顺序是有讲究的。BLC必须放在最前面,否则后续的噪声统计都会偏掉。

2.3 黑电平校正(BLC)的深度解析

黑电平校正,听起来简单,做起来坑不少。

原理:传感器在完全无光的情况下,仍然会输出一个非零的电压值。这个值就是黑电平(Black Level)。它来源于暗电流和电路偏置。BLC的目的就是把这个偏置减掉,让“纯黑”对应到0。

我的经验:黑电平不是固定值。它会随温度、增益、曝光时间变化。我曾经遇到一个项目,黑电平在低温下是64,高温下漂到了72。如果不做动态校正,暗部就会偏色或者发灰。

实现方式:

  • OB(Optical Black)像素法:传感器边缘有一圈被遮挡的像素,用它们的平均值作为黑电平参考。这是最常用的方法。
  • 固定值法:直接减去一个预设值。简单,但不准。
  • 动态查表法:根据温度、增益查表得到黑电平值。精度高,但需要标定。

代码示例(简化版BLC):

// 假设OB区域有N个像素,计算平均值
uint32_t sum = 0;
for (int i = 0; i < N; i++) {
    sum += ob_pixels[i];
}
uint16_t black_level = sum / N;

// 对每个像素做校正
for (int y = 0; y < height; y++) {
    for (int x = 0; x < width; x++) {
        int32_t corrected = raw[y][x] - black_level;
        // 钳位到有效范围
        raw[y][x] = (corrected < 0) ? 0 : corrected;
    }
}

避坑指南:我曾经在BLC之后直接做增益,结果发现暗部噪声被放大了。后来才意识到,BLC减掉的偏置里也包含噪声成分。正确的做法是:BLC之后先做去噪,再做数字增益。顺序错了,噪声就压不住了。

2.4 去噪的协同:BLC与NR的配合

BLC和去噪不是孤立的两个模块。它们必须协同工作。

为什么?

因为BLC会改变噪声的统计特性。原始传感器的噪声是“信号相关”的(散粒噪声随信号增大而增大)。但BLC减掉一个固定偏置后,噪声的均值变了,方差没变。如果去噪模块不了解这个变化,就会用错参数。

我建议的协同策略是:

  1. BLC阶段:只做减法,不做任何滤波。保留噪声的原始分布。
  2. 噪声估计阶段:在BLC之后,重新统计噪声的均值和方差。因为BLC已经去掉了偏置,此时的噪声是零均值的,更容易建模。
  3. 去噪阶段:根据重新估计的噪声参数,动态调整去噪强度。暗区用强去噪,亮区用弱去噪。

说白了,BLC负责“归零”,NR负责“平滑”。两者配合好了,才能做到“该去的噪点一个不留,该留的细节一点不丢”。

2.5 知识结构图:传感器与ISP的协同流程

下面这张图,是我自己总结的协同流程。你可以把它当作本章的“地图”。

传感器与ISP协同流程图 传感器与ISP协同:RAW域预处理流程 传感器 RAW 输出 黑电平校正 (BLC) 噪声估计 (NE) 自适应去噪 (NR) 干净 RAW 数据 动态参数反馈 关键协同点: 1. BLC 后重新统计噪声 2. 噪声参数指导去噪强度 3. 去噪结果反馈给BLC

你看,从传感器输出到干净的RAW数据,中间经过了BLC、噪声估计、去噪三个核心环节。而且噪声估计的结果会反馈给BLC和去噪,形成一个闭环。这就是我说的“协同”。

2.6 实战中的协同要点

最后,我总结几个实战中容易踩的坑,供你参考:

  • BLC和去噪的时序:必须先BLC,再去噪。顺序反了,去噪会误把偏置当成信号,导致暗部细节丢失。
  • 噪声模型的选择:不要用固定的高斯噪声模型。传感器的噪声是泊松-高斯混合分布。我建议用分段线性模型来近似,计算量小,效果也不错。
  • 温度补偿:黑电平随温度漂移是常态。如果产品工作温度范围宽(比如-20°C到60°C),一定要做温度查表补偿。否则,冬天和夏天的画质会差很多。

一句话总结:传感器是画质的起点,BLC是RAW域预处理的第一步,去噪是画质的关键。三者协同好了,后面的ISP模块才能“站在巨人的肩膀上”工作。