中值滤波(Median Filter)是一种非线性滤波技术,其基本思想是在单通道中将像素点邻域的灰度值进行排序,取中间值来代替原来的像素点的灰度值。中值滤波是目前处理椒盐噪声最好的滤波方式。
椒盐噪声(salt-and-pepper noise)又称脉冲噪声,在传感器或者远程传输的过程中,原本的数据会被影响,导致图像出现大量散粒状的噪声点。而在图像中,能量大部分集中在低频和中频,因此将邻域的数据排序取的中间值很少会取到被污染的高频点。
一、几个基本概念
(1)什么是线性滤波和非线性滤波?
线性滤波:
指两个或多个信号之和的响应等于它们各自响应之和。这么说过于学术化了,简单来说就是图像上的每一个像素点的输出值是等于一些输入像素点的加权和。
非线性滤波:
在计算中包含了取绝对值、置零等非线性运算。
(2) 像素点的邻域
顾名思义,一个像素点的邻域是指该像素点相邻的一些像素点。
二、中值滤波器原理
如果不在边缘区域,图像的数据是平缓的,没有太大的差值。因此,一个噪声点的值要么过大,要么过小。比如下图,左图是没有处理的原图,250在该区域由为突出,通过对3*3的9个数据进行排序,将中间值150重新填入,即滤波完成,原本的噪声点被去掉,该区域恢复平缓。同理,在边缘区域中,对于边界来说,高频不会影响,而过低数值将会突出,中值的选择将不会受到影响,除非3*3的整块区域都被污染,这时我们可以考虑更大的核来处理。
三、中值滤波实现过程
首先来看看程序效果:
(1) main函数: 读取图片—中值滤波——显示
int main(void)
{
// [1] src读入图片
cv::Mat src = cv::imread