3. 噪声模型与来源:光子散粒噪声、读出噪声、固定模式噪声(FPN)、热噪声与暗电流
做HDR最头疼的是什么?我个人的答案是噪声。
你想想看,多帧合成时,暗部提亮,噪声也跟着放大。如果不搞清楚噪声从哪来,你根本不知道怎么压它。这一章,咱们就把HDR pipeline里最常见的几种噪声,一个一个拆开看。
3.1 光子散粒噪声(Shot Noise)
这是物理极限决定的噪声,你躲不掉。光本身就是离散的光子,到达传感器的数量服从泊松分布。信号越弱,相对波动越大。
- 来源:光子到达的随机性。
- 特性:方差等于均值。信号翻倍,噪声只增加√2倍。
- 影响:暗部区域最明显,亮部区域信噪比高。
关键公式:SNR = 10·log₁₀(N) dB,其中N是收集到的电子数。
举个例子:100个电子时,SNR只有20dB;10000个电子时,SNR是40dB。暗部画质差,根在这儿。
我在项目中遇到过一个问题:长曝光HDR合成后,暗部出现奇怪的颗粒感。排查了半天,发现不是算法问题,是短帧曝光时间太短,光子数太少,散粒噪声主导了暗部。后来我把短帧的ISO调高了一档,才压住。
3.2 读出噪声(Read Noise)
读出噪声是传感器把电荷转成电压、再转成数字信号时引入的。它跟信号强度无关,是个固定底噪。
| 噪声分量 | 来源 | 典型值(e⁻ rms) |
|---|---|---|
| 复位噪声 | 像素复位开关的kT/C噪声 | 10-50 |
| 源跟随器噪声 | 像素内放大器的1/f和热噪声 | 5-20 |
| 列放大器噪声 | 列并行读出的放大器噪声 | 10-30 |
| ADC量化噪声 | 模数转换的量化误差 | 0.5-2 LSB |
避坑指南:我曾经在调试一款高帧率传感器时,发现读出噪声比datasheet标称值高了3倍。后来发现是PCB布局导致电源纹波耦合进了模拟读出链路。记住,读出噪声不只看传感器,还要看你的供电和走线。
3.3 固定模式噪声(FPN)
FPN是空间上的固定偏差。每个像素的暗电平、增益不完全一致,导致均匀光照下输出也不均匀。
- 列FPN:同一列像素共享读出电路,列与列之间的偏差。表现为竖条纹。
- 像素FPN:每个像素自身的暗电流和转换增益差异。表现为固定颗粒感。
注意:FPN在HDR多帧合成中会被放大。因为不同曝光帧的FPN模式相同,但增益不同,合成后会出现固定图案的强度变化。我建议在合成前先做一次暗场校正,把FPN减掉。
说白了,FPN就是传感器的“胎记”。你没法消除它,但可以校准它。我习惯在产线上做一次全黑帧和均匀灰帧的标定,生成校正矩阵。这样在pipeline里直接减掉就行。
3.4 热噪声与暗电流
温度每升高6-8°C,暗电流翻倍。热噪声是读出电路里电阻的热运动产生的,跟温度直接相关。
| 噪声类型 | 温度依赖性 | 典型表现 |
|---|---|---|
| 暗电流散粒噪声 | 每6-8°C翻倍 | 长曝光时出现固定亮斑 |
| 热噪声(Johnson-Nyquist) | √T成正比 | 读出链路底噪升高 |
实战经验:做手机HDR时,连续拍摄多帧,传感器温度会从25°C升到45°C。暗电流翻4倍。如果不做温度补偿,长帧的暗部会明显偏亮。我当时的做法是:在每帧的空白行里嵌入温度传感器读数,然后查表调整暗电流校正参数。
3.5 噪声模型总览
把这些噪声综合起来,就得到了完整的噪声模型。下面这张图展示了HDR pipeline里噪声的叠加关系。
从图上可以清楚看到:光子散粒噪声在光电转换阶段就叠加了;读出噪声和FPN在读出电路阶段引入;热噪声和暗电流则贯穿整个传感器工作过程。HDR多帧合成时,这些噪声会被不同增益放大,最终在合成结果里呈现复杂的分布。
3.6 噪声抑制策略概览
知道了噪声来源,抑制策略就清晰了。我整理了一个对照表,方便你在实际项目中快速定位问题。
| 噪声类型 | 抑制策略 | 适用场景 |
|---|---|---|
| 光子散粒噪声 | 增加曝光时间/光圈/补光;多帧降噪 | 暗光HDR |
| 读出噪声 | 优化PCB布局;使用低噪声ADC;相关双采样 | 高帧率/高增益 |
| 固定模式噪声 | 暗场校正;均匀场校正;列/像素校准 | 所有HDR场景 |
| 热噪声/暗电流 | 主动散热;温度补偿;短曝光优先 | 长曝光/高温环境 |
个人建议:做HDR系统设计时,先把读出噪声和FPN校准好,这两个是固定开销。剩下的散粒噪声和热噪声,才是算法要重点处理的。我曾经见过一个团队花三个月优化降噪算法,结果发现FPN根本没校准,白费功夫。
嗯,这一章的内容就到这儿。噪声模型是HDR处理的基石,搞懂了它,后面的降噪算法你才能用得心里有底。