中值滤波
中值滤波就是是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,它的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的值,从而消除孤立的噪声点。中值滤波一般使用模板的方法实现,对模板内的像素按照像素值的大小进行排序,生成单调上升(或下降)的二维数据序列,并使用下面的公式进行输出:
g(x,y)=med{f(x-m,y-n),(m,n∈W)}
其中,f(x,y)表示原始的图像,而g(x,y)表示处理后的图像。
中值滤波一般使用二维模板,滤波窗口通常为 3*3,5*5,7*7 区域,实际使用中,我们常常放大窗口长度,选取最合适的直到滤波效果满意为止,对于缓变长轮廓物体一般采用方形和圆形,对于尖角形一般采用十字形窗口。后面的程序采用 3*3 矩形区域。实现方法是通过从图像中的某个采样窗口取出奇数个数据进行排序。用排序后的中值取代要处理的数据即可。
中值滤波适用范围
中值滤波对椒盐噪声的抑制效果好,在抑制随机噪声的同时能有效保护边缘少受模糊。但它对点、线等细节较多的图像却不太合适。对中值滤波法来说,正确选择窗口尺寸的大小是很重要的环节。一般很难事先确定最佳的窗口尺寸,需通过从小窗口到大窗口的中值滤波试验,再从中选取最佳的。
在opencv下使用中值滤波
OpenCV函数 medianBlur 执行中值滤波操作:
/*************************************************************************
*
* 函数名称:
* MedianFilter()
*
* 参数:
* LPSTR lpDIBBits - 指向源DIB图像指针
* LONG lWidth - 源图像宽度(象素数)
* LONG lHeight - 源图像高度(象素数)
* int iFilterH - 滤波器的高度
* int iFilterW - 滤波器的宽度
* int iFilterMX - 滤波器的中心元素X坐标
* int iFilterMY - 滤波器的中心元素Y坐标
*
* 返回值:
* BOOL - 成功返回TRUE,否则返