I=imread('test31.tif'); A=fftshift(fft2(I)); d0=100; N=8; [m,n]=size(A); h=zeros(m,n); [a,b]=size(I); H=zeros(a,b); H(a/4:3*a/4,b/4:3*b/4)=1; for i=1:m for j=1:n d(i,j)=sqrt(i^2+j^2); h(i,j)=1/(1+(d(i,j)/d0)^(2*N)); end end low1=A.*H; B=ifft2(low1); low2=A.*h; C=ifft2(low2); subplot(2,3,4),imshow(I);title('原图像'); subplot(2,3,2),imshow(log(abs(low1)),[],'InitialMagnification','fit');title('理想低通滤波频谱'); subplot(2,3,3),imshow(log(abs(low2)),[],'InitialMagnification','fit');title('巴特沃思低通滤波频谱'); subplot(2,3,1),imshow(log(abs(A)),[],'InitialMagnification','fit');title('傅立叶振幅频谱'); subplot(2,3,5),imshow(uint8(abs(B)),[],'InitialMagnification','fit');title('理想低通滤波后图像'); subplot(2,3,6),imshow(uint8(abs(C)),[],'InitialMagnification','fit');title('巴特沃思低通滤波后图像');代码分析
时间: 2024-04-11 12:31:00 浏览: 60
这段代码是用于对图像进行理想低通滤波和巴特沃斯低通滤波的操作,并展示相关结果的。下面是对代码的分析:
1. 第一行通过imread函数读取名为test31.tif的图像,并将其赋值给变量I。
2. 第二行通过fft2函数对图像I进行二维傅里叶变换,并通过fftshift函数将零频分量移到频谱中心,结果赋值给变量A。
3. 第三行定义了一个频率阈值d0,用于控制滤波的截止频率。
4. 第四行定义了一个滤波器阶数N,用于调节巴特沃斯滤波器的形状。
5. 第五行通过size函数获取A的大小,并将结果分别赋值给变量m和n。
6. 第六行创建了一个与A相同大小的全零矩阵h。
7. 第七行通过size函数获取I的大小,并将结果分别赋值给变量a和b。
8. 第八行创建了一个与I相同大小的全零矩阵H。
9. 第九行将H的一部分区域设置为1,该区域位于图像中心的四分之一到四分之三之间,用于构造理想低通滤波器的频谱。
10. 第十到第十四行使用两个嵌套的循环遍历h的每个元素,计算其对应的频率距离d,并根据巴特沃斯滤波器的公式计算滤波器的响应值。
11. 第十五行通过点乘操作将A与H相乘,得到理想低通滤波后的频谱,结果赋值给变量low1。
12. 第十六行通过ifft2函数对low1进行反傅里叶变换,得到理想低通滤波后的图像,结果赋值给变量B。
13. 第十七行通过点乘操作将A与h相乘,得到巴特沃斯低通滤波后的频谱,结果赋值给变量low2。
14. 第十八行通过ifft2函数对low2进行反傅里叶变换,得到巴特沃斯低通滤波后的图像,结果赋值给变量C。
15. 第十九行到第二十五行使用subplot函数将原图像、傅立叶振幅频谱、理想低通滤波频谱、巴特沃斯低通滤波频谱、理想低通滤波后的图像、巴特沃斯低通滤波后的图像分别显示在一个2x3的图像窗口中,并设置了相应的标题。
总的来说,这段代码是对图像进行理想低通滤波和巴特沃斯低通滤波处理,并展示了相关结果的过程。
阅读全文