3. 图像噪声模型:暗光下的三大“捣乱分子”
做夜景多帧融合,说白了就是跟噪声打仗。你连敌人长什么样都不知道,这仗怎么打?
我刚开始接触手机影像算法时,觉得噪声不就是“画面不干净”嘛。后来被一位前辈点醒:不同来源的噪声,特性完全不同,处理手段也天差地别。今天咱们就把这三个“捣乱分子”一个个拎出来,看看它们在暗光下到底怎么折腾我们的照片。
3.1 高斯噪声:最“老实”的噪声
高斯噪声是我们在教科书里最早认识的噪声模型。它为什么叫“高斯”?因为它的概率密度函数服从高斯分布(也就是正态分布)。
数学上长这样:
p(x) = (1 / (σ * √(2π))) * exp(-(x - μ)² / (2σ²))
其中 μ 是均值(通常为0),σ 是标准差(决定噪声强度)。
高斯噪声的几个关键特征:
- 加性:它直接叠加在真实信号上,跟信号强度无关。说白了,亮区和暗区的噪声强度差不多。
- 独立同分布:每个像素的噪声互不干扰,分布规律一样。
- 对称性:正负偏差概率相等,所以均值滤波能有效压制它。
3.2 泊松噪声(散粒噪声):光本身的“量子抖动”
泊松噪声,也叫散粒噪声。这个名字很形象——光子打到传感器上,就像沙子撒进桶里,数量是随机波动的。
为什么会这样?因为光是由一个个光子组成的。在极暗光下,每个像素接收到的光子数可能只有几十个甚至几个。这个计数过程服从泊松分布:
P(k) = (λ^k * e^(-λ)) / k!
其中 λ 是平均光子数,k 是实际接收到的光子数。
泊松噪声的核心特性:
- 信号相关:噪声方差 = 信号强度。信号越强,噪声值越大,但信噪比反而提高。
- 暗光下尤其明显:当 λ 很小时,泊松分布严重不对称,表现为“颗粒感”很强的纹理。
- 非高斯性:在低光下,它跟高斯噪声的差异非常明显。
3.3 读出噪声:传感器的“电路底噪”
读出噪声是传感器在把电荷转换成电压、再经过模数转换(ADC)时引入的。它跟光无关——即使你把镜头盖盖上,读出噪声依然存在。
读出噪声的主要来源:
- 复位噪声(KTC噪声):像素复位时,电容上的热噪声被采样进来。
- 源跟随器噪声:像素内的放大器引入的1/f噪声和热噪声。
- ADC量化噪声:模拟信号转数字时,量化精度有限导致的误差。
- 列放大器噪声:读出电路中的放大器贡献的噪声。
| 噪声类型 | 与信号关系 | 暗光表现 | 典型抑制方法 |
|---|---|---|---|
| 高斯噪声 | 加性,与信号无关 | 均匀分布,暗区明显 | 均值滤波、高斯滤波 |
| 泊松噪声 | 信号相关,方差=信号 | 暗区颗粒感强,亮区信噪比高 | 多帧平均、方差稳定变换 |
| 读出噪声 | 加性,与信号无关 | 固定模式,暗部条纹 | 暗场校正、相关双采样 |
3.4 暗光下的噪声“合奏”
真实场景中,这三种噪声是同时存在的。我们可以用一个简化模型来描述:
观测值 = 真实信号 + 泊松噪声(信号) + 读出噪声 + 高斯噪声
在暗光下,这个模型的行为很有意思:
- 极暗区域(信号 < 10个光子):泊松噪声占主导,分布严重偏态。此时均值滤波会模糊细节,需要更聪明的处理方式。
- 中等亮度区域(信号 10-100个光子):泊松噪声逐渐接近高斯,读出噪声开始显现。这是多帧融合最有效的区间。
- 亮区(信号 > 100个光子):泊松噪声的信噪比已经很高,读出噪声成为主要限制因素。
下面这张图展示了三种噪声在暗光下的叠加关系:
3.5 实战中如何区分这三种噪声?
做算法的人,不能光看理论。我给你几个实用的判断方法:
- 拍暗场:盖上镜头盖,用同样的ISO和曝光时间拍一张。如果还有噪声,那就是读出噪声+高斯噪声。如果完全没有,说明传感器读出噪声控制得很好。
- 看亮度曲线:在均匀光照下,取一块平坦区域。计算局部方差 vs 局部均值。如果方差随均值线性增长,泊松噪声占主导;如果方差恒定,读出/高斯噪声占主导。
- 看分布直方图:取暗部的一块区域,画像素值直方图。如果分布对称且呈钟形,高斯成分多;如果分布偏态且拖尾,泊松成分多。
3.6 噪声模型对多帧融合的意义
理解了噪声模型,你才能回答一个核心问题:多帧融合到底在“融合”什么?
简单说:
- 对于泊松噪声,多帧平均相当于增加了等效曝光时间,让光子计数更准确。这是物理层面的改善。
- 对于读出噪声,多帧平均只能降低随机成分,但固定模式噪声(FPN)需要单独做暗场校正。
- 对于高斯噪声,多帧平均的效果跟帧数的平方根成正比——4帧降一半,16帧降四分之一。
所以,多帧融合不是万能的。如果你发现降噪效果不理想,先别急着加帧数,回头看看噪声模型——是不是读出噪声的固定成分没处理好?是不是暗场校正没做?
我曾经在一个项目里,为了把噪声压下去,从4帧加到8帧再到16帧,效果越来越不明显。后来才发现,是传感器的固定模式噪声在作怪。做了暗场校正后,4帧的效果就超过了之前16帧。嗯,这个教训挺深刻的。