均值滤波器可以归为低通滤波器,是一种线性滤波器,其输出为邻域模板内的像素的简单平均值,主要用于图像的模糊和降噪。
均值滤波器的概念非常的直观,使用滤波器窗口内的像素的平均灰度值代替图像中的像素值,这样的结果就是降低图像中的“尖锐”变化。这就造成,均值滤波器可以降低噪声的同时,也会模糊图像的边缘。均值滤波器的处理结果是过滤掉图像中的“不相关”细节,其中“不相关”细节指的是:与滤波器模板尺寸相比较小的像素区域。
根据均值计算方法的不同,均值滤波器有以下几种:
算术均值滤波器
几何均值滤波器
谐波均值滤波器
逆谐波均值滤波器
算术均值滤波器 Arithmetic Mean Filter
这是最简单的均值滤波器,可以去除均匀噪声和高斯噪声,但会对图像造成一定程度的模糊。
令\(S_xy\)表示中心点在\((x,y)\)处,大小为\(m \times n\)的滤波器窗口。算术均值滤波器就是简单的计算窗口区域的像素均值,然后将均值赋值给窗口中心点处的像素:
\[ f(x,y) = \frac{1}{mn}\sum_{(x,y) \in S_{xy}} g(s,t)
\]
其中,\(g(s,t)\)表示原始图像,\(f(x,y)\)表示均值滤波后得到的图像。
基于上述公式,可以很容易的得到的算术均值滤波器的窗口模板,下面以\(3 \times 3\)为例
\[ \frac{1}{9} \left [
\begin{array}{c}
1 & 1 & 1 \\ 1& 1 & 1 \\ 1 & 1 & 1
\end{array}
\right ]
\]
在OpenCV中,函数blur表示使用该模板的均值滤波器,其声明如下:
void blur( InputArray src, OutputArray dst,
Size ksize, Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT );
src是输入图像,dst为输出图像;ksize是滤波器模板窗口的大小;后两个参数分别表示,待处理像素在模板窗口的位置,默认值是窗口的中心位置,所以窗口的大小一般为奇数,最后一个参数表示对编解类型的处理,使用默认值即可。其调用示例blur(src,dst,Size(5,5),模板窗口的大小为\(5 \times 5\)。
盒状滤波器
当滤波器的模板的所有的系数都相等时称之为盒状滤波器 Box Filter。其使用的模板如下(\(3 \times 3\) 为例):
\[ \alpha \left [
\begin{array}{c}