影像卷积和滤波运算(高斯滤波模板)

来源:互联网 发布:鸿课青少儿编程 编辑:程序博客网 时间:2024/06/05 09:21

转自网易博客:http://hottest19870728.blog.163.com/blog/static/17171185420122203355788/

引用:http://blog.sina.com.cn/s/blog_4b700c4c0102e02s.html

高斯函数在图像增强中起到什么作用,麻烦具体点,就比如傅立叶变化在图像增强中可以有去除噪声的作用

 主要是平滑图像~~~高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:(1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向.(2)高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.(3)高斯函数的付立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号.(4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.(5)由于高斯函数的可分离性,大高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长.   什么叫滤波:用白话讲就是,一个电信号中有若干种成分,把其中一部分交流信号过滤掉就叫滤波。卷积和滤波的区别:在数字信号处理的理论中,卷给可以说是一种数学运算,而滤波是一种信号处理的方法。卷积就像加权乘法一样,你能说滤波和加权乘法是一样的吗,显然不行;但是滤波最终是有乘法来实现的。自适应滤波就是滤波所用的模板系数会根据图像不同位置自动调整。中值滤波(median filter)简单的说就是:一个窗(window)中心的象素值就是这个窗包含的象素中处于中间位置的象素值。均值滤波(mean filter)就是一个窗中心的象素值就是这个窗包含的象素的平均值。空间频率主要是指图像的平滑或粗糙程度。一般可认为,高空间频率区域称“粗糙”,即图像的亮度值在小范围内变化很大,而“平滑”区,图像的亮度值变化相对较小,如平滑的水体表面等。低通滤波主要用于加强图像中的低频成分,减弱高频成分,而高通滤波则正好相反,加强高频细节,减弱低频细节,简单地讲:高通滤波处理过的图像更加“粗糙”。高通滤波顾名思义就是让频率高的通过,使图像具有锐化效果;低通滤波则恰好相反了,它是使低频通过,使图像具有平滑的效果。 ?模板的定义 –所谓模板就是一个系数矩阵 –模板大小:经常是奇数,如: 3x3   5x5   7x7 –模板系数: 矩阵的元素 w1 w2 w3 w4 w5 w6 w7 w8 w9空域过滤及过滤器的定义:使用空域模板进行的图像处理,被称为空域过滤。 
w1w2w3
w4w5w6
w7w8w9

模板本身被称为空域过滤器
空域过滤器的分类
按效果分:钝化过滤器,锐化过滤器
按数学形态分类
1,线性过滤器:使用乘积和的计算,例如:R = w1z1 + w2z2 + … + wnzn
高通:边缘增强、边缘提取
低通:钝化图像、去除噪音
带通:删除特定频率、增强中很少用
2,非线性过滤器:结果值直接取决于像素邻域的值
最大值:寻找最亮点,亮化图片
最小值:寻找最暗点,暗化图片
中值:钝化图像、去除噪音
  钝化过滤器的主要用途1,对大图像处理前,删去无用的细小细节2,连接中断的线段和曲线3,降低噪音4,钝化处理,恢复过分锐化的图像5,图像创艺(阴影、软边、朦胧效果)缺点:如果图像处理的目的是去除噪音,那么,低通滤波在去除噪音的同时也钝化了边和尖锐的细节,但是中值滤波算法的特点:在去除噪音的同时,可以比较好地保留边的锐度和图像的细节锐化过滤器的主要用途1,印刷中的细微层次强调。弥补扫描、挂网对图像的钝化2,超声探测成象,分辨率低,边缘模糊,通过锐化来改善3,图像识别中,分割前的边缘提取4,锐化处理恢复过度钝化、暴光不足的图像5,图像创艺(只剩下边界的特殊图像)6,尖端武器的目标识别、定位过滤器效果的分析1,常数或变化平缓的区域,结果为0或很小,图像很暗,亮度被降低了2,在暗的背景上边缘被增强了3,图像的整体对比度降低了4,计算时会出现负值,归0处理为常见基本高通空域滤波的缺点和问题高通滤波在增强了边的同时,丢失了图像的层次和亮度         对图像的小波变换在Matlab中实现的实质是不是用一块模板在图像上作卷积。遇到这样的问题,Atrous小波变换中是用一个模板在图像上进行卷积可以得到小波平面,以及低频分量。那么其他的小波变换呢?Matlab上有许多现成的小波变换函数以及小波函数,但是我对其中的原理不了解。 如Mallat小波,db小波,对图像进行分解时,是不是也是由一个模板在图像上进行卷积呢,要不如何处理呢?没错,小波变换实际就是用模板和信号进行卷积,只不过在做小波变换的时候一般至少需要两个模板,一个是充当低通分解滤波器的模板,一个是充当高通分解滤波器的模板(对于MALLAT 和ZHONG的二进小波变换还需要另外两个滤波器),在Atrous小波变换中,还需要在每级小波变换后对模板进行插0操作。在对图像进行小波变换的时候要分别对行和列进行操作(当然了你要是变成矩阵运算的话就不需要分别对行和列进行操作了)  高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。关于高斯滤波的数学原理说明可以从文章底部的参考资料中获得。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。一般的模板为3×3或5×5大小,其权值分布如下图: 若使用3×3模板,则计算公式如下:g(x,y)={f(x-1,y-1)+f(x-1,y+1)+f(x+1,y-1)+f(x+1,y+1)+[f(x-1,y)+f(x,y-1)+f(x+1,y)+f(x,y+1)]*2+f(x,y)*4}/16;其中,f(x,y)为图像中(x,y)点的灰度值,g(x,y)为该点经过高斯滤波后的值。   高斯滤波可以在频域和空间域实现,在频域的处理方法是将图像通过傅立叶变换后转换到频域,变换后的图像与高斯滤波器相乘然后利用傅立叶反变换转换回空间域得到滤波后的图像,我是利用lpfilter函数生成高斯滤波器的,这在我昨天贴出的代码里没有给出,是我疏忽了。 空间滤波的方法是生成高斯卷积模板,通过模板与图像进行卷积的过程实现对图像的滤波过程,这在matlab中是利用imfilter实现的。 我的问题是希望将频率滤波方法转换成空间滤波方法得到同样的效果。现在问题已经解决了,是因为我忽略了高斯函数在傅立叶变换前后尽管形式相同,但标准差发生了变化,即原来的高斯函数越宽(标准差越大),变换后的高斯函数就越窄(标准差越小),因此sigma不应使用相同的值来生成高斯滤波器。 
  
 1 图像滤波的基本概念     图像常常被强度随机信号(也称为噪声)所污染.一些常见的噪声有椒盐(Salt & Pepper)噪声、脉冲噪声、高斯噪声等.椒盐噪声含有随机出现的黑白强度值.而脉冲噪声则只含有随机的白强度值(正脉冲噪声)或黑强度值(负脉冲噪声).与前两者不同,高斯噪声含有强度服从高斯或正态分布的噪声.研究滤波就是为了消除噪声干扰。     图像滤波总体上讲包括空域滤波和频域滤波。频率滤波需要先进行傅立叶变换至频域处理然后再反变换回空间域还原图像,空域滤波是直接对图像的数据做空间变换达到滤波的目的。它是一种邻域运算,即输出图像中任何像素的值都是通过采用一定的算法,根据输入图像中对用像素周围一定邻域内像素的值得来的。如果输出像素是输入像素邻域像素的线性组合则称为线性滤波(例如最常见的均值滤波和高斯滤波),否则为非线性滤波(中值滤波、边缘保持滤波等)。     线性平滑滤波器去除高斯噪声的效果很好,且在大多数情况下,对其它类型的噪声也有很好的效果。线性滤波器使用连续窗函数内像素加权和来实现滤波。特别典型的是,同一模式的权重因子可以作用在每一个窗口内,也就意味着线性滤波器是空间不变的,这样就可以使用卷积模板来实现滤波。如果图像的不同部分使用不同的滤波权重因子,且仍然可以用滤波器完成加权运算,那么线性滤波器就是空间可变的。任何不是像素加权运算的滤波器都属于非线性滤波器.非线性滤波器也可以是空间不变的,也就是说,在图像的任何位置上可以进行相同的运算而不考虑图像位置或空间的变化。  2 图像滤波的计算过程分析     滤波通常是用卷积或者相关来描述,而线性滤波一般是通过卷积来描述的。他们非常类似,但是还是会有不同。下面我们来根据相关和卷积计算过程来体会一下他们的具体区别: 卷积的计算步骤: (1)       卷积核绕自己的核心元素顺时针旋转180 (2)       移动卷积核的中心元素,使它位于输入图像待处理像素的正上方 (3)       在旋转后的卷积核中,将输入图像的像素值作为权重相乘 (4)       第三步各结果的和做为该输入像素对应的输出像素 相关的计算步骤: 1移动相关核的中心元素,使它位于输入图像待处理像素的正上方 2将输入图像的像素值作为权重,乘以相关核 3将上面各步得到的结果相加做为输出     可以看出他们的主要区别在于计算卷积的时候,卷积核要先做旋转。而计算相关过程中不需要旋转相关核。 例如: magic(3) =[8 1 6;3 5 7;4 9 2],旋转180度后就成了[2 9 4;7 5 3;6 1 8]  三 高斯平滑滤波器的设计     高斯函数的最佳逼近由二项式展开的系数决定,换句话说,用杨辉三角形(也称Pascal三角形)的第n行作为高斯滤波器的一个具有n个点的一维逼近,例如,五点逼近为: 1 4 6 4 1     它们对应于Pascal三角形的第5行.这一模板被用来在水平方向上平滑图像.在高斯函数可分离性性质中曾指出,二维高斯滤波器能用两个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向.实际中,这种运算可以通过使用单个一维高斯模板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成. 这一技术在模板尺寸N约为10时的滤波效果极好.对较大的滤波器,二项式展开系数对大多数计算机来说都太多.但是,任意大的高斯滤波器都能通过重复使用小高斯滤波器来实现.高斯滤波器的二项式逼近的σ可用高斯函数拟合二项式系数的最小方差来计算.    设计高斯滤波器的另一途径是直接从离散高斯分布中计算模板权值。为了计算方便,一般希望滤波器权值是整数。在模板的一个角点处取一个值,并选择一个K使该角点处值为1。通过这个系数可以使滤波器整数化,由于整数化后的模板权值之和不等于1,为了保证图像的均匀灰度区域不受影响,必须对滤波模板进行权值规范化。   高斯滤波器的采样值或者高斯滤波器的二项式展开系数可以形成离散高斯滤波器.当用离散高斯滤波器进行卷积时,其结果是一个更大的高斯离散滤波器.若一幅图像用N*N离散高斯滤波器进行平滑,接着再用M*M离散高斯滤波器平滑的话,那么平滑结果就和用(N+M-1)*(N+M-1)离散高斯滤波器平滑的结果一样.换言之,在杨辉三角形中用第N行和第M行卷积形成了第N+M-1行.  四 使用高斯滤波器进行图像的平滑      如果适应卷积运算对图像进行滤波,在matlab中可以通过2个不同的函数来实现conv2imfliter。他们的调用方式如下: Img_n = conv2(Img,g,'same');  和Img_n = imfilter(Img,g,'conv'); 这两种函数处理的结果是完全一样的。      imfiler函数在默认的情况下,对图像的滤波计算用的是相关       Img_n = imfilter(Img,g);%使用相关运算滤波      下面是一个简单的例子展示了使用相同的高斯滤波核函数,相关运算和卷积运算对图像平滑的效果可以直接后边附的程序查看。     由结果可以看出相关运算和卷积运算的在用于图像平滑滤波时效果差别不大。当模板大小N>50的时候。边界的系数已经非常小,对运算起到的作用和微乎其微,所以平滑的结果差别已经非常细微,肉眼几乎难以察觉。 example.m clear all I = imread('lena.bmp'); Img = double(I); alf=3; n=10;%定义模板大小 n1=floor((n+1)/2);%计算中心 for i=1:n for j=1:n b(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf))/(4*pi*alf); end end Img_n = uint8(conv2(Img,b,'same'));  K=uint8(imfilter(Img,b)); Img_n2=uint8(imfilter(Img,b,'conv')); J=(Img_n2)-Img_n; flag=mean(J(:)) subplot(131),imshow(I);title('原图') subplot(132),imshow(Img_n);title('卷积运算图') subplot(133),imshow(K);title('相关运算图') figure(2),surf(b);  http://sunnysnow2004.blog.163.com/blog/static/5282482420085184017571/ 
  
 高斯核函数在图像滤波中的应用  高斯(核)函数简介  1函数的基本概念 所谓径向基函数 (Radial Basis Function 简称 RBF), 就是某种沿径向对称的标量函数。 通常定义为空间中任一点x到某一中心xc之间欧氏距离的单调函数 , 可记作 k(||x-xc||), 其作用往往是局部的 , 即当x远离xc时函数取值很小。最常用的径向基函数是高斯核函数 ,形式为 k(||x-xc||)=exp{- ||x-xc||^2/(2*σ)^2) } 其中xc为核函数中心,σ为函数的宽度参数 , 控制了函数的径向作用范围。 高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是: (1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向. (2)高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真. (3)高斯函数的付立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号. (4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷. (5)由于高斯函数的可分离性,大高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长. 2函数的表达式和图形 在这里编辑公式很麻烦,所以这里就略去了。可以参看相关的书籍,仅给出matlab绘图的代码 alf=3; n=7;%定义模板大小 n1=floor((n+1)/2);%确定中心 for i=1:n  a(i)= exp(-((i-n1).^2)/(2*alf^2));  for j=1:n  b(i,j) =exp(-((i-n1)^2+(j-n1)^2)/(4*alf))/(4*pi*alf);  end end subplot(121),plot(a),title('一维高斯函数' ) subplot(122),surf(b),title('二维高斯函数' ) 二 图像滤波 1 图像滤波的基本概念 图像常常被强度随机信号(也称为噪声)所污染.一些常见的噪声有椒盐(Salt & Pepper)噪声、脉冲噪声、高斯噪声等.椒盐噪声含有随机出现的黑白强度值.而脉冲噪声则只含有随机的白强度值(正脉冲噪声)或黑强度值(负脉冲噪声).与前两者不同,高斯噪声含有强度服从高斯或正态分布的噪声.研究滤波就是为了消除噪声干扰。 图像滤波总体上讲包括空域滤波和频域滤波。频率滤波需要先进行傅立叶变换至频域处理然后再反变换回空间域还原图像,空域滤波是直接对图像的数据做空间变换达到滤波的目的。它是一种邻域运算,即输出图像中任何像素的值都是通过采用一定的算法,根据输入图像中对用像素周围一定邻域内像素的值得来的。如果输出像素是输入像素邻域像素的线性组合则称为线性滤波(例如最常见的均值滤波和高斯滤波),否则为非线性滤波(中值滤波、边缘保持滤波等)。 线性平滑滤波器去除高斯噪声的效果很好,且在大多数情况下,对其它类型的噪声也有很好的效果。线性滤波器使用连续窗函数内像素加权和来实现滤波。特别典型的是,同一模式的权重因子可以作用在每一个窗口内,也就意味着线性滤波器是空间不变的,这样就可以使用卷积模板来实现滤波。如果图像的不同部分使用不同的滤波权重因子,且仍然可以用滤波器完成加权运算,那么线性滤波器就是空间可变的。任何不是像素加权运算的滤波器都属于非线性滤波器.非线性滤波器也可以是空间不变的,也就是说,在图像的任何位置上可以进行相同的运算而不考虑图像位置或空间的变化。 2 图像滤波的计算过程分析 滤波通常是用卷积或者相关来描述,而线性滤波一般是通过卷积来描述的。他们非常类似,但是还是会有不同。下面我们来根据相关和卷积计算过程来体会一下他们的具体区别: 卷积的计算步骤: (1)    卷积核绕自己的核心元素顺时针旋转180度 (2)    移动卷积核的中心元素,使它位于输入图像待处理像素的正上方 (3)    在旋转后的卷积核中,将输入图像的像素值作为权重相乘 (4)    第三步各结果的和做为该输入像素对应的输出像素 相关的计算步骤: (1)移动相关核的中心元素,使它位于输入图像待处理像素的正上方 (2)将输入图像的像素值作为权重,乘以相关核 (3)将上面各步得到的结果相加做为输出  可以看出他们的主要区别在于计算卷积的时候,卷积核要先做旋转。而计算相关过程中不需要旋转相关核。 例如: magic(3) =[8 1 6;3 5 7;4 9 2],旋转180度后就成了[2 9 4;7 5 3;6 1 8]  

图像高斯平滑滤波分析——如何求高斯滤波模板

 

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

 

1 引言

    一幅原始图像在获取和传输过程中会受到各种噪声的干扰,使图像质量下降,对分析图像不利。反映到图像画面上,主要有两种典型的噪声。一种是幅值基本相同,但出现的位置随机的椒盐噪声,另一种则每一点都存在,但幅值随机分布的随机噪声。为了抑制噪声、改善图像质量,要对图像进行平滑处理。图像平滑处理的方法多种多样,有邻域平均、中值滤波,高斯滤波、灰度最小方差的均值滤波等。这里主要就是分析高斯滤波器的平滑效果。以下即为本课题研究的主要内容及要求:
    第一,打开显示对应图像;
    第二,编写给图像加噪声的程序;
    第三,程序中实现不同平滑尺度、不同模板大小的高斯模板设计,并将设计结果显示出来;
    第四,以Lena图像为例,进行加噪声,分析平滑的实验效果。

2 高斯平滑滤波器的原理

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

3 离散高斯平滑滤波器的设计

    在高斯滤波器的设计中,高斯函数的最佳逼近由二项式展开的系数决定。由高斯函数的可分离性得到,二维高斯滤波器能用2个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向。实际上,这种运算可以通过使用单个一维高斯模板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成。
    对较大的滤波器,二项式展开系数对大多数计算机来说都太多,但是,任意大的高斯滤波器都能通过重复使用小的高斯滤波器来实现。设计高斯滤波器的另一途径是直接从离散高斯分布中计算模板值。
             gauss模板 式(5)
    其中c是规范化系数,把上式重新表示为
             gauss模板   式(6)
    选择适当的σ2值,就可以在 窗口上评价该值,以便获取核或模板。
    本实验中笔者就是采用的第二种方法。首先选择n值和σ2值,然后根据式(4)计算出模板的右下角元素,再根据高斯模板的中心左右上下对称性(如图1 c7×7的模板结构所示)对应地复制给其它三个区域,即可得出整个模板的元素,最后再对全部的模板元素求和、取倒数即求得规范化系数。gauss模板
程序中求模板元素的主要实现部分如下:
     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表示平滑尺度gauss模板
           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所示。
gauss模板        式(7)
      本实验中设计的高斯滤波器的对话框结构如图1所示。
gauss模板
a) σ=1,n=3时的模板
gauss模板
b) σ=2,n=5时的模板
gauss模板
c) σ=2,n=7时的模板
图1 选择不同平滑参数并显示模板元素的对话框

4 实验结果、分析与总结

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

gauss模板          

a)经过加噪后的原图像                                                              b)σ=1,n=3时的平滑结果
gauss模板
     
          c) σ=1,n=5时的平滑结果                                            d)σ=2,n=5时的平滑结果
gauss模板  
e)σ=2,n=7的平滑结果
图2   灰度彩色图像在不同平滑尺度不同模板大小时的平滑效果

    除此之外,本实验还将尺度为2,7x7大小的高斯模板分别应用于椒盐、随机和高斯噪声图像,以进一步分析高斯滤波对不同噪声的去噪效果。其结果对比如图3所示。
   通过比较发现高斯滤波对随机噪声和高斯噪声(尤其是服从正态分布的噪声)的去除效果都比较好,但是对于椒盐噪声的去除就欠佳,似乎在把噪声的幅度减小的同时也把噪声点变大了。因此在作平滑处理时要针对不同的图像噪声采用不同的滤波器才能获得好的效果。
gauss模板
     
a ) 椒盐噪声处理前后的图像
gauss模板
    
b ) 随机噪声处理前后的图像
gauss模板
    
c ) 高斯噪声处理前后的图像
图3 σ=2,n=7时的平滑不同噪声图像效果
来自: http://hi.baidu.com/lvguohao/blog/item/09ded33dc61fc108baa16780.html
 
 
 
在图像预处理中,对图像进行平滑,去除噪声,恢复原始图像是一个重要内容。本文设计了一个平滑尺度和模板大小均可以改变的高斯滤波器,用它对多幅加入各种噪声后的图像进行平滑,经过对各个结果图像的对比可知高斯滤波对服从正态分布的噪声去除效果比较好,并且相比各个不同参数,在平滑尺度为2,模板大小为7时效果最佳。
    关键词 图像预处理;平滑处理;平滑尺度;模板大小;高斯滤波

1 引言

    一幅原始图像在获取和传输过程中会受到各种噪声的干扰,使图像质量下降,对分析图像不利。反映到图像画面上,主要有两种典型的噪声。一种是幅值基本相同,但出现的位置随机的椒盐噪声,另一种则每一点都存在,但幅值随机分布的随机噪声。为了抑制噪声、改善图像质量,要对图像进行平滑处理。图像平滑处理的方法多种多样,有邻域平均、中值滤波,高斯滤波、灰度最小方差的均值滤波等。这里主要就是分析高斯滤波器的平滑效果。以下即为本课题研究的主要内容及要求:
    第一,打开显示对应图像;
    第二,编写给图像加噪声的程序;
    第三,程序中实现不同平滑尺度、不同模板大小的高斯模板设计,并将设计结果显示出来;
    第四,以Lena图像为例,进行加噪声,分析平滑的实验效果。

2 高斯平滑滤波器的原理

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

3 离散高斯平滑滤波器的设计

    在高斯滤波器的设计中,高斯函数的最佳逼近由二项式展开的系数决定。由高斯函数的可分离性得到,二维高斯滤波器能用2个一维高斯滤波器逐次卷积来实现,一个沿水平方向,一个沿垂直方向。实际上,这种运算可以通过使用单个一维高斯模板,对两次卷积之间的图像和最后卷积的结果图像进行转置来完成。
    对较大的滤波器,二项式展开系数对大多数计算机来说都太多,但是,任意大的高斯滤波器都能通过重复使用小的高斯滤波器来实现。设计高斯滤波器的另一途径是直接从离散高斯分布中计算模板值。
             【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0 式(5)
    其中c是规范化系数,把上式重新表示为
             【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0   式(6)
    选择适当的σ2值,就可以在窗口上评价该值,以便获取核或模板。
    本实验中笔者就是采用的第二种方法。首先选择n值和σ2值,然后根据式(4)计算出模板的右下角元素,再根据高斯模板的中心左右上下对称性(如图1 c7×7的模板结构所示)对应地复制给其它三个区域,即可得出整个模板的元素,最后再对全部的模板元素求和、取倒数即求得规范化系数。【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0
程序中求模板元素的主要实现部分如下:
     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表示平滑尺度【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0
           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所示。
【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0        式(7)
      本实验中设计的高斯滤波器的对话框结构如图1所示。
【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0
a) σ=1,n=3时的模板
【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0
b) σ=2,n=5时的模板
【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0
c) σ=2,n=7时的模板
图1 选择不同平滑参数并显示模板元素的对话框

4 实验结果、分析与总结

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

【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0          

a)经过加噪后的原图像                                                              b)σ=1,n=3时的平滑结果
【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0
     
          c) σ=1,n=5时的平滑结果                                            d)σ=2,n=5时的平滑结果
【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0  
e)σ=2,n=7的平滑结果
图2   灰度彩色图像在不同平滑尺度不同模板大小时的平滑效果

    除此之外,本实验还将尺度为2,7x7大小的高斯模板分别应用于椒盐、随机和高斯噪声图像,以进一步分析高斯滤波对不同噪声的去噪效果。其结果对比如图3所示。
    通过比较发现高斯滤波对随机噪声和高斯噪声(尤其是服从正态分布的噪声)的去除效果都比较好,但是对于椒盐噪声的去除就欠佳,似乎在把噪声的幅度减小的同时也把噪声点变大了。因此在作平滑处理时要针对不同的图像噪声采用不同的滤波器才能获得好的效果。
【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0
     
a ) 椒盐噪声处理前后的图像
【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0
    
b ) 随机噪声处理前后的图像
【转】图像高斯平滑滤波分析鈥斺斎绾吻蟾咚孤瞬0
    
c ) 高斯噪声处理前后的图像
图3 σ=2,n=7时的平滑不同噪声图像效果
 
http://blog.sina.com.cn/s/blog_68f909c30100r7wp.html
 
 
 

模板操作(卷积运算)

用数组定义模板,然后将每个图像象素值和对应模板元素相乘后相加,在实现上可以先判断模板元素值后再作累加。楼上说的对,这个运算实际上就是卷积。

在C中用数组(1/2维都可以)就可以表示
对你提供的用1维就可以定义为
long TA = {
0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 1, 1, 0, 0,
0, 1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1,
0, 1, 1, 1, 1, 1, 0,
0, 0, 1, 1, 1, 0, 0,
0, 0, 0, 1, 0, 0, 0,
};
用于图象中,找好中心,跟图象卷积,
1的地方保留图象灰度,0的地方应该定义一个标志(不参与运算的标志)
或者定义一个BYTE Array_Temp[25],模板中0的地方跳过,1的地方写进数组;
然后得到的25个值求最小了。

其实,图像处理中很多情况下使用的是模板的操作,不同的情况使用不同的模板,至少在早期的图像爱那个处理理论上面是这样。图像处理中很多东西都是不确定那个的,要更隽具体的情况具体分析。

掌握模板的操作,其实对于一些处理可以直接调用就可以了。

下面是我的代码;
//**********************************************************************
//模板操作
//图像信息头
//图像数据
//模板大小       以0开始
//模板中心元素   以0开始
//模板数据
//模板系数
//**********************************************************************
BOOL ImgTemplate(BITMAPINFO* pbmpinfo,BYTE* pbmpdata,CSize TemplateSize,CSize TemplateCertel ,int *template_box,float coef)
{

    LONG imagewidth=pbmpinfo->bmiHeader.biWidth;
    LONG imageheigth=pbmpinfo->bmiHeader.biHeight;

        LONG i=0,j=0,k=0,heigth=0,width=0;

    //data is not null
    if (pbmpdata == NULL)
    {
        return FALSE;
    }
    //image size
    if (imageheigth <= TemplateSize.cy || imagewidth <= TemplateSize.cx)
    {
        return FALSE;
    }
    if (TemplateCertel.cx < 0 ||  TemplateCertel.cy < 0 || TemplateCertel.cx > TemplateSize.cx || TemplateCertel.cy > TemplateSize.cy)
    {
       return FALSE;
    }
    //color must be gray
    if (pbmpinfo->bmiHeader.biBitCount != 8)
    {
            AfxMessageBox("只对灰度图像进行操作!");
        return FALSE;
    }
    //image size
    LONG  Linebyte =( pbmpinfo->bmiHeader.biBitCount * imagewidth +31)/32*4;
    LONG  ImageSize=Linebyte * imageheigth;
   
    //分配空间
    BYTE *pNewbmpdata=(BYTE*)malloc(ImageSize);
   
    //copy data
    if (pNewbmpdata == NULL)
    {
   
        return FALSE;
    }
   
    memcpy(pNewbmpdata,pbmpdata,ImageSize);

   
    BYTE *psrc=NULL;
    BYTE *pdest=NULL;
       
    LONG result=0;


    for (heigth = TemplateCertel.cy ; heigth < imageheigth - TemplateSize.cy + TemplateCertel.cy + 1  ;heigth++  )
    {
               
        for ( width = TemplateCertel.cx ; width < imagewidth - TemplateSize.cx + TemplateCertel.cx + 1 ; width++)
        {
            psrc  = (unsigned char *)pbmpdata+(ImageSize-Linebyte-
                heigth*Linebyte)+width;
           
            pdest = (unsigned char *)pNewbmpdata+(ImageSize-Linebyte-
                heigth*Linebyte)+width;

            j=0;
            result=0;

            for ( i =  - TemplateCertel.cy ; i <  TemplateSize.cy - TemplateCertel.cy   ;i++)
            {
                for (k =  - TemplateCertel.cx ; k <  TemplateSize.cx -TemplateCertel.cy  ;k++)
                {
                            result += (LONG)(*(psrc + i * Linebyte + k)) * template_box[j++];
                }
            }

                        result = (LONG)(result  coef);

            if (result>255)
            {
                result=255;
            }
            if (result<0)
            {
                result=0;
            }
            *pdest=(unsigned char)result;
           
        }
     
    memcpy(pbmpdata,pNewbmpdata,ImageSize);
    free(pNewbmpdata);
    return TRUE;
}

下面是一个拉普拉斯锐化的例子:
int template_box_LH8[9]={0,1,0,1,-4,1,0,1,0};
ImgTemplate(pbmpinfo, pbmpdata,CSize(3,3),CSize(1,1),template_box_LH8,1);