高斯滤波算法讲解_高斯滤波算法讲解

                       

高斯滤波算法讲解_高斯滤波_02

        它们的图像分别为:                                                                      

 

高斯滤波算法讲解_权值_03

   

高斯滤波算法讲解_权值_04

        那么高斯滤波模板是怎么生成的呢?是通过二维高斯函数计算出来的。例如,我们假设一个高斯模板的长、宽均为5,方差为0.5,那么首先,我们要在模板上建立一个坐标系,其原点就是高斯模板的中心点,如下图:

高斯滤波算法讲解_二维_05

        然后每个模板的坐标就可以确定了:

                    

高斯滤波算法讲解_高斯滤波_06


        每个格子对应的坐标,就是二维高斯分布中的(x,y)坐标的值。现在,我们可以计算出高斯模板上每个坐标位置的系数了。例如:

        (-2,2)上的权值:W = 

高斯滤波算法讲解_二维_07

,把pi = 3.14,  σ=0.5,x=-2,y=2带入上式,获得(-2,2)处的权值。

       同理,可以计算 其他位置的权值。

        最后获得一个5*5,标准差σ为0.5的高斯滤波器(经过归一化以后):

        

高斯滤波算法讲解_权值_08

        matlab中可以使用fspecial函数实现高斯滤波模板,使用方法为:YourFilter = fspecial('gaussian', [ 5 5], 0.5);

        在matlab中可以查看fspecial的源代码,通过open fspecial打开。我之前自己写了一个matlab版的实现高斯模板的代码,通过与fspecial的源代码对比,有些不一样的地方,而且我的代码确实不如自带的快,所以在这里只贴源代码。

        fspecial函数可以实现多种类型的滤波器,当第一个参数为"gaussian'时,实现的是高斯滤波器,源代码通过switch判断用户想得到哪种类型的滤波器,这里只把与高斯滤波器有关的代码贴出来,并放在一个函数中,我们把这个函数命名为gaussianFilter。函数的代码如下:

        


[plain] view plain copy


1. function h = gaussianTemplate2( p2, p3 )  
2. %p2是模板的大小,以[m n]的形式定义  
3. %p3是标准差,即σ  
4. %h是输出的高斯模板  
5. %以下代码是从fspecial中贴出来的代码  
6.   
7.     siz   = (p2-1)/2;           %siz为模板行与列各自最大的坐标值  
8.     std   = p3;                 %标准差幅值给std  
9.   
10.     %通过meshgrid产生模板上所有位置的x和y的值,这样的好处是可以避免使用循环去  
11.     %变换坐标值,提高程序运行的速度  
12.     [x,y] = meshgrid(-siz(2):siz(2),-siz(1):siz(1));  
13.       
14.     %二维高斯分布公式中e的指数  
15.     arg   = -(x.*x + y.*y)/(2*std*std);  
16.   
17.     %这里没有乘以1/2*pi*σ^2,也就是没有乘以e前面的系数,因为后面在作归一化的  
18.     %时候,会把这个系数约去,所以在这里直接省去乘法运算,提高程序运行速度  
19.     h     = exp(arg);  
20.       
21.     %这句话没有太理解,貌似只有在max(h(:))大于1的时候h才有可能小于eps*max(h(:))  
22.     %个人理解应该是限制一下h中的权值,如果权值相对于h中的最大值特别小的话,可以  
23.     %忽略不计,使之为零  
24.     h(h<eps*max(h(:))) = 0;   
25.   
26.     %归一化  
27.     sumh = sum(h(:));  
28.     if sumh ~= 0,  
29.         h  = h/sumh;  
30.     end;  
31. end

        获得高斯模板后,使用imfilter函数对图像进行滤波,即可获得高斯滤波效果。下面我们使用不同的高斯滤波器,对同一幅图像进行滤波,滤波的结果如下所示:

高斯滤波算法讲解_权值_09

    

高斯滤波算法讲解_权值_10

                            原始图像                                                           加入高斯噪声图像

高斯滤波算法讲解_高斯滤波算法讲解_11

    

高斯滤波算法讲解_高斯滤波_12

         使用5*5,方差为0.5的高斯滤波器滤波                             使用5*5,方差为1.5的高斯滤波器滤波

高斯滤波算法讲解_高斯滤波_13

     使用11*11,方差为0.5的高斯滤波器滤波