数字图像处理代码Ch3《频率域滤波》教案资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理代码C h3《频率域滤波》
来自《数字图像处理MATLAB版》书中示例,代码复制与运行结果。
例3.1 有和没有填充的滤波效果。
clc,clear;close all;
%有和没有填充的滤波效果
f=imread('Fig0405(a)(square_original).tif');
%========无填充的滤波========
[M,N]=size(f);
[f,revertclass]=tofloat(f);
F=fft2(f); sig=10;
H=lpfilter('gaussian',M,N,sig);
G=H.*F; g=ifft2(G);
g=revertclass(g);
subplot 221;imshow(f);title('(a)尺寸为256×256像素的一幅图像'); subplot 222;imshow(g);title('(b)无填充时频率域中低通滤波后的图像'); %=======有填充的滤波==========
PQ=paddedsize(size(f)); %f是浮点数
Fp=fft2(f,PQ(1),PQ(2)); %计算填充的FFT
Hp=lpfilter('gaussian',PQ(1),PQ(2),2*sig);
Gp=Hp.*Fp; gp=ifft2(Gp);
gpc=gp(1:size(f,1),1:size(f,2));
gpc=revertclass(gpc);
subplot 223;imshow(gp);title('(c)图像滤波后用ifft2得到全填充图像'); h=fspecial('gaussian',15,7);
gs=imfilter(f,h);
subplot 224;imshow(gs);title('(d)有填充时频率域中低通滤波后的图像');运行结果:
例3.2 空间滤波和频率域滤波的比较。
clc,clear;close all;
%空间滤波和频率域滤波比较
f=imread('Fig0409(a)(bld).tif');
f=tofloat(f); F=fft2(f);
S=fftshift(log(1+abs(F)));
subplot 121; imshow(f);title('(a)一幅灰度图像');
subplot 122;imshow(S,[]);title('(b)该图像的傅里叶谱');
h=fspecial('sobel');%生成sobel滤波器
figure; subplot 221;freqz2(h);
title('(a)相应于垂直sobel空间滤波器的频率域滤波器的绝对值');
PQ=paddedsize(size(f));
H=freqz2(h,PQ(1),PQ(2));
H1=ifftshift(H);
subplot 222;mesh(abs(H1)');title('(b)经函数ifftshift处理后的同一滤波器'); subplot 223;imshow(abs(H),[ ]);title('以图像方式展示两个滤波器');
subplot 224;imshow(abs(H1),[ ]);title('以图像方式展示两个滤波器');
gs=imfilter(f,h);%使用0填充图像边界
gf=dftfilt(f,H1); figure;
subplot 221;imshow(gs,[ ]);title('(a)用垂直Sobel模板在空间域对原图像滤波结果'); subplot 222;imshow(gf,[ ]);title('(b)用滤波器b在频率域中得到的结果');
subplot 223;imshow(abs(gs),[ ]);title('(c)a的绝对值');
subplot 224;imshow(abs(gf),[ ]);title('(d)b的绝对值');
figure;%阈值处理,使主要边缘显示更为清晰
subplot 121;imshow(abs(gs)>0.2*abs(max(gs(:))));
title('(a)a图经阈值处理的二值图像');
subplot 122;imshow(abs(gf)>0.2*abs(max(gf(:)))); title('(b)b图经阈值处理的二值图像');
运行结果:
d=abs(gs-gf);
max(d(:)) min(d(:))
例3.3 函数dftuv的使用。
clc,clear,close all;
%函数dftuv的使用
[U,V]=dftuv(8,5);
DSQ=U.^2+V.^2
fftshift(DSQ)
D=hypot(U,V)
timeit(@() U.^2+V.^2)
timeit(@() hypot(U,V))
运行结果:
例3.4 低通滤波器。
clc,clear,close all;
f=imread('Fig0413(a)(original_test_pattern).tif');
[f,revertclass]=tofloat(f);
PQ=paddedsize(size(f));
[U,V]=dftuv(PQ(1),PQ(2));
D=hypot(U,V);
D0=0.05*PQ(2);
F=fft2(f,PQ(1),PQ(2));%用于绘制频谱
H=exp(-(D.^2)/(2*(D0^2)));
g=dftfilt(f,H);
g=revertclass(g);
subplot 221;imshow(f);title('(a)原始图像');
subplot 222;imshow(fftshift(H));
title('(b)以图像形式显示的高斯低通滤波器');
subplot 223;imshow(log(1+abs(fftshift(F))),[ ]);
title('(c)图(a)的谱');
subplot 224;imshow(g);title('(d)滤波后的图像');