中值滤波器

中值滤波器是一种非线性滤波器,常用于消除图像中的椒盐噪声。与低通滤波不同的是,中值滤波有利于保留边缘的尖锐度,但它会洗去均匀介质区域中的纹理。

椒盐噪声

椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声是指两种噪声,一种是盐噪声(salt noise)盐=白色(255),另一种是胡椒噪声(pepper noise),椒=黑色(0)。前者是高灰度噪声,后者属于低灰度噪声。一般两种噪声同时出现,呈现在图像上就是黑白杂点。对于彩色图像,则表现为在单个像素BGR三个通道随机出现的255与0,如下图所示。

中值滤波器

 

在输入图像x(n1, n2)中,以任一像素为中心设置一个确定的邻域AA的边长为2N+1,(N=0,1,2,…)。将邻域内各像素的强度值按大小顺序排列,取位于中间位置的那个值(中值)作为该像素点的输出值,遍历整幅图像就可完成整个滤波过程:A=x(i,j),  y=Med{x1, x2, x3,…,x2N+1}

函数

void medianBlur( InputArray src, OutputArray dst,int ksize );

参数

src — 输入图像

dst — 输出图像, 必须与 src 相同类型

ksize — 内核大小 (只需一个值,因为使用正方形窗口),必须为奇数。

// load image 
cv::Mat image = imread("f:\\images\\castle.jpg",1);
cv::resize(image, image, cv::Size(), 0.3, 0.3);
 
// call function to add noise
salt(image,3000);//加入盐噪声255
pepper(image,3000);//加入椒噪声0
 
// display result
cv::imshow("salted image",image);
 
//median filte
Mat resutl;
cv::medianBlur(image,resutl,3);
 
//display result
cv::imshow("median filted image",resutl);
cv::waitKey();

加入盐噪声和椒噪声的函数salt()pepper()见文章“OpenCV—图像椒盐噪声生成器”。

加入椒盐噪声的图像

中值滤波后的图像

中值滤波器对椒盐噪声抑制非常有效,这是因为椒盐噪声值为255或0,它散布在邻域中,不是最大值就是最小值,不可能成为中值,因此能被较好的滤除。

转载请注明出处:

https://mp.csdn.net/editor/html/49384975


新书终于面市啦,《机器学习原理与编程实战》连接原理与实战:

https://blog.csdn.net/iracer/article/details/116051674?spm=1001.2014.3001.5501