数字图像处理代码Ch3《频率域滤波》教案资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)滤波后的图像');

相关文档
最新文档