(整理)数字图像处理之频率滤波
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四、频域滤波
一、实验目的
1.了解频域滤波的方法;
2.掌握频域滤波的基本步骤。
二、实验内容
1.使用二维快速傅立叶变换函数fft2( )及其反变换函数ifft2( )对图象进行变换;
2.自己编写函数生成各种频域滤波器;
3.比较各种滤波器的特点。
三、实验步骤
1.图象的傅立叶变换
a.对图象1.bmp 做傅立叶变换。
>> x=imread(‘1.bmp’);
f=fft2(x);
imshow(real(f)) %显示变换后的实部图像
figure
f1=fftshift(f);
imshow(real(f1))
变换后的实部图像
中心平移后图像
b.对图象cameraman.tif 进行傅立叶变换,分别显示变换后的实部和虚
部图象。
思考:
对图象cameraman.tif 进行傅立叶变换,并显示其幅度谱|F(U,V)|。结果类似下图。
显示结果命令imshow(uint8(y/256))
程序如下:
x=imread('cameraman.tif');
f=fft2(x);
f1=fftshift(f);
y0=abs(f);
y1=abs(f1);
subplot(1,3,1),imshow(x)
title('sourceimage')
subplot(1,3,2),imshow(uint8(y0/256))
title('F|(u,v)|')
subplot(1,3,3),imshow(uint8(y1/256))
title('中心平移')
2.频域滤波的步骤
a.求图象的傅立叶变换得F=fft2(x)
b.用函数F=fftshit(F) 进行移位
c.生成一个和F 一样大小的滤波矩阵H .
d.用F和H相乘得到G , G=F.*H
e.求G的反傅立叶变换得到g 就是我们经过处理的图象。
这其中的关键就是如何得到H 。
3.理想低通滤波器
a.函数dftuv( )在文件夹中,它用生成二维变量空间
如:[U V]=dftuv(11,11)
b.生成理想低通滤波器
>>[U V]=dftuv(51,51);
D=sqrt(U.^2+V.^2);
H=double(D<=15);
Mesh(U,V,H)
c.应用以上方法,对图象cameraman.tif进行低通滤波;
>> close all
Q=0.7
F=imread('cameraman.tif')
[U V]=dftuv(size(F,1),size(F,2));
D=sqrt(U.^2+V.^2);
H=double(D<= size(F,1)/2*Q); %修改系数Q为0.5,0.3,0.2
FF=fft2(F);
G=FF.*H;
imshow(real(fftshift(FF)))
figure
imshow(real(fftshift(G)))
g=real(ifft2(G));
figure
imshow(uint8(g))
在以原点为圆心,以D0为半径的圆内无衰减的通过所有频率而在该圆外切断所有频率的二维低通滤波器,称为理想低通滤波器。
思考:
观察理想低通滤波器不同滤波半径对滤波结果的影响。即系数Q分别为0.7、0.5、0.3、0.2时,结果如何?并加以解释说明。
close all
F=imread('cameraman.tif')
[U V]=dftuv(size(F,1),size(F,2));
D=sqrt(U.^2+V.^2);
H=double(D<= size(F,1)/2*Q1); %修改系数Q为0.5,0.3,0.2 FF=fft2(F);
G=FF.*H;
subplot(4,3,1),imshow(real(fftshift(FF)))
subplot(4,3,2),imshow(real(fftshift(G)))
title('Q=0.7')
g=real(ifft2(G));
subplot(4,3,3),imshow(uint8(g))
Q2=0.5
F=imread('cameraman.tif')
[U V]=dftuv(size(F,1),size(F,2));
D=sqrt(U.^2+V.^2);
H=double(D<= size(F,1)/2*Q2); %修改系数Q为0.5,0.3,0.2 FF=fft2(F);
G=FF.*H;
subplot(4,3,4),imshow(real(fftshift(FF)))
subplot(4,3,5),imshow(real(fftshift(G)))
title('Q=0.5')
g=real(ifft2(G));
subplot(4,3,6),imshow(uint8(g))
Q3=0.3
F=imread('cameraman.tif')
[U V]=dftuv(size(F,1),size(F,2));
D=sqrt(U.^2+V.^2);
H=double(D<= size(F,1)/2*Q3); %修改系数Q为0.5,0.3,0.2 FF=fft2(F);