一、原始中值滤波
1.1定义与原理
中值滤波器是一种非线性信号处理滤波器,主要用于图像降噪和细节保留。其核心思想是:用窗口内像素值的中值替代当前像素值。具体步骤如下:
- 定义窗口:在图像中选取以当前像素为中心的矩形窗口(如 3×3、5×5 等)。
- 排序像素值:将窗口内所有像素的灰度值按大小排序。
- 取中值替换:用排序后的中值替换当前像素的值。
1.2 优势:
- 对 *椒盐噪声(脉冲噪声) 有极佳的降噪效果,优于均值滤波器。
- 能有效保留图像边缘和细节,避免均值滤波可能导致的模糊。
1.3实例
在上述示例中,中值滤波器选择值 104,因为它上方有四个值,下方有四个值。中值滤波操作通过滑动窗口概念在图像上执行(见图1 ),这与卷积操作类似。需要注意的是,使用这种技术时,外侧的 [(N + 1)/2] –1 行和列不会被替换。在实际应用中,这通常不是问题,因为图像比掩模大得多,这些 “多余” 的行和列通常用零填充(或从图像中裁剪掉)。例如,使用 3×3 掩模时,会丢失一个外侧行和列;使用 5×5 掩模时,会丢失两个行和列 —— 对于典型的 640×480 或更大的图像来说,这通常并不显著。使用中值滤波器处理椒盐(脉冲)噪声的结果如图 2 所示。需要注意的是,对于 RGB 三波段彩色图像,每个颜色波段需单独处理。


(a) 添加了椒盐噪声的图像,盐噪声概率 = 胡椒噪声概率 = 0.08,
(b) 经 3×3 窗口中值滤波后,噪声未完全去除,
(c) 经 5×5 窗口中值滤波后,噪声完全去除,但图像出现模糊并呈现 “涂抹” 效果。
二、原始中值滤波改进版
自适应中值滤波(Adaptive Median Filter)是一种针对椒盐噪声(Salt-and-Pepper Noise)设计的图像滤波算法,属于非线性滤波技术。与传统固定窗口的中值滤波相比,其核心优势在于动态调整窗口大小,在有效去除噪声的同时,尽可能保留图像细节(如边缘、纹理等),避免标准中值滤波可能导致的图像模糊或小结构失真。
2.1、基本概念
-
目标
- 去除椒盐噪声(高 / 低极值噪声点)。
- 保留图像细节(如边缘、小尺寸物体),减少传统中值滤波的模糊效应。
-
核心思想
- 通过可变窗口大小(从小到大逐步扩展),根据局部区域的噪声分布动态调整滤波范围。
- 当窗口内包含噪声点时,用中值替代;当窗口内无噪声时,直接保留原像素值。
2.2、关键定义与符号
设当前处理的像素为 f(x,y),窗口记为 Sxy(初始大小为 3×3,最大可扩展至 Smax×Smax)。定义以下参数:
- zmin:窗口内像素的最小值(代表 “胡椒” 噪声)。
- zmax:窗口内像素的最大值(代表 “盐” 噪声)。
- zmed:窗口内像素的中值。
- zxy:当前像素值 f(x,y)。
2.3、算法步骤
自适应中值滤波分为两个阶段(阶段 A和阶段 B),通过双重条件判断确定输出值:
阶段 A:判断当前窗口是否包含噪声
计算以下两个条件:
- 条件 1:zmin<zmed<zmax
- 若成立,说明窗口内同时存在非噪声的中间值,进入阶段 B。
- 若不成立,说明窗口内全为噪声或极值(如窗口内全为盐 / 胡椒噪声),需扩大窗口大小。
阶段 B:判断当前像素是否为噪声
计算以下两个条件:
- 条件 2:zmin<zxy<zmax
- 若成立,说明当前像素 zxy 非噪声,输出 zxy。
- 若不成立,说明当前像素 zxy 是噪声(盐或胡椒),输出 zmed(用中值替代噪声点)。
窗口扩展规则
- 若阶段 A 的条件 1 不成立,且当前窗口未达到最大尺寸 Smax,则将窗口大小扩大(如从 3×3 增至 5×5),重新执行阶段 A 和阶段 B。
- 若窗口已达最大尺寸仍不满足条件 1,则输出 zmed(强制用中值替代,避免过度扩展窗口)。
2.4 伪代码
初始化窗口大小 S = 3×3(最小窗口)
循环:
计算当前窗口内的 z_min, z_max, z_med
阶段A:
if z_min < z_med < z_max:
进入阶段B
else:
if S < S_max:
S = S + 2(扩大窗口,如从3×3到5×5)
重新计算当前窗口参数
else:
输出 z_med
结束循环
阶段B:
if z_min < z_xy < z_max:
输出 z_xy(非噪声,保留原值)
else:
输出 z_med(噪声点,用中值替代)
结束循环
2.5示例
给定两幅加了椒盐噪声的图像:
对图像1排序有:[255 13 12 11 11 10 10 9 9]
Level1:zmin<zmed=11<zmax为真,转到Level2
Level2:zmin<zxy=255<zmax为假,输出11
此时我们消除了椒盐噪声。
对图像2排序有:[255 255 255 255 255 13 11 10 9]
Level1:zmin<zmed=255<zmax为假,需要扩大窗口:
此时的中值在最大值和最小值之间,所以转到Level2并输出中值。

对ISP图像处理感兴趣的小伙伴,欢迎加入我的星球共通学习探讨:https://t.zsxq.com/DHkB7