
一、实验目的
1、理解离散傅立叶变换的基本原理;
2、掌握应用MATLAB语言进行FFT及逆变换的方法;
3、熟悉图像在频域中处理方法,应用MATLAB语言作简单的低通滤波器。
二、实验原理
1、傅立叶变换的基本知识
2、MATLAB提供的快速傅立叶变换函数
三、实验要求
1、读取图像,显示这幅图像,对图像作傅立叶变换,显示频域振幅图像。作傅立叶逆变换,显示图像,看是否与原图像相同。
subplot(1,3,1),imshow(A);title('原图像');
B=fftshift(fft2(A));
subplot(1,3,2),imshow(log(abs(B)), [ ], 'notruesize');title('二维傅立叶变换');
C= ifft2(B);
subplot(1,3,3),imshow(log(abs(C)), [ ], 'notruesize');title('逆变换后图像');
2、设计一个简单的理想低通滤波器(截止频率自选),对图像作频域低通滤波,再作反变换,观察不同的截止频率下反变换后的图像与原图像的区别。
subplot(3,2,1),imshow(A);title('原图像');
B=fftshift(fft2(A));
E= ifft2(B);
subplot(3,2,2),imshow(log(abs(E)), [ ], 'notruesize');title('未滤波的逆变换图像');
[m,n]=size(X);
H1=zeros(m,n);
H1(m/2:m, n/2:n)=1;
LOWPASS1=B.* H1;
C=ifft2(LOWPASS1);
subplot(3,2,3),imshow(log(abs(LOWPASS1)), [ ], 'notruesize');title('低通1');
subplot(3,2,4),imshow(log(abs(C)), [ ], 'notruesize');title('低通1逆变换图像');
H2=zeros(m,n);
H2(m/10:m, n/10:n)=1;
LOWPASS2=B.* H2;
D=ifft2(LOWPASS2);
subplot(3,2,5),imshow(log(abs(LOWPASS2)), [ ], 'notruesize');title('低通2');
subplot(3,2,6),imshow(log(abs(D)), [ ], 'notruesize');title('低通2逆变换图像');
3、设计一个简单的理想高通滤波器(截止频率自选),对图像作频域高通滤波,再作反变换,观察不同的截止频率下反变换后的图像与原图像的区别。
subplot(3,2,1),imshow(A);title('原图像');
B=fftshift(fft2(A));
E= ifft2(B);
subplot(3,2,2),imshow(log(abs(E)), [ ], 'notruesize');title('未滤波的逆变换图像');
[m,n]=size(X);
H1=ones(m,n);
H1(m/3:m*2/3, n/3:n*2/3)=0;
LOWPASS1=B.* H1;
C=ifft2(LOWPASS1);
subplot(3,2,3),imshow(log(abs(LOWPASS1)), [ ], 'notruesize');title('高通1');
subplot(3,2,4),imshow(log(abs(C)), [ ], 'notruesize');title('高通1逆变换图像');
H2=ones(m,n);
H2(m*3/5:m, n*3/5:n)=0;
LOWPASS2=B.* H2;
D=ifft2(LOWPASS2);
subplot(3,2,5),imshow(log(abs(LOWPASS2)), [ ], 'notruesize');title('高通2');
subplot(3,2,6),imshow(log(abs(D)), [ ], 'notruesize');title('高通2逆变换图像');
4、(选做内容):对一幅图像作傅立叶变换,显示一幅频域图像的振幅分布图和相位分布图,分别对振幅分布和相位分布作傅立叶逆变换,观察两幅逆变换后的图像,体会频域图像中振幅与位相的作用。
A=fftshift(fft2(I));
A1=angle(A);
B=ifft2(A);
B1=ifft2(A1);
C=ifft2(abs(A));
figure;
subplot(2,3,1),imshow(I);title('原图像');
subplot(2,3,2),imshow(A1,[],'notruesize');title('相位谱');
subplot(2,3,3),imshow(log(abs(A)),[],'notruesize');title('傅立叶振幅频谱');
subplot(2,3,4),imshow(log(abs(B)),[],'notruesize');title('直接图像逆变换');
subplot(2,3,5),imshow(log(abs(B1)),[],'notruesize');title('相位逆变换');
subplot(2,3,6),imshow(log(abs(C)),[],'notruesize');title('傅立叶振幅逆变换');
5、(选做内容):设计一个其它类型(如巴特沃思、指数、梯形等)的低通滤波器,对图像作频域低通滤波,比较这一滤波器和理想滤波器滤波结果的差异。
频域低通滤波:
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
low1=A.*H;
B=ifft2(low1);
low2=A.*h;
C=ifft2(low2);
figure;
subplot(2,3,4),imshow(I);title('原图像');
subplot(2,3,2),imshow(log(abs(low1)),[],'notruesize');title('理想低通滤波频谱');
subplot(2,3,3),imshow(log(abs(low2)),[],'notruesize');title('巴特沃思低通滤波频谱');
subplot(2,3,1),imshow(log(abs(A)),[],'notruesize');title('傅立叶振幅频谱');
subplot(2,3,5),imshow(uint8(abs(B)),[],'notruesize');title('理想低通滤波后图像');
subplot(2,3,6),imshow(uint8(abs(C)),[],'notruesize');title('巴特沃思低通滤波后图像');
时域低通滤波:
A=fftshift(fft2(I));
[m,n]=size(I);
H=zeros(m,n);
H(m/4:3*m/4,n/4:3*n/4)=1;
low=A.*H;
B=ifft2(low);
[b,a]=butter(8,0.7);
C=filter(b,a,double(I));
figure;
subplot(1,3,1),imshow(I);title('原图像');
subplot(1,3,2),imshow(uint8(abs(B)));title('理想低通滤波后图像');
subplot(1,3,3),imshow(uint8(C));title('巴特沃思低通滤波后图像');
