【滤波器】基于matlab高斯滤波器【含Matlab源码 995期】

举报
海神之光 发表于 2022/05/29 03:03:57 2022/05/29
【摘要】 一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【滤波器】基于matlab高斯滤波器【含Matlab源码 995期】 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,...

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【滤波器】基于matlab高斯滤波器【含Matlab源码 995期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、高斯滤波器简介

1 高斯滤波器简介
高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。但其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数都是相同的为1,而高斯滤波器的模板系数则随着距离模板中心的增大而减小。所以,高斯滤波器相比于均值滤波器对图像个模糊程度较小。

2 生成高斯滤波器模板(掩模)
要产生一个3×3的高斯滤波器模板,以模板的中心位置为坐标原点进行取样。模板在各个位置的坐标,如下所示(x轴水平向右,y轴竖直向下)。
在这里插入图片描述
其中(x,y)为点坐标,在图像处理中可认为是整数,\sigma是标准差。将各个位置的坐标带入到高斯函数中,得到的值就是模板的系数,模板中各个元素值的计算公式如下:
在这里插入图片描述
当\sigma =0.8时,计算出来的模板有两种形式:小数和整数
1)小数形式的模板,就是直接计算得到的值,没有经过任何的处理;
2)整数形式的模板需要进行归一化处理,即将模板左上角的值归一化为1。
在这里插入图片描述
取整后为:
在这里插入图片描述
使用整数的模板时,需要在模板的前面加一个系数,该系数为模板系数和的倒数,最终得到模板如下:
在这里插入图片描述
注意:由于最后要进行归一化处理,因此在计算模板中各个元素的值时,可以去掉高斯函数的系数在这里插入图片描述
3 值的意义及选取
通过上述的实现过程发现,生成高斯滤波器模板最重要的参数就是高斯分布的标准差,标准差代表着数据的离散程度。
越小,模板的中心系数越大,周围的系数越小,这样对图像的平滑效果就不是很明显;
越大,模板的各个系数相差就不是很大,比较类似均值模板,对图像的平滑效果比较明显。

4 高斯函数的五个性质
高斯平滑滤波器,无论在空间域还是在频率域都是十分有效的低通滤波器,高斯函数具有五个十分重要的性质:

(1)二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的。一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑。旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向。

(2)高斯函数是单值函数。这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的。这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真。

(3)高斯函数的傅里叶变换频谱是单瓣的。正如下面所示,这一性质是高斯函数的傅里叶变换等于高斯函数本身(但幅值和方差发生了变化,尤其是方差变为倒数)这一事实的直接推论。图像常被不希望的高频信号所污染(噪声和细纹理 )。而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量。高斯函数傅里叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号。

(4)高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的。σ越大,平滑程度就越好。通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折中。

(5)由于高斯函数的可分离性,大高斯滤波器可以得以有效地实现。二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积。因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长。

三、部分源代码

t1=-1.5:0.01:1.5;
t2=-1.5:0.01:1.5;
%b1=ones(1,length(t2));
b1=[zeros(1,100),ones(1,100),zeros(1,101)];
%产生滤波器1
y1=sqrt(pi)/0.25*exp(-((pi*t1).^2)/0.25.^2);
z1=0.5*(erfc(pi/0.25*(t1-0.5))-erfc(pi/0.25*(t1+0.5)));
%产生滤波器2
y2=sqrt(pi)/0.5*exp(-((pi*t1).^2)/0.5.^2);
z2=0.5*(erfc(pi/0.5*(t1-1))-erfc(pi/0.5*(t1+1)));
%产生滤波器3
y3=sqrt(pi)*exp(-(pi*t1).^2);
z3=0.5*(erfc(pi*(t1-1))-erfc(pi*(t1+1)));
%产生滤波器4
y4=sqrt(pi)/2*exp(-((pi*t1).^2)/2.^2);
z4=0.5*(erfc(pi/2*(t1-1))-erfc(pi/2*(t1+1)));
subplot(3,1,1),plot(t2,b1);axis([-1.5 1.5 0 1.2]);xlabel('t/T');ylabel('b(t)');
title('高斯脉冲成形滤波器的输入(矩形脉冲)');
subplot(3,1,2),plot(t1,y1,'r',t1,y2,'g',t1,y3,'b',t1,y4,'m');

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

四、运行结果

在这里插入图片描述

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/117887109

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。