平滑空间滤波器是低频增强的空间滤波技术。它的目的有两类:一是模糊处理,二是降低噪声。本文介绍的平滑空间滤波器也分为两类,一类是线性滤波器,比如最简单的简单平均法;另一类是统计排序滤波器。
平滑处理也常称为模糊处理。是因为对于线性滤波器来说,一般高通是锐化,低通是模糊。
下面我们先来说说平滑线性滤波器。
平滑线性空间滤波器的输出(响应)是包含在滤波器模板邻域内的像素的简单平均值。这些滤波器有时也称为均值滤波器。也可以把它们归入低通滤波器。
这种处理的结果降低了图像灰度的尖锐变化。由于典型的随机噪声由灰度级的急剧变化组成,因此常见的平滑处理的应用就是降噪。
然而,由于图像边缘(几乎总是一幅图像希望有的特性)也是由图像灰度尖锐变化带来的特性,所以均值滤波器处理还是存在着不希望有的边缘模糊的负面效应。
下面这幅图中的是最为常见的简单平均的滤波器模板
所有系数都相等的空间均值滤波器,有时也被称为盒状滤波器。
这个滤波器模板相比于上一个更加重要。这个滤波器模板产生所谓的加权平均,使用这一术语是指,用不同的系数去乘以像素。即一些像素的重要性(权重)比另外一些像素的重要性更大。
在这个例子所示的模板中,中心位置的系数最大,因此在均值计算中可以为该像素提供更大的权重。其他像素离中心越近就赋予越大的权重。
这种加权重的策略的目的是,在平滑处理中,试图降低模糊。
我们也可以选择其他权重来达到相同的目的。
但是,这个例子中所有系数的和等于16,这对于计算机来说是一个很有吸引力的特性,因为它是2的整数次幂。
在实践中,由于这些模板在一幅图像中的任何一个位置所跨越的区域很小,通常很难看出这两个模板或者类似方式进行平滑处理后的图像之间的区别。
一幅M * N的图像进过一个m*n的加权均值滤波器,滤波的过程可由下式给出:
当图像的细节与滤波器模板近似相同时,图像中的一些细节受到的影响比较大。
邻域越大平滑的效果越好。但是邻域过大,平滑会使边缘信息损失的越大,从而使输出的图像变得模糊,因此需要合理的选择邻域的大小。
模板的大小由那些即将融入背景中的物体R的尺寸来决定。
滤波后的图像中可能会有黑边。这是由于我们用0(黑色)填充原图像的边界,经滤波后,再去除填充区域的结果,某些黑的混入了滤波后的图像。对于使用较大滤波器平滑的图像,这就成了问题。
统计排序(非线性)滤波器
统计排序滤波器是一种非线性空间滤波器,这种滤波器的响应以滤波器包围的图像的像素的排序为基础,然后使用统计排序结果决定的值代替中心像素的值。
这一类中最知名的就要数中值滤波器了~它是将像素邻域内的灰度值的中值代替该像素的值。
中值滤波器的使用非常的普遍,它对于一定类型的随机噪声提供了一种优秀的去噪能力。而且比同尺寸的线性平滑滤波器的模糊程度明显要低。不足之处就是中值滤波花费的时间是均值滤波的5倍以上。
中值滤波器对于处理脉冲噪声非常有效,这种噪声称为椒盐噪声,因为这种噪声是以黑白点的形式叠加在图像上的。
中值滤波器的主要功能是使拥有不同灰度的点看起来更接近于他们的相邻点。
我们使用m*m中值滤波器来去除那些相对于其邻域像素更亮或更暗并且其区域小于(m^2)/2(滤波器区域一半)的孤立像素族。
以下是openCV的均值滤波、中值滤波
using namespace cv;
Mat srcImage = imread("M:/图像处理实验/平滑空间滤波器/椒盐噪声.jpg");
//均值滤波
Mat dstImage;
blur(srcImage,dstImage,Size(5,5));
imwrite("M:/图像处理实验/平滑空间滤波器/椒盐噪声result.jpg", dstImage);
using namespace cv;
Mat srcImage = imread("M:/图像处理实验/平滑空间滤波器/椒盐噪声.jpg");
//中值滤波
Mat dstImage;
medianBlur(srcImage,dstImage,5);
imwrite("M:/图像处理实验/平滑空间滤波器/中值滤波.jpg", dstImage);
添加了椒盐噪声的图像
均值滤波后的结果
很明显,中值滤波的效果要比均值滤波好的多~