中值滤波在图像去噪点中的应用

        中值滤波是一种非线性的图像平滑方法,与均值滤波器以及其他线性滤波器相比,它能够很好地滤除脉冲噪声,同时又能够保护目标图像边缘。它是一种邻域运算,类似于卷积,但计算的不是加权求和,而是把邻域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值,中值滤波可定义为:

 

        式中:g(x,y)和f(x-i,y-i)分别为输出和输入像素灰度值,W为模板窗口。窗W可以取线状、方形、十字形、圆形、菱形等。

        


        中值滤波实现过程如上图所示。标准的中值滤波器都是由一个奇数大小尺寸的滑动窗组成,通常为3x3窗或5x5窗等。以3x3窗为例,该窗沿着图像数据的行方向逐像素滑动,在每一次滑动期间内,方形窗中的所有像素按照灰度值被排序,这组数据中的中值作为输出,替代原来窗函数的中心位置像素的灰度值。
         C语言基础实现如下:

windowSize = 3;                                           //windowSize是指窗口的长度。
v = (char *)calloc(windowSize*windowSize,sizeof(char));   //v存储的是窗口内所有像素的灰度级。

for(i=(windowSize-1)/2;i<height-(windowSize-1)/2;i++)
{
   for(j=(windowSize-1)/2;j<width-(windowSize-1)/2;j++)
  {                                                       //这个嵌套的for循环是为了让窗口在整个图像内进行移动,i和j就是这个窗口的中心像素在整幅图像中坐标位置
      k=0;
      for(l=0;l<windowSize;l++)
      {
         for(m=0;m<windowSize;m++)
         {
            v[k]=h[i-(windowSize-1)/2+l][j-(windowSize-1)/2+m];
            k++;
         }
      }                                                  //这个嵌套的for循环式获取这个窗口内的所有像素的灰度级,存储在v中
      BubbleSort(v,windowSize*windowSize);               //对v内的元素进行排序
      
      h[i][j]=v[windowSize*windowSize/2];                //把排序后中间的那个数赋值给窗口的中心像素。
   }
}

效果图(窗口大小设置成3):

中值滤波前的图像

处理之后的图像:

中值滤波处理之后的


         

参考链接:

http://blog.csdn.net/vincentzhao2009/article/details/4565601

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值