一、 实验目的
1
、
掌握二维
DFT
变换及其物理意义
2
、
掌握二维
DFT
变换的
MATLAB
程序
3
、
空间滤波及频域滤波
二、 实验内容
学习使用函数
fft2, ifft2, abs, angle, fftshift, imfilter, fspecial, freqz2
;
对数形式显示方法;实现正反傅里叶变换、
Gaussian
低通滤波和
laplacian
高通滤波。
三、
实验步骤
1、利用
MATLAB
实现数字图像的傅里叶变换
读入并显示图
Fig0316(3)(third_from_top).tif
,作该图的二维
FFT 变换
F
,将其直流分量移到频谱中心
F1
,计算其实部
RR
、虚部
II、相角Angle,
用两种方法计算及幅值
A1=abs(F1)
和
A2=sqrt(RR.^2+II.^2),分别显示
A1
和
A2
,并加以比较。
2、近似冲击函数二维傅里叶变换
A=zeros(99,99);
A(49:51,49:51)=1;
作 A 的二维傅里叶变换 B,将 B 直流分量移到频谱中心 B1,分别用函数
imshow
和
mesh
显示
A
和
B1
模的对数(
log(1+abs(B1))
)
3、空间滤波与频域滤波
将图
Fig0504(a)(gaussian-noise).tif(f
)分别进行空间与频域滤波。
空间滤波:
用
fspecial
产生
9*9
,标准差为
2
的高斯滤波器
w
,用函数imfilter对
f
进行空间滤波,得到滤波后的图像
fi1
。
频域滤波:
将上述高斯滤波器
w
用函数
freqz2
获得其
256*256
频域形式
W, 用
W
在频域滤波图像
f
(注意
W
的直流分量在频谱中心),得到
Ff
,求其傅里叶逆变换(ifft2),得到滤波后的图像 fi2。
用函数
imshow
显示
w
,用函数
mesh
显示
W
,用
imshow
显示
f
,
fi1, Ff
的模的对数,
fi2
。比较
fi1
与
fi2
。
四、实验结果&代码
%(1)利用 MATLAB 实现数字图像的傅里叶变换
%(1)利用 MATLAB 实现数字图像的傅里叶变换
clear all;
f=imread('C:\PICTURE_YUWEI\Fig0316(3)(third_from_top).tif');
figure(1);imshow(f);title('原图');
F=fft2(f); %做快速傅里叶变换
F1=fftshift(F); %居中操作
A0=abs(F1);%居中的傅里叶谱
figure(2);imshow(A0, [])%显示图像
title('居中的频谱幅值A0');
%计算其实部RR、虚部II、相角Angle。
RR=real(F1); %取实数
II=imag(F1); %取虚数
A1=abs(F1); %取相角
figure(3);imshow(log(1+A1),[]);
title('频谱幅值A1');
A2=sqrt(RR.^2+II.^2);
figure(4); imshow(log(1+A2),[]);
title('频谱幅值A2');
%(2)近似冲击函数二维傅里叶变换
%(2)近似冲击函数二维傅里叶变换
clear all;
A=zeros(99,99); %生成一个99*99像素的黑色图像
A(49:51,49:51)=1; %居中的像素的值为1
B=fft2(A); %二维傅里叶变换
B1=fftshift(B);%居中操作
figure(1);
subplot(2,2,1);
imshow(A);
title('空域图像(用imshow显示)');
subplot(2,2,2);
imshow(log(1+abs(B1)));
title('频域图像(用imshow显示)');
subplot(2,2,3);
mesh(A);title('原图的空域图形(用mesh显示)');
subplot(2,2,4);
mesh(log(1+abs(B1)));
title('B1频域图形(用mesh显示)');
%(3)空间滤波与频域滤波
%(3)空间滤波与频域滤波
clear all;
w=fspecial('gaussian',[9 9],2);%生成滤波器w
figure;
subplot(3,2,1);
imshow(w);title('图3.1 9*9,标准差为2的高斯滤波器w');
W=freqz2(w,256,256);
W1=ifftshift(W); %居中显示
subplot(3,2,2);mesh(W);
title(' 图3.2 滤波器的频域图形W(用mesh显示)');
f=imread('C:\PICTURE_YUWEI\Fig0504(a)(gaussian-noise).tif');
F=fft2(f); %傅里叶变换
subplot(3,2,3);
imshow(f);
title(' 图3.3 频域滤波图像f(用imshow显示)');
fi1=imfilter(f,w);%空间滤波
subplot(3,2,4);
imshow(fi1);title(' 图3.4 空间滤波后的图形fi1(用imshow显示)');
Ff=W1.*F; %进行滤波
subplot(3,2,5);
imshow(log(abs(Ff)),[]);%取模的对数
title(' 图3.5 频域滤波Ff模的对数(用imshow显示)');
fi20=ifft2(Ff);%傅里叶逆变换
fi2=real(fi20);
fi2=fi2(1:256,1:256);
subplot(3,2,6);imshow(fi2,[]);
title(' 图3.6 频域滤波后的图形fi2(用imshow显示)');
五、Conclusions::tell me what you learned.
(1)在“利用 MATLAB 实现数字图像的傅里叶变换”实验中,通过比较用两种计算方法得到的幅值A1和A2,观察到以下信息:
① 二者布局基本相同,说明不同方法计算出来的各个频谱分量的比例基本相同。
② 通过平方再开方获得的A2,从直观上来说,颜色稍微深一些。说明计算出来的频谱中各个频率的强度稍低。
(2)在“近似冲击函数二维傅里叶变换”的实验中,通过纵向比较,可得出以下结论:
① 在xy维度上的形状来看(俯视图),生成的原始空域图像和它的空域图形、原始空域图像生成的频域图像,都是一一对应的。
② 直观来看,图像越黑,对应的强度就越低,在图形z轴上的值就越小。图像中,强度变化越快,在图形中对应的z轴变化就越快。
(3)空间滤波与频域滤波,比较fi1和fi2:
fi1是空间滤波的结果,fi2是频率域滤波的结果。从图中可看出,在频率域滤波的结果中,低频分量的强度和高频分量的强度都要高;在空间滤波的结果中,频率处于中间值的强度更高。