中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声。这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能。观察窗口中的数值进行排序,位于观察窗中间的中值作为输出。然后,丢弃最早的值,取得新的采样,重复上面的计算过程。
在图像处理中,在进行如边缘检测这样的进一步处理之前,通常需要首先进行一定程度的降噪。中值滤波是图像处理中的一个常用步骤,它对于斑点噪声(specklenoise)和椒盐噪声(alt-and-peppernoise)来说尤其有用。保存边缘的特性使它在不希望出现边缘模糊的场合也很有用。
为了演示中值滤波器的工作过程,我们给下面的数组加上观察窗3,重复边界的数值:
x=[28063]。
所以,中值滤波输出信号y将是:
y[1]=Median[2280]=2,
y[2]=Median[2806]=Median[2680]=6,
y[3]=Median[8063]=Median[3680]=6,
y[4]=Median[633]=Median[336]=3,
于是y=[2663],其中y是x的中值滤波输出。
中值滤波器的主要思想是通过入口来遍历信号入口,用邻居入口的中值替换每个入口。邻居的模式被称为“窗口”,它通过入口滑动,覆盖整个信号。对于一维信号,最明显的窗口只是前后几项,而2D(或更高维)信号(如图像)则可能有更复杂的窗口模式(如“盒子”或“十字”模式)。请注意,如果窗口中有奇数个条目,则中位数很容易定义:在窗口中的所有条目都按数字排序之后,这只是中间值。对于偶数的条目,有不止一个可能的中位数。
请注意,在上面的例子中,因为个值之前没有条目,所以个值和一个值一样重复,以获得足够的条目来填充窗口。这是在信号边界处理丢失的窗口条目的一种方法,但是还有其他的方案具有不同的属性,在特定情况下可能是优选的:
避免处理边界,之后有或没有裁剪信号或图像边界,
从信号中的其他地方获取条目。以图像为例,可以选择来自远水平或垂直边界的条目,
缩小边界附近的窗口,使每个窗口都满了
通常,到目前为止,大部分的计算工作和时间花费在计算每个窗口的中值上。由于滤波器必须处理信号中的每个条目,对于像图像这样的大信号,这个中值计算的效率是确定算法运行速度的关键因素。上面描述的天真的实现将窗口中的每个条目进行排序以找到中间值;然而,由于只需要列表中的中间值,所以选择算法可以更有效。此外,某些类型的信号(通常是图像的情况)使用整数表示:在这些情况下,直方图因为从窗口到窗口更新直方图是简单的,并且找到直方图的中值并不特别繁琐,所以中值可以更有效得多。
中值滤波是一种平滑技术,与线性高斯滤波一样。所有的平滑技术都能有效去除信号光滑区域或平滑区域的噪声,但对边缘产生不利影响。通常,在减少信号中的噪声的同时,保持边缘是重要的。例如,边缘对于图像的视觉外观是至关重要的。对于(高斯)噪声的小至中等水平,中值滤波器在消除噪声方面明显好于高斯模糊,同时为给定的固定窗口大小保留边缘。然而,对于高噪声,其性能并不比高斯模糊好,而对于散斑噪声和椒盐噪声(冲动噪音),这是特别有效的。因此,中值滤波在数字图像处理中被广泛使用。
在GIMP2.8.2中操作如下:
滤镜->增强->去除斑点。
不要勾选适应和递归,设置黑色水平为-1,白色水平为256。根据需要调节半径。半径越大,细节越少。