左超

NeverGiveUpEasily!

高斯滤波器

摘 要 在图像预处理中,对图像进行平滑,去除噪声,恢复原始图像是一个重要内容。本文设计了一个平滑尺度和模板大小均可以改变的高斯滤波器,用它对多幅加入各种噪声后的图像进行平滑,经过对各个结果图像的对比可知高斯滤波对服从正态分布的噪声去除效果比较好,并且相比各个不同参数,在平滑尺度为2,模板大小为7时效果最佳。 关键词 图像预处理;平滑处理;平滑尺度;模板大小;高斯滤波


1 引言一幅原始图像在获取和传输过程中会受到各种噪声的干扰,使图像质量下降,对分析图像不利。反映到图像画面上,主要有两种典型的噪声。一种是幅值基本相同,但出现的位置随机的椒盐噪声,另一种则每一点都存在,但幅值随机分布的随机噪声。为了抑制噪声、改善图像质量,要对图像进行平滑处理。图像平滑处理的方法多种多样,有邻域平均、中值滤波,高斯滤波、灰度最小方差的均值滤波等。这里主要就是分析高斯滤波器的平滑效果。以下即为本课题研究的主要内容及要求:
第一,打开显示对应图像;
第二,编写给图像加噪声的程序;
第三,程序中实现不同平滑尺度、不同模板大小的高斯模板设计,并将设计结果显示出来;
第四,以Lena图像为例,进行加噪声,分析平滑的实验效果。
2 高斯平滑滤波器的原理高斯滤波器是根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对去除服从正态分布的噪声是很有效果的。一维零均值高斯函数为 。其中,高斯分布参数 决定了高斯滤波器的宽度。对图像来说,常用二维零均值离散高斯函数作平滑滤波器,函数表达式如下:

               式(1)

高斯函数具有5个重要性质:
(1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的。一般来说一幅图像的边缘方向是不知道的。因此,在滤波之前是无法确定一个方向比另一个方向上要更多的平滑的。旋转对称性意味着高斯滤波器在后续的图像处理中不会偏向任一方向。
(2)高斯函数是单值函数。这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点的权值是随着该点与中心点距离单调递减的。这一性质是很重要的,因为边缘是一种图像局部特征。如果平滑运算对离算子中心很远的像素点仍然有很大的作用,则平滑运算会使图像失真。
(3)高斯函数的傅立叶变换频谱是单瓣的。这一性质是高斯函数傅立叶变换等于高斯函数本身这一事实的直接推论。图像常被不希望的高频信号所污染,而所希望的图像特征,既含有低频分量,又含有高频分量。高斯函数傅立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需要的信号。
(4)高斯滤波器的宽度(决定着平滑程度)是由参数σ表证的,而且σ和平滑程度的关系是非常简单的。σ越大,高斯滤波器的频带就越宽,平滑程度就越好。通过调节平滑程度参数σ,可在图像特征分量模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷。
(5)由于高斯函数的可分离性,大高斯滤波器可以有效实现。通过二维高斯函数的卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积的结果与方向垂直的相同一维高斯函数进行卷积。因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长。这些性质使得它在早期的图像处理中特别有用,表明高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器。
高斯函数的可分离性很容易表示:

        式(2)

      式(3)

式(4)

3 离散高斯平滑滤波器的设计在高斯滤波器的设计中,高斯函数的最佳逼近由二项式展开的系数决定。由高斯函数的可分离性得到,二维高斯滤波器能用2个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向。实际上,这种运算可以通过使用单个一维高斯模板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成。
对较大的滤波器,二项式展开系数对大多数计算机来说都太多,但是,任意大的高斯滤波器都能通过重复使用小的高斯滤波器来实现。设计高斯滤波器的另一途径是直接从离散高斯分布中计算模板值。

             式(5)

其中c是规范化系数,把上式重新表示为

                式(6)

选择适当的σ2值,就可以在 窗口上评价该值,以便获取核或模板。
本实验中笔者就是采用的第二种方法。首先选择n值和σ2值,然后根据式(4)计算出模板的右下角元素,再根据高斯模板的中心左右上下对称性(如图1 c7×7的模板结构所示)对应地复制给其它三个区域,即可得出整个模板的元素,最后再对全部的模板元素求和、取倒数即求得规范化系数 。
程序中求模板元素的主要实现部分如下:
     for(i=0;i<N+1;i++)               //取模板大小(2N+1) (2N+1)的右下角部分
     {    for(j=0;j<N+1;j++)
         { t=(float)(i*i+j*j)/(float)m_b2;        // m_b2表示平滑尺度
           Ftemp[i*(N+1)+j]=(float)(1.0/exp(t/2)); }
     }
     C=(int)ceil(1/Ftemp[(N+1)*(N+1)-1]+0.5);     //计算归一化系数
for(i=0;i<N+1;i++)                             //给模板右下角付值
     {    for(j=0;j<N+1;j++)
         { Itemp[(N+i)*(2*N+1)+(N+j)] =int(Ftemp[i*(N+1)+j]*C+0.5); }  
     }
     for(i=N;i<2*N+1;i++)                         //给模板左下角付值
     {    for(j=0;j<N+1;j++)
         { Itemp[i*(2*N+1)+j] =Itemp[i*(2*N+1)+(2*N-j)]; }
     }
     for(i=0;i<N;i++)                                 //给模板上半部分付值
     {    for(j=0;j<2*N+1;j++)
         {      Itemp[i*(2*N+1)+j] =Itemp[(2*N-i)*(2*N+1)+j];}
     }
     for(i=0;i<2*N+1;i++)               //计算总的系数
     {    for(j=0;j<2*N+1;j++)
         { Cof +=(float )Itemp[i*(2*N+1)+j]; }
     }
     Cof=(float)( 1.0/Cof);
例如3×3,5×5 ,7 ×7, 高斯模板如图1所示。

        式(7)

      本实验中设计的高斯滤波器的对话框结构如图1所示。

 

a) σ=1,n=3时的模板

 

b) σ=2,n=5时的模板

 

c) σ=2,n=7时的模板

图1 选择不同平滑参数并显示模板元素的对话框

4 实验结果、分析与总结本实验分别采用大小为256x256的 Lena(灰、彩)图进行去噪,其分别处理的效果如图2所示。 由图中几组图像的效果比较可以看出在平滑尺度为1不变时,随着模板由3x3变为5x5,平滑的效果明显变好,图像的整体亮度也有所提高,更接近原图了(对比图.b和c)。同理在保持平滑尺度为2不变时,模板为7x7时的效果比5x5的也要好得多(对比图.d和e)。同时将这前后两组比较,很明显,平滑尺度为2的效果又比为1时要好得多。但是随着平滑尺度的增加,尤其是模板大小的增大,平滑所需要的时间也更长了。因此在实际应用中要权衡两者,对不同图像采用不同的参数。

         

a)经过加噪后的原图像                                                              b)σ=1,n=3时的平滑结果

 

          c) σ=1,n=5时的平滑结果                                            d)σ=2,n=5时的平滑结果

  

e)σ=2,n=7的平滑结果

图2   灰度彩色图像在不同平滑尺度不同模板大小时的平滑效果


除此之外,本实验还将尺度为2,7x7大小的高斯模板分别应用于椒盐、随机和高斯噪声图像,以进一步分析高斯滤波对不同噪声的去噪效果。其结果对比如图3所示。
通过比较发现高斯滤波对随机噪声和高斯噪声(尤其是服从正态分布的噪声)的去除效果都比较好,但是对于椒盐噪声的去除就欠佳,似乎在把噪声的幅度减小的同时也把噪声点变大了。因此在作平滑处理时要针对不同的图像噪声采用不同的滤波器才能获得好的效果。

 

a ) 椒盐噪声处理前后的图像

 

b ) 随机噪声处理前后的图像

 

c ) 高斯噪声处理前后的图像

图3 σ=2,n=7时的平滑不同噪声图像效果

阅读更多
文章标签: 图像处理 float c
想对作者说点什么? 我来说一句

HLS实现FIR<em>滤波器</em>

2018年05月06日 0B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭