1. 图像噪声基础:噪声类型、模型与影响

图像噪声,说白了就是传感器或传输过程中混入的随机干扰信号。我刚开始做图像处理时,总觉得噪声就是「画面不干净」,后来踩了不少坑才明白——不理解噪声的数学模型,降噪算法就是瞎调参数。

这一节我们先把噪声的底牌翻清楚。你想想看,连对手长什么样都不知道,怎么打赢它?

1.1 三大主流噪声类型

实际项目中,90% 的噪声逃不出下面三种。我列个表,方便你对照着看。

噪声类型 产生原因 典型场景 数学分布
高斯噪声 传感器热噪声、电路暗电流 手机夜景拍摄、监控摄像头 正态分布
椒盐噪声 像素值传输错误、存储介质坏道 老旧摄像头、无线传输丢包 二值脉冲分布
泊松噪声 光子到达的量子随机性 低光照医学成像、天文摄影 泊松分布

核心记忆点:高斯噪声是「加性」的,椒盐噪声是「脉冲」的,泊松噪声是「信号相关」的。这三句话能帮你快速定位问题。

1.2 高斯噪声:最常遇到的对手

高斯噪声的数学形式很简单:

I_noisy(x, y) = I_clean(x, y) + n(x, y)
n(x, y) ~ N(0, σ²)

每个像素位置独立叠加一个服从正态分布的随机值。均值 0,方差 σ² 控制噪声强度。

我在项目中遇到过一件事:有次做安防摄像头的去噪算法,甲方说「画面噪点太多」。我一看,σ 大概在 15 左右,属于中等强度高斯噪声。但奇怪的是,用均值滤波效果很差。后来发现——他们摄像头用的是 CMOS 传感器,噪声其实是高斯 + 泊松的混合体。这就是典型的「模型误判」坑。

实战经验:高斯噪声的 σ 值在 0~10 属于轻度,10~25 中度,25 以上重度。我一般先用 σ = 15 作为默认测试值。

1.3 椒盐噪声:黑白点捣乱

椒盐噪声的模型更直接:

I_noisy(x, y) = 
  0 (黑点)  以概率 p/2
  255 (白点) 以概率 p/2
  I_clean(x, y) 以概率 1-p

p 是总噪声密度,一般 p 在 0.01~0.05 就肉眼可见了。p 到 0.1 以上,画面基本没法看。

我曾经调试一个老式工业相机,图像上总有零星白点。一开始以为是灰尘,擦了镜头也没用。后来用直方图一看——0 和 255 两个峰值异常突出,典型的椒盐噪声。原来是传输线缆屏蔽层老化,数据包偶尔丢位。

避坑指南:椒盐噪声不能用高斯滤波去处理,会把黑白点「抹开」成灰斑。中值滤波才是正解。我早期犯过这个错,调了半天参数都没用。

1.4 泊松噪声:信号越强噪声越大

泊松噪声比较特殊。它的方差等于均值:

I_noisy(x, y) ~ Poisson(λ = I_clean(x, y))

这意味着亮区噪声大,暗区噪声小。高斯噪声是均匀分布的,泊松噪声是信号相关的。

我记得做医学 X 光图像增强时,就遇到了泊松噪声。低剂量 X 光下,图像暗部信噪比极差,但亮部反而还行。如果用高斯噪声模型去处理,暗部会被过度平滑,丢失病灶细节。

关键区别:高斯噪声是「加性且均匀」的,泊松噪声是「信号相关」的。处理泊松噪声时,通常先做 Anscombe 变换把它转成近似高斯噪声,再用高斯去噪算法。

1.5 噪声对后续处理的影响

噪声不只是「看着不舒服」,它会破坏后续算法的效果。我整理了一张影响清单:

后续处理 噪声影响 后果
边缘检测 噪声产生虚假边缘 Canny 算子输出一堆假轮廓
图像分割 阈值漂移、区域粘连 分割结果破碎或过合并
特征提取 角点/斑点定位偏移 SIFT/SURF 匹配失败率上升
图像压缩 高频分量增多 JPEG 压缩率下降,块效应加重
深度学习 训练数据分布偏移 模型泛化能力下降

举个例子。我做边缘增强时,如果输入图像有高斯噪声,Sobel 算子会把噪声点也当成边缘。结果就是——边缘没增强,噪声先被放大了。所以降噪永远是边缘增强的前置步骤,顺序不能乱。

1.6 本章知识体系

下面这张图把三种噪声的核心要素串起来了。你可以把它当作战术地图用。

图像噪声知识体系 图像噪声知识体系 图像噪声 高斯噪声 椒盐噪声 泊松噪声 加性 · 正态分布 N(0,σ²) 来源:热噪声、暗电流 脉冲 · 二值分布 (0/255) 来源:传输丢包、坏道 信号相关 · 方差=均值 来源:光子量子随机性 对后续处理的影响 边缘检测 → 虚假边缘 | 分割 → 阈值漂移 | 特征提取 → 定位偏移 | 深度学习 → 泛化下降

我的建议:拿到一张带噪图像,先做三步快速诊断——① 看直方图有没有 0/255 尖峰(椒盐);② 看暗区和亮区噪声是否均匀(高斯 vs 泊松);③ 看噪声是否随信号强度变化(泊松)。三步走完,噪声类型基本锁定。