(转)高斯平滑或者说滤波器

来源:互联网 发布:toyama钢琴如何 知乎 编辑:程序博客网 时间:2024/06/06 07:06

发展到现在这个平滑算法的时候, 我已经完全不知道如何去命名这篇文章了, 只好罗列出一些关键字来方便搜索了.

在之前我们提到过了均值滤波器, 就是说某像素的颜色, 由以其为中心的九宫格的像素平均值来决定. 在这个基础上又发展成了带权的平均滤波器, 这里的高斯平滑或者说滤波器就是这样一种带权的平均滤波器. 那么这些权重如何分布呢? 我们先来看几个经典的模板例子:

尝试了使用这些滤波器对我们原来的图进行操作, 得到了这样的一组结果:

原图:

raw

3x3 高斯:

3x3

5x5 高斯:

5x5

 

单纯从效果来看, 两个模板都起到了平滑的作用, 只是程度有深浅的区分. 那么从理论上来说为什么能起到平滑的作用呢? 很显然, 像素的颜色不仅由自身决定了, 同时有其周围的像素加权决定, 客观上减小了和周围像素的差异. 同时这些权重的设定满足了越近权重越大的规律. 从理论来讲, 这些权重的分布满足了著名的所谓高斯分布:

   这就是1维的计算公式

 这就是2维的计算公式

x, y表示的就是当前点到对应点的距离, 而那些具体的模板就是由这里公式中的一些特例计算而来. 需要说明的是不只有这么一些特例, 从wikipedia可以方便地找到那些复杂的模板比如像:

Sample Gaussian matrix

This is a sample matrix, produced by sampling the Gaussian filter kernel (with σ = 0.84089642) at the midpoints of each pixel and then normalising. Note that the center element (at [4, 4]) has the largest value, decreasing symmetrically as distance from the center increases.

0.000000670.000022920.000191170.000387710.000191170.000022920.000000670.000022920.000786330.006559650.013303730.006559650.000786330.000022920.000191170.006559650.054721570.110981640.054721570.006559650.000191170.000387710.013303730.110981640.225083520.110981640.013303730.000387710.000191170.006559650.054721570.110981640.054721570.006559650.000191170.000022920.000786330.006559650.013303730.006559650.000786330.000022920.000000670.000022920.000191170.000387710.000191170.000022920.00000067

是不是看到就头大了:) 不过没关系, 对于一般的应用来说, 前面的例子已经可以完成任务了.  代码的话我们还是给一份5x5的example:

[cpp] view plaincopy
  1. /** 
  2. ** method to remove noise from the corrupted image by gaussian filter value 
  3. * @param corrupted input grayscale binary array with corrupted info 
  4. * @param smooth output data for smooth result, the memory need to be allocated outside of the function 
  5. * @param width width of the input grayscale image 
  6. * @param height height of the input grayscale image 
  7. */  
  8. void gaussianFilter2 (unsigned char* corrupted, unsigned char* smooth, int width, int height)  
  9. {  
  10.     int templates[25] = { 1, 4, 7, 4, 1,   
  11.                           4, 16, 26, 16, 4,   
  12.                           7, 26, 41, 26, 7,  
  13.                           4, 16, 26, 16, 4,   
  14.                           1, 4, 7, 4, 1 };        
  15.       
  16.     memcpy ( smooth, corrupted, width*height*sizeof(unsigned char) );  
  17.     for (int j=2;j<height-2;j++)  
  18.     {  
  19.         for (int i=2;i<width-2;i++)  
  20.         {  
  21.             int sum = 0;  
  22.             int index = 0;  
  23.             for ( int m=j-2; m<j+3; m++)  
  24.             {  
  25.                 for (int n=i-2; n<i+3; n++)  
  26.                 {  
  27.                     sum += corrupted [ m*width + n] * templates[index++] ;  
  28.                 }  
  29.             }  
  30.             sum /= 273;  
  31.             if (sum > 255)  
  32.                 sum = 255;  
  33.             smooth [ j*width+i ] = sum;  
  34.         }  
  35.     }  
  36. }  

附带说一些,很明显,和均值滤波器类似, 这个滤波器没有消除校验噪声的作用.


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 系统无法识别u盘怎么办 手机u盘无法识别怎么办 u盘无法被识别怎么办 电脑不能读取u盘怎么办 电脑装系统卡了怎么办 怀孕三个月胚胎停育怎么办 被蟑螂咬了怎么办图片 有家人进了传销怎么办 有亲人进了传销怎么办 误入传销违法了怎么办 tt游戏账号忘了怎么办 被臭蚊子咬了怎么办 狗狗鼻子掉皮了怎么办 火碱弄到皮肤上怎么办 蓝斑马鱼怀孕后怎么办 汽油喝到肚子里怎么办 加了不好的汽油怎么办 不小心喝了汽油怎么办 如果误喝了汽油怎么办 小孩误喝了汽油怎么办 欠债活不下去了怎么办 待产住院住早了怎么办 狗狗一天吃一顿怎么办 四个月宝宝消化不好怎么办 内火旺盛长痘怎么办 我有恋爱恐惧症怎么办 白鹤芋叶子蔫了怎么办 白掌叶子蔫了怎么办 鱼塘的鱼不吃食怎么办 新买的鱼不吃食怎么办 养的鱼不吃食怎么办 罗汉掉鳞还是洞怎么办 刚买的鱼不吃食怎么办 锦鲤鱼掉鱼鳞片怎么办 锦鲤鱼身上烂了怎么办 鱼掉了一片鳞是怎么办 地图鱼身上烂了怎么办 小腿上有鱼鳞皮怎么办 食道里长了息肉怎么办 蟒蛇皮包翘皮了怎么办 金鱼的鱼鳞掉了怎么办