实验五 傅立叶变换与频率域滤波
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五傅立叶变换与频率域滤波
一、实验目的
1.理解傅立叶变换;
2.熟悉MATLAB中各种傅立叶变换相关的函数;
3.掌握频域滤波的步骤以及MATLAB的实现方法;
4.理解频域滤波器与空域滤波器的关系。
二、实验内容及步骤
1、傅立叶变换及傅立叶反变换
(1)傅立叶变换相关函数
MATLAB提供了几个和傅立叶变换相关的函数。其说明如下:
F=fft2(f); 二维傅立叶变换
real(F); 傅立叶变换的实部
imag(F); 傅立叶变换的虚部
abs(F); 获得傅立叶频谱
fftshift(F); 将变换的原点移至频率矩形的中心
ifft2(F); 二维傅立叶反变换
iffshift(F); 反中心平移
(2)傅立叶频谱
傅立叶频谱反映了图像的频率成分。幅值谱的能量往往集中于中低频部分,并且中低频部分的能量反映了图像的实体。图像的噪声往往集中于高频部分。
下面的例子对课本中123页的图Fig4.03(a).jpg进行傅立叶变换,得到傅立叶频谱。
例:x=imread('Fig4.03(a).jpg');
F=fft2(x); %二维傅立叶变换
FP=sqrt(real(F).^2+imag(F).^2); %计算傅立叶频谱,或者使用abs()函数
imshow(uint8(FP)) %显示傅立叶频谱,直流成分分布在四个边角
figure(2); imshow(uint8(fftshift(FP))) % 中心平移的频谱图
思考题1:对课本125页的图Fig4.04(a).jpg进行傅立叶变换,得到傅立
叶频谱,为清楚地显示该谱,将其进行对数变换处理,增强其灰度细节。结果类似于图5_1。
图5_1 Fig4.04(a)的傅立叶谱
x=imread('Fig4.04(a).jpg');
F=fft2(x);
FP=sqrt(real(F).^2+imag(F).^2);
Image=log(1+double(fftshift(FP)));
imshow(x);
figure(2);imshow(Image,[]);
(3)傅立叶变换对
将一幅图像进行傅立叶变换,再进行傅立叶反变换,可以得到原始图像。下面的例子对课本中134页的图Fig4.11(a)进行傅立叶变换,然后再进行傅立叶反变换,观察并了解实现过程。
理论上,经过傅立叶变换和傅立叶反变换,应该得到原始图像。比较fa 和f ,基本差不多。查看变量C 的内容,可以看到他们之间还是有细微的差别的。 例: close all
f=imread('Fig4.11(a).jpg');
F=fft2(f); %傅立叶变换
ff=ifft2(F); %反傅立叶变换
fa=real(ff); % 取实部
subplot(2,2,1),imshow(f);
subplot(2,2,2),imshow(F); %只显示变换的实部
subplot(2,2,3),imshow(ff,[]);
subplot(2,2,4),imshow(fa,[]);
figure(2)
C=fa-double(f); %反变换回来的图像和原图相减
imshow(C,[]); %两者是有差别的
2、频率域滤波
按照频域滤波的步骤,在MATLAB 中是很容易编程实现频域滤波。由于滤波器就是频率域中的函数,关键是如何构造滤波器函数。频域滤波的步骤为: ➢ 对图像进行傅立叶变换DFT , 即F (u,v );
➢ 傅立叶变换原点中心平移;
➢ 用滤波器函数H(u,v)乘以F (u,v );
➢ 将原点反中心平移;
➢ 傅立叶反变换;
➢ 取上一步结果中的实部,即频域滤波后的结果。
(1) 低通滤波
低通滤波是使低频部分通过,而使高频部分受到抑制,从而使图像变得平滑。常用的低通滤波有理想低通滤波、巴特沃斯低通滤波和高斯低通滤波。
下面的例子实现了对课本135页图Fig4.11(a)进行理想低通滤波处理,截止频率D 0=30。
理想低通滤波函数:
00
1((,)0H u v ≤⎧=⎨⎩,D u,v)D ,D(u,v)>D ,221/2(,)[(/2)(/2)]D u v u M v N =-+- 例:
close all
clear all
f=imread('Fig4.11(a).jpg');
% ------构造理想低通滤波器----------
[Hh Hw]=size(f); %以图像的行列值作为滤波器的行列
H(1: Hh,1: Hw)=0; %滤波器的初值为0
x0=Hh/2; y0=Hw/2; % 滤波器的中心点
for x=1:Hh
for y=1:Hw
if(sqrt((x- x0)*(x- x0)+(y-y0)*(y- y0))<30) %理想低通滤波器D0=30 H(x,y)=1;
end
end
end
% -----------傅立叶变换及频域滤波---------
F=fft2(f);
F=fftshift(F); %中心平移
FF=F.*H; % 频域滤波。注意必须是点乘
FFS=ifftshift(FF);
g=ifft2(FFS); % 傅立叶反变换
g=uint8(real(g)); %取变换后的实部
% 显示并比较结果
figure(1), imshow(f); title('原图')
figure(2),imshow(H);title('理想低通滤波器')
figure(3), imshow(log(abs(F)+1),[ ]);title('频率谱') %对数变换,便于显示结果figure(4), imshow(log(abs(FF)+1),[ ]);title('频域滤波')
figure(5),imshow(g,[]);title('滤波结果')