3. 图像噪声模型:暗光下的三大“捣乱分子”

做夜景多帧融合,说白了就是跟噪声打仗。你连敌人长什么样都不知道,这仗怎么打?

我刚开始接触手机影像算法时,觉得噪声不就是“画面不干净”嘛。后来被一位前辈点醒:不同来源的噪声,特性完全不同,处理手段也天差地别。今天咱们就把这三个“捣乱分子”一个个拎出来,看看它们在暗光下到底怎么折腾我们的照片。

3.1 高斯噪声:最“老实”的噪声

高斯噪声是我们在教科书里最早认识的噪声模型。它为什么叫“高斯”?因为它的概率密度函数服从高斯分布(也就是正态分布)。

数学上长这样:

p(x) = (1 / (σ * √(2π))) * exp(-(x - μ)² / (2σ²))

其中 μ 是均值(通常为0),σ 是标准差(决定噪声强度)。

高斯噪声的几个关键特征:

  • 加性:它直接叠加在真实信号上,跟信号强度无关。说白了,亮区和暗区的噪声强度差不多。
  • 独立同分布:每个像素的噪声互不干扰,分布规律一样。
  • 对称性:正负偏差概率相等,所以均值滤波能有效压制它。
我的经验: 高斯噪声在暗光下其实不是主角。我做过一个实验——把一张暗光照片的噪声单独提取出来,发现它的分布明显偏“泊松”,而不是高斯。所以别迷信教科书,真实场景往往更复杂。

3.2 泊松噪声(散粒噪声):光本身的“量子抖动”

泊松噪声,也叫散粒噪声。这个名字很形象——光子打到传感器上,就像沙子撒进桶里,数量是随机波动的。

为什么会这样?因为光是由一个个光子组成的。在极暗光下,每个像素接收到的光子数可能只有几十个甚至几个。这个计数过程服从泊松分布:

P(k) = (λ^k * e^(-λ)) / k!

其中 λ 是平均光子数,k 是实际接收到的光子数。

泊松噪声的核心特性:

  • 信号相关:噪声方差 = 信号强度。信号越强,噪声值越大,但信噪比反而提高。
  • 暗光下尤其明显:当 λ 很小时,泊松分布严重不对称,表现为“颗粒感”很强的纹理。
  • 非高斯性:在低光下,它跟高斯噪声的差异非常明显。
关键结论: 暗光夜景的噪声,泊松成分占主导。多帧融合之所以有效,就是因为它能通过多帧平均来逼近真实的光子计数,从而抑制泊松噪声。

3.3 读出噪声:传感器的“电路底噪”

读出噪声是传感器在把电荷转换成电压、再经过模数转换(ADC)时引入的。它跟光无关——即使你把镜头盖盖上,读出噪声依然存在。

读出噪声的主要来源:

  1. 复位噪声(KTC噪声):像素复位时,电容上的热噪声被采样进来。
  2. 源跟随器噪声:像素内的放大器引入的1/f噪声和热噪声。
  3. ADC量化噪声:模拟信号转数字时,量化精度有限导致的误差。
  4. 列放大器噪声:读出电路中的放大器贡献的噪声。
噪声类型 与信号关系 暗光表现 典型抑制方法
高斯噪声 加性,与信号无关 均匀分布,暗区明显 均值滤波、高斯滤波
泊松噪声 信号相关,方差=信号 暗区颗粒感强,亮区信噪比高 多帧平均、方差稳定变换
读出噪声 加性,与信号无关 固定模式,暗部条纹 暗场校正、相关双采样
避坑指南: 我曾经在调试一款传感器时,发现暗部有规律的竖条纹。一开始以为是泊松噪声,折腾了三天。后来用暗场(盖上镜头盖)拍了一张,才发现是读出噪声中的列放大器噪声。所以——先做暗场标定,再谈降噪算法。

3.4 暗光下的噪声“合奏”

真实场景中,这三种噪声是同时存在的。我们可以用一个简化模型来描述:

观测值 = 真实信号 + 泊松噪声(信号) + 读出噪声 + 高斯噪声

在暗光下,这个模型的行为很有意思:

  • 极暗区域(信号 < 10个光子):泊松噪声占主导,分布严重偏态。此时均值滤波会模糊细节,需要更聪明的处理方式。
  • 中等亮度区域(信号 10-100个光子):泊松噪声逐渐接近高斯,读出噪声开始显现。这是多帧融合最有效的区间。
  • 亮区(信号 > 100个光子):泊松噪声的信噪比已经很高,读出噪声成为主要限制因素。

下面这张图展示了三种噪声在暗光下的叠加关系:

暗光下三种噪声的叠加关系 真实信号 泊松噪声 读出噪声 高斯噪声 ∑ 观测值 (含噪声) 暗光下的噪声特性总结: • 极暗区(信号<10):泊松噪声主导,分布偏态,均值滤波失效 • 中等亮度(10-100):泊松+读出混合,多帧融合效果最佳 • 亮区(>100):读出噪声成为瓶颈,需要暗场校正 • 高斯噪声在暗光下占比最小,但会影响纹理细节

3.5 实战中如何区分这三种噪声?

做算法的人,不能光看理论。我给你几个实用的判断方法:

  1. 拍暗场:盖上镜头盖,用同样的ISO和曝光时间拍一张。如果还有噪声,那就是读出噪声+高斯噪声。如果完全没有,说明传感器读出噪声控制得很好。
  2. 看亮度曲线:在均匀光照下,取一块平坦区域。计算局部方差 vs 局部均值。如果方差随均值线性增长,泊松噪声占主导;如果方差恒定,读出/高斯噪声占主导。
  3. 看分布直方图:取暗部的一块区域,画像素值直方图。如果分布对称且呈钟形,高斯成分多;如果分布偏态且拖尾,泊松成分多。
我的习惯: 在项目初期,我会先拍一组暗场和一组灰阶卡(从暗到亮),然后做噪声分析。这个步骤花不了多少时间,但能帮你省下后面调参的无数个通宵。嗯,真的。

3.6 噪声模型对多帧融合的意义

理解了噪声模型,你才能回答一个核心问题:多帧融合到底在“融合”什么?

简单说:

  • 对于泊松噪声,多帧平均相当于增加了等效曝光时间,让光子计数更准确。这是物理层面的改善。
  • 对于读出噪声,多帧平均只能降低随机成分,但固定模式噪声(FPN)需要单独做暗场校正。
  • 对于高斯噪声,多帧平均的效果跟帧数的平方根成正比——4帧降一半,16帧降四分之一。

所以,多帧融合不是万能的。如果你发现降噪效果不理想,先别急着加帧数,回头看看噪声模型——是不是读出噪声的固定成分没处理好?是不是暗场校正没做?

我曾经在一个项目里,为了把噪声压下去,从4帧加到8帧再到16帧,效果越来越不明显。后来才发现,是传感器的固定模式噪声在作怪。做了暗场校正后,4帧的效果就超过了之前16帧。嗯,这个教训挺深刻的。