3、图像噪声模型:从物理根源到数学描述
做夜景多帧融合,第一关就是搞懂噪声。我见过不少团队,算法调得天花乱坠,结果一上暗光场景就崩——说白了,就是没摸清噪声的脾气。
这一章,咱们把五种核心噪声模型掰开揉碎。高斯噪声、泊松噪声、散粒噪声、读出噪声、固定模式噪声。嗯,一个一个来。
3.1 高斯噪声:最熟悉的陌生人
高斯噪声,你肯定见过。传感器在中等亮度下,热运动和电路随机涨落产生的噪声,基本服从正态分布。
数学形式:
n ~ N(0, σ²)
均值0,方差σ²。独立同分布,加性模型。
我在项目中遇到过一个问题:用高斯模型去拟合暗部噪声,结果偏差很大。为什么?因为暗部噪声根本不是高斯主导的。后面会讲。
高斯噪声的几个关键点:
- 加性:直接叠加在信号上,与信号强度无关
- 对称:正负偏差概率相等
- 适用场景:中高亮度区域、ADC量化后噪声
我的习惯:做去噪时,先判断当前像素属于哪个亮度区间。高亮区用高斯模型,暗区换泊松模型。一刀切?效果肯定打折扣。
3.2 泊松噪声与散粒噪声:光子计数的本质
散粒噪声,其实是泊松噪声在光电转换中的具体表现。光子的到达是随机的,服从泊松分布。
你想想看,一个像素接收到的光子数N,其方差等于均值:
Var(N) = E[N]
这意味着什么?信号越强,噪声也越大。信噪比SNR = sqrt(N)。
| 特性 | 泊松噪声 | 高斯噪声 |
|---|---|---|
| 与信号关系 | 方差 = 均值 | 方差恒定 |
| 主导区域 | 暗光、低光子数 | 中高亮度 |
| 分布形态 | 偏态(低光子时) | 对称 |
| 数学模型 | Poisson(λ) | N(0, σ²) |
我曾经在调试一款手机夜景模式时,发现暗部去噪后总残留颗粒感。后来一查,是用了高斯滤波器去处理泊松噪声——方向就错了。
避坑指南:不要用高斯模型去拟合暗部噪声。泊松噪声在低光子数下是非对称的,用高斯近似会丢失细节。我建议用方差稳定变换(如Anscombe变换)先把泊松噪声转成近似高斯,再处理。
3.3 读出噪声:电路层面的“底噪”
读出噪声,是传感器把电荷转换成电压、再经过ADC量化时引入的。它跟信号强度无关,是系统的本底噪声。
读出噪声的来源:
- 复位噪声:像素复位时,电容上的热噪声
- 源跟随器噪声:缓冲放大器的1/f噪声和热噪声
- ADC量化噪声:模数转换的量化误差
读出噪声通常用电子数(e⁻)表示。一颗好的传感器,读出噪声可以做到1-2 e⁻。差一点的,10 e⁻以上。
关键公式:
总噪声² = 散粒噪声² + 读出噪声² + 固定模式噪声²
读出噪声是加性的,在暗部尤其明显。
我记得有一次,某款传感器的暗部信噪比死活上不去。排查了三天,发现是读出噪声偏大,换了驱动时序才解决。嗯,硬件问题有时候比算法更头疼。
3.4 固定模式噪声:每颗像素的“指纹”
固定模式噪声(FPN),是传感器制造工艺不一致导致的。每颗像素的暗电流、增益都有微小差异,形成固定的条纹或网格。
FPN分两种:
- 暗信号非均匀性(DSNU):无光照时,各像素输出不一致
- 光响应非均匀性(PRNU):相同光照下,各像素增益不一致
| 类型 | 成因 | 表现 | 校正方法 |
|---|---|---|---|
| DSNU | 暗电流差异 | 暗场下的固定条纹 | 暗帧减除 |
| PRNU | 光电转换效率差异 | 亮场下的网格状不均匀 | 平场校正 |
FPN的特点是“固定”——只要温度和增益不变,它就不变。所以校正起来相对容易。
我的做法:在产线标定阶段,采集暗帧和平场帧,生成校正表。多帧融合时,先做FPN校正,再做对齐和融合。顺序不能乱。
3.5 噪声模型全景图
下面这张图,把五种噪声的关系画清楚了。你看一眼就能明白:
3.6 多帧融合中的噪声处理策略
搞清楚了噪声模型,咱们才能对症下药。多帧融合时,我的处理顺序是这样的:
- FPN校正:先干掉固定模式噪声,否则后续对齐会受干扰
- 泊松→高斯转换:用Anscombe变换或查表法,把暗部噪声转成高斯
- 多帧平均:N帧平均,随机噪声降低sqrt(N)倍
- 自适应去噪:根据局部亮度,选择不同的去噪强度
核心公式:
融合后信噪比 = 单帧信噪比 × sqrt(N)
N是融合帧数。但要注意,帧间如果有运动,就不能简单平均了。
我曾经在一个项目里,为了追求信噪比,堆了16帧。结果一动起来,鬼影严重。后来改成自适应帧数——静止区域多堆,运动区域少堆。效果好了很多。
注意:多帧融合不是帧数越多越好。帧数多了,运动模糊和鬼影的风险也大了。我建议根据场景动态选择帧数,一般4-8帧是个不错的平衡点。
3.7 本章小结
五种噪声模型,各有各的脾气。高斯噪声好处理,但别用错地方。泊松和散粒噪声是物理本质,躲不开。读出噪声是硬件的底限,FPN是工艺的烙印。
做夜景多帧融合,我的经验是:先标定FPN,再转换泊松,最后用自适应高斯滤波。每一步都要知道自己在处理什么噪声。盲目套算法?效果肯定不行。
嗯,这一章就到这儿。噪声模型是基础,后面讲对齐和融合的时候,你会反复用到这些概念。