3. 噪声模型与分类:高斯噪声、泊松噪声、散粒噪声、读出噪声、固定模式噪声
做图像降噪这么多年,我最大的感受就是:不懂噪声,就别谈降噪。你想想看,连对手是谁都没搞清楚,怎么打?
很多同学一上来就调滤波器参数,效果不好就换算法,折腾半天还是糊的。其实问题出在根上——你根本不知道手里的噪声长什么样。
这一章,我们就来把噪声的底细摸清楚。我会结合自己踩过的坑,把五种最常见的噪声模型掰开揉碎了讲。
核心观点:噪声不是随机的“坏东西”,它有规律、有模型、有参数。掌握了噪声模型,你就能针对性地设计降噪策略,而不是瞎猫碰死耗子。
3.1 高斯噪声——最基础的噪声模型
高斯噪声,说白了就是每个像素上叠加一个服从正态分布的随机值。它独立于信号强度,亮的地方和暗的地方噪声幅度差不多。
数学上很简单:
I_noisy(x,y) = I_clean(x,y) + n(x,y)
n(x,y) ~ N(0, σ²)
其中 σ 是标准差,控制噪声强度。σ 越大,图像越花。
我的经验:高斯噪声是降噪算法的“Hello World”。几乎所有算法——BM3D、NLM、DnCNN——第一个测试集都是高斯噪声。如果你连高斯噪声都搞不定,后面的就别想了。
实际场景中,高斯噪声主要来自:
- 传感器热噪声:温度越高,σ 越大。我记得有一次在户外40度高温下测试相机,噪声水平直接翻倍。
- 放大器噪声:模拟电路放大信号时引入的随机波动。
- 量化噪声:ADC 转换时的舍入误差,近似为均匀分布,但在低光照下会表现出高斯特性。
3.2 泊松噪声——光子计数的本质
这个就有点意思了。泊松噪声的根源是光子的量子特性。
你想想看,光线打到传感器上,本质上是光子一个个砸过来。单位时间内砸到像素上的光子数,服从泊松分布。这意味着:
- 噪声方差 = 信号均值。信号越强,噪声越大。
- 信噪比 SNR = √(信号均值)。信号翻4倍,SNR才翻2倍。
数学形式:
I_noisy ~ Poisson(I_clean)
E[I_noisy] = I_clean
Var[I_noisy] = I_clean
⚠️ 常见误区:很多人以为泊松噪声是加性的。错!它是信号依赖的。你用高斯噪声的模型去处理泊松噪声,暗部会过平滑,亮部又去不干净。
我曾经在一个低光照监控项目里吃过这个亏。当时直接用高斯降噪,结果暗部细节全没了,亮部还有残留噪声。后来换成泊松-高斯混合模型,效果立竿见影。
3.3 散粒噪声——泊松噪声的“亲戚”
散粒噪声,英文叫 Shot Noise。其实它和泊松噪声是同一个物理现象的两个名字。
严格来说:
- 光子散粒噪声:光子到达的随机性,就是上面说的泊松噪声。
- 暗电流散粒噪声:即使没有光照,传感器内部热激发也会产生电子,这些电子也服从泊松分布。
所以你可以把散粒噪声理解为泊松噪声在传感器领域的特称。
| 噪声类型 | 物理来源 | 分布 | 信号相关性 |
|---|---|---|---|
| 光子散粒噪声 | 光子到达随机性 | 泊松 | √信号 |
| 暗电流散粒噪声 | 热激发电子 | 泊松 | √(与温度相关) |
| 读出噪声 | 电路读取过程 | 近似高斯 | ✗ 信号无关 |
| 固定模式噪声 | 像素工艺差异 | 固定偏移 | ✗ 空间相关 |
3.4 读出噪声——电路层面的“杂质”
读出噪声,是传感器把电荷转换成电压、再转换成数字信号的过程中引入的。
我个人习惯把它分成三段:
- 复位噪声:像素复位时,电容上的电压随机波动。
- 源跟随器噪声:放大晶体管的热噪声和1/f噪声。
- ADC量化噪声:模数转换的舍入误差。
读出噪声的特点是:
- 与信号无关,暗场下也能测到。
- 近似高斯分布,但可能有轻微的非高斯尾巴。
- 与帧率相关,帧率越高,读出噪声越大。
避坑指南:我曾经在调试一款高速相机时,发现暗场噪声特别大。查了半天,原来是读出时钟频率设得太高,导致ADC采样不稳定。降了一档频率,噪声直接降了40%。
3.5 固定模式噪声——每个像素的“指纹”
固定模式噪声(FPN),是传感器制造工艺不一致导致的。每个像素对光的响应有细微差异,表现为:
- 暗信号非均匀性(DSNU):无光照时,各像素输出不同。
- 光响应非均匀性(PRNU):相同光照下,各像素增益不同。
FPN 的特点是空间固定、时间不变。同一颗传感器,拍100张暗场,FPN 的图案几乎一模一样。
怎么处理?
// 暗场校正:减去暗帧均值
def correct_fpn(image, dark_frame):
return image - dark_frame
// 增益校正:用均匀光照场计算增益矩阵
def correct_prnu(image, gain_map):
return image / gain_map
⚠️ 注意:FPN 会随温度和时间漂移。你一个月前做的暗场校正,今天可能就不准了。工业相机通常会在开机时自动采集暗帧。
3.6 实战中的噪声模型选择
说了这么多,你可能会问:实际项目中到底用哪个模型?
我的建议是:
| 场景 | 推荐模型 | 理由 |
|---|---|---|
| 手机拍照(白天) | 高斯 + 泊松混合 | 光子噪声为主,读出噪声为辅 |
| 手机拍照(夜景) | 泊松主导 + 高斯 | 信号弱,泊松噪声占主导 |
| 工业检测(高ISO) | 高斯 + FPN | 读出噪声和固定模式噪声突出 |
| 科学相机(低温) | 泊松 + 读出噪声 | 暗电流被抑制,光子噪声为主 |
| 监控摄像头 | 高斯 + 泊松 + FPN | 环境复杂,三种噪声共存 |
嗯,这里要注意:没有万能的噪声模型。我一般会先拍一组暗场和亮场,用统计方法估计噪声参数,再决定用哪个模型。
一句话总结:高斯噪声是基础,泊松噪声是本质,散粒噪声是泊松的别名,读出噪声是电路产物,FPN 是工艺缺陷。搞懂它们,你的降噪算法就有了“眼睛”。