OpenCV—中值滤波

中值滤波器

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

椒盐噪声

椒盐噪声是由图像传感器,传输信道,解码处理等产生的黑白相间的亮暗点噪声。椒盐噪声是指两种噪声,一种是盐噪声(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 — 内核大小 (只需一个值,因为使用正方形窗口),必须为奇数。

[cpp]  view plain  copy
  1. // load image   
  2. cv::Mat image = imread("f:\\images\\castle.jpg",1);  
  3. cv::resize(image, image, cv::Size(), 0.3, 0.3);  
  4.   
  5. // call function to add noise  
  6. salt(image,3000);//加入盐噪声255  
  7. pepper(image,3000);//加入椒噪声0  
  8.   
  9. // display result  
  10. cv::imshow("salted image",image);  
  11.   
  12. //median filte  
  13. Mat resutl;  
  14. cv::medianBlur(image,resutl,3);  
  15.   
  16. //display result  
  17. cv::imshow("median filted image",resutl);  
  18. cv::waitKey();  
加入盐噪声和椒噪声的函数 salt()pepper()见文章“ OpenCV—图像椒盐噪声生成器”。


加入椒盐噪声的图像


中值滤波后的图像

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/iracer/article/details/49384975

猜你喜欢

转载自blog.csdn.net/a8039974/article/details/80554520