3、传统降噪方法回顾:均值滤波、中值滤波、高斯滤波、双边滤波的原理与局限性

聊深度学习降噪之前,我觉得有必要先把老伙计们请出来回顾一下。均值滤波、中值滤波、高斯滤波、双边滤波——这四个可以说是图像降噪的"四大金刚",我在刚入行那几年,几乎天天跟它们打交道。

说白了,传统降噪方法的核心思路就一个:用邻域信息来修复当前像素。但怎么用、用多少、保不保留边缘,这就分出高下了。

核心观点:传统滤波方法本质都是"局部加权平均",区别在于权重的定义方式。理解了这个,你就能明白为什么深度学习最终会胜出。

3.1 均值滤波:最朴素的思路

均值滤波的原理简单到令人发指——把目标像素周围一个窗口里的所有像素取个平均值,然后替换掉原来的值。

// 3×3 均值滤波核示例
[1/9, 1/9, 1/9]
[1/9, 1/9, 1/9]
[1/9, 1/9, 1/9]

每个像素的权重完全相等。嗯,这里要注意:所有像素一视同仁,包括噪声点本身。

优点 缺点
实现简单,计算极快 严重模糊边缘和纹理
对高斯噪声有一定效果 对椒盐噪声几乎无效
可分离卷积,效率高 细节丢失不可逆

我记得有一次做工业质检项目,直接用均值滤波去噪,结果产品边缘全糊了,检测精度直接掉到60%。后来我才意识到——均值滤波的本质是低通滤波,它把高频细节和噪声一起干掉了。

避坑:我曾经在医学影像预处理中用均值滤波,结果医生投诉说"血管边缘都看不到了"。从此我再也不敢在需要保留边缘的场景里用均值滤波。

3.2 中值滤波:对抗椒盐噪声的利器

中值滤波的思路完全不同——它不取平均,而是取窗口内所有像素的中位数。

// 3×3 窗口像素值排序
原始窗口:
[12, 15, 18]
[11, 255, 14]   // 255 是椒盐噪声
[13, 16, 17]

排序后:11, 12, 13, 14, 15, 16, 17, 18, 255
中位数:15

输出:15(噪声被完美去除)

为什么中值滤波对椒盐噪声这么有效?你想想看,椒盐噪声是极端值(0或255),排序后它要么在头要么在尾,根本影响不到中位数。这个特性在实战中非常有用。

  • 优势:保护边缘能力远强于均值滤波
  • 优势:对椒盐噪声效果极佳
  • 劣势:计算量大(需要排序),窗口越大越慢
  • 劣势:对高斯噪声效果一般
  • 劣势:细线、尖角等细节会被抹掉

个人经验:我习惯在预处理阶段先用中值滤波做一次椒盐噪声去除,然后再用其他方法处理高斯噪声。两步走往往比一步到位效果好。

3.3 高斯滤波:更科学的加权平均

高斯滤波比均值滤波聪明了一点——它不再给所有邻域像素相同的权重,而是根据空间距离来分配权重。离中心越近,权重越大。

// 3×3 高斯核(σ=1)
[0.075, 0.124, 0.075]
[0.124, 0.204, 0.124]
[0.075, 0.124, 0.075]

这个核是怎么来的?就是二维高斯函数离散化采样。公式我就不写了,你记住一点:σ越大,核越平缓,模糊越严重。

σ值 效果 适用场景
σ=0.5 轻微模糊,保留较多细节 低噪声图像
σ=1.0 适中模糊,平衡去噪与细节 通用场景
σ=2.0 强模糊,细节损失大 高噪声图像

高斯滤波比均值滤波好,但好得有限。为什么?因为它只考虑了空间距离,没考虑像素值差异。边缘两侧的像素虽然空间上很近,但像素值差异很大,高斯滤波照样把它们加权平均在一起——边缘还是糊了。

关键洞察:高斯滤波的局限性在于它"只认位置不认内容"。这个缺陷直接催生了双边滤波的诞生。

3.4 双边滤波:试图兼顾去噪与保边

双边滤波在高斯滤波的基础上加了一个像素值权重。它的权重由两部分相乘得到:

  • 空间权重:和高斯滤波一样,距离越近权重越大
  • 值域权重:像素值越接近,权重越大

这样一来,边缘两侧的像素虽然空间距离近,但像素值差异大,值域权重会变得很小,从而保护了边缘。

// 双边滤波权重示意
权重 = 空间权重 × 值域权重

// 空间权重(高斯)
w_s = exp(-||p - q||² / 2σ_s²)

// 值域权重(高斯)
w_r = exp(-|I(p) - I(q)|² / 2σ_r²)

// 最终权重
w = w_s × w_r
参数 作用 调参经验
σ_s(空间sigma) 控制空间邻域范围 一般取 3-5,太大则计算量爆炸
σ_r(值域sigma) 控制像素值相似度阈值 一般取 0.1-0.3(归一化后),太小则去噪不足

听起来很完美对吧?但我在实际项目中踩过坑——双边滤波有两个硬伤:

  1. 计算量巨大:每个像素都要计算值域权重,没法用可分离卷积加速。一张1080p的图,双边滤波能跑好几秒。
  2. 梯度反转伪影:在强边缘附近,双边滤波会产生"光晕"效果,看起来像边缘被描了一圈。

我曾经踩过的坑:在一个夜景降噪项目里,我用双边滤波处理星空照片,结果星星周围出现了一圈圈的光晕,看起来像外星人来了。后来换成深度学习模型才解决。

3.5 四种方法对比总结

方法 去噪能力 保边能力 计算速度 适用噪声类型
均值滤波 ★☆☆☆☆ ★☆☆☆☆ ★★★★★ 高斯噪声(弱)
中值滤波 ★★★☆☆ ★★★★☆ ★★★☆☆ 椒盐噪声
高斯滤波 ★★☆☆☆ ★★☆☆☆ ★★★★★ 高斯噪声
双边滤波 ★★★☆☆ ★★★★★ ★☆☆☆☆ 高斯噪声+保边

我的建议:传统滤波方法在简单场景下仍然有用。比如快速预览、低算力设备、或者作为深度学习的预处理步骤。但如果你追求极致效果,尤其是复杂纹理和低光照场景,还是得上深度学习。

3.6 传统方法的共同局限

说了这么多,其实传统滤波方法有一个根本性的问题:它们都是手工设计的固定规则。

  • 规则固定:无论图像内容是什么,滤波核都是一样的
  • 参数难调:σ_s、σ_r、窗口大小,全靠人工试
  • 无法适应:平坦区域和纹理区域用同一套规则,必然顾此失彼
  • 信息利用有限:只用局部邻域信息,没有全局上下文

说白了,传统方法就像用一个固定尺寸的筛子去筛所有东西——细沙能筛,石子也能筛,但你要同时筛出细沙和石子,它就无能为力了。

这也是为什么后来大家转向了深度学习——让网络自己去学什么样的"筛子"最适合当前的图像内容。

传统降噪方法知识体系 传统降噪方法 均值滤波 中值滤波 高斯滤波 双边滤波 核心原理:局部加权平均 → 区别在于权重定义方式 边缘模糊 参数难调 规则固定 计算量大 共同局限:手工设计固定规则 → 无法自适应图像内容 → 深度学习降噪应运而生