织梦CMS - 轻松建站从此开始!

罗索

均值滤波器 ( Mean Filter ) C++ 实现

落鹤生 发布于 2012-03-07 09:49 点击:次 
原来是不做图像处理这块的, 所以对这里的专用名字不是特别感冒, 滤波器听来玄而又玄。真正拿来看了之后就不过尔尔了, 这把拿了一个均值滤波器的例子来做记录, 希望可以依次把一些median filter, gaussian blur都拿来说说。
TAG:

原来是不做图像处理这块的, 所以对这里的专用名字不是特别感冒, 滤波器听来玄而又玄。真正拿来看了之后就不过尔尔了, 这把拿了一个均值滤波器的例子来做记录, 希望可以依次把一些median filter, gaussian blur都拿来说说。

好吧言归正传, 这里就具体说说均值滤波器是什么东西吧。其实这个东西就是在图像处理的时候, “把每个像素都用周围的8个像素来做均值操作 ”, 比如说这里有一个例子:

sample

图通常是最能说明问题的东西, 非常明显的, 这个3*3区域像素的颜色值分别是5,3,6,2,1,9,8,4,7那么中间的1这个像素的过滤后的值就是这些值的平均值, 也就是前面的计算方法: (5+3+6+2+1+9+8+4+7)/9=5

一目了然。那么这个均值滤波器有什么用处呢?

主要还是平滑图像的用处, 有的图像的锐度很高,用这样的均值算法,可以把锐度降低。使得图像看上去更加自然,下面就有几幅图我们可以看出一些端倪:

原图:                                                                          平滑处理之后:

这里还是可以明显的感觉到不同的, 没有好坏之分,就是第二幅图片看上去更为平滑。 继续我们的问题, 那这里均值平滑是否具有去除噪声的功能呢? 我们搞来了椒盐噪声(就是随机的白点,黑点)来试试手:

噪声图(5%):                                                         平滑处理之后:

首先这里的噪声还是比较小的, 只有5%,从均值的效果来看的话, 我可以说几乎没有用,其实直观的想也可以判断, 因为这里的处理并没有剔除这些噪声点, 而只是微弱地降低了噪声,所以效果可以想见的。。

好吧, 最后的时候还是贴上一段处理的代码:

  1. /** 
  2. ** method to remove noise from the corrupted image by mean value 
  3. * @param corrupted input grayscale binary array with corrupted info 
  4. * @param smooth output data for smooth result, the memory need to
  5.  be allocated outside of the function 
  6. * @param width width of the input grayscale image 
  7. * @param height height of the input grayscale image 
  8. */ 
  9. void meanFilter (unsigned char* corrupted, unsigned char* smooth
  10. int width, int height) 
  11.      
  12.     memcpy ( smooth, corrupted, width*height*sizeof(unsigned char) ); 
  13.      
  14.     for (int j=1;j<height-1;j++) 
  15.     { 
  16.         for (int i=1;i<width-1;i++) 
  17.         { 
  18.             smooth [ j*width+i ] = ( corrupted [ (j-1)*width+(i-1) ]
  19.  + corrupted [ (j-1)*width+i] + corrupted [ (j-1)*width+(i+1) ]
  20.  + corrupted [ j*width+(i-1) ]
  21.  + corrupted [ j*width+i]     + corrupted [ j*width+(i+1) ]
  22.  + corrupted [ (j+1)*width+(i-1) ]
  23.  + corrupted [ (j+1)*width+i] + corrupted [ (j+1)*width+(i+1) ] ) / 9; 
  24.         } 
  25.     } 

说明一下,我比较偷懒。一般处理的时候通常还有边界上的一些处理, 但是我这里就简单的从1...width-1来处理, 所以第一个和最后一个像素就简单的抛掉了, 如果只是简单的看看效果还是没有问题的!

(hhygcy)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201203/15793.html]
本文出处:CSDN博客 作者:hhygcy 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容