matlab设计高频滤波器

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

 

文章目录

 


前言

最近数字图像处理的老师布置了新的实验内容,是有关不调用函数设计巴特沃斯滤波器和高斯滤波器的,在经过痛苦的挣扎后,我也算是大致理解了设计的具体流程和思路,并把它们记述在这里,方便日后查阅。

因为数字信号处理这门课程没学好,所以很多理论性的知识都是一知半解的,所以在这篇文章我只讲怎么操作应用,能够得到最终的滤波图像。

 

一、浅显的思路

巴特沃斯滤波器和高斯滤波器进行图像处理归根到底就是将图像从空间域转换到频率域上进行操作。这和《信号与系统》课程中将时域上的信号转换到频域上进行操作的原理大同小异。因为无论是一维还是二维,都满足时域卷积,频域相乘的基本法则。所以我们的切入点非常的简单,就是将图像转换到频域上,根据基础原理公式一步一步操作,最终得出结果。

1.将图像由空间域转换为频域

2.给出后续操作所需要的基础数值(例如中点值、阶次等)

3.设计整个图像矩阵的循环

4.给出巴特沃斯滤波器或高斯滤波器的传递函数

5.将传递函数和当前的矩阵值相乘

6.结束循环

7.将得到的处理结果转换到空间域

二、例题

给出一幅指纹的图像,为了去除指纹图像中的污染,设计高通滤波器进行解决。

三、代码实现

%设计高频滤波器(巴特沃斯滤波器、高斯滤波器)给定阶数为4,截止频率为50
I1=imread('zhiwen.tif');
[len,wed]=size(I1);
g=fft2(I1);%将图像转换到频域
g=fftshift(g);%将零频点移到频谱中间,这对观察图像是有好处的
n1=4;
D0=50;
[M,N]=size(g);
m=fix(M/2);
n=fix(N/2);%m,n后续计算传递函数时需要用
%对图像矩阵中所有的值进行操作
for i=1:M
    for j=1:N
        D=sqrt((i-m)^2+(j-n)^2);%根据理论知识给出
        H1=1-exp((-1)*(D^2/(2*D0^2)));%高斯高频率波的传递函数
        H2=1/(1+(D0/D)^(2*n1));%巴特沃斯滤波器高通滤波传递函数
        s1(i,j)=H1*g(i,j);
        s2(i,j)=H2*g(i,j);%频域相乘
    end
end
%得到图像后先将其位移回原来位置,再转换到空间域上。
%/255是因为在转换时图像变成double型,如果直接转换为uint8型时会有灰度值大于1而让图像大部分区域直接变成白色,因此需要/255
I2=im2uint8(real(ifft2(ifftshift(s1)/255)));
I3=im2uint8(real(ifft2(ifftshift(s2)/255)));
I4=im2bw(I3,0);%对高频图像进行二值化处理可以得到更好的效果
subplot(2,2,1),imshow(I1),title('原图');
subplot(2,2,2),imshow(I2),title('高斯滤波器');
subplot(2,2,3),imshow(I3),title('巴特沃斯滤波器');
subplot(2,2,4),imshow(I4),title('阈值化处理');

四、结果展示


总结

时域卷积频域相乘是滤波器设计时的核心思想,只要掌握了这一点无论是高频还是低频的滤波器都可以实现,区别仅仅在于所用的传递函数不同。

在完成高频滤波之后,可以尝试用二值化的方法处理暗色调的图像,以0为阈值进行分界通常可以得到良好的显示效果。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值