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

这篇文章用到的中值滤波的算法如下:

      首先确定一个windowSize*windowSize大小的窗口,这里的windowSize是一个奇数,因此这个窗口一定会有一个中心的像素,中值滤波的过程就是不断的移动这个窗口,然后对窗口内的所有像素的像素值按照灰度级来排序,最后把排序后中间那个像素的灰度级赋值给窗口中心那个像素。这个就是中值滤波的意义。

      举个例子,例如是3*3的窗口(数字表示灰度级):

      122 34  100

      20   18  201

      128 79  25

      排序后,就成了18,20,25,34,79,100,122,128,201,可以看到79就是中间那个数,因此这个3*3的窗口就变成了如下:

      122 34  100

      20   79  201

      128 79  25

      这个就是中值滤波的基本思想。

 

      说了这么多,贴代码吧:

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循环是为了让窗口在整个如想nei进行移动,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):

中值滤波前的图像

处理之后的图像:

中值滤波处理之后的

 

      在over前需要说的是这篇文章讲的中值滤波仅仅是最基础的思想,在进行滤波的时候可以加一些判断,来决定是否赋值,怎样赋值,等等。就说这么多吧。over。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值