文章和代码以及样例图片等相关资源,现已归档至【Github仓库:digital-image-processing-matlab】或者大众号【AIShareLab】回复 数字图画处理 也可获取。

目的

1.把握二维 DFT 改换及其物理含义

2.把握二维 DFT 改换的MATLAB 程序

3.空域滤波与频域滤波

原理

1.应用傅立叶改换进行图画处理

傅里叶改换是线性体系剖析的一个有力工具,它能够定量地剖析比如数字化体系、采样点、电子放大器、卷积滤波器、噪音和显现点等的效果。通过实验培养这项技术,将有助于处理大多数图画处理问题。对任何想在工作中有用应用数字图画处理技术的人来说,把时间用在学习和把握博里叶改换上是很有必要的。

2.傅立叶(Fourier)改换的界说

关于二维信号,二维Fourier 改换界说为:

F(u,v)=∫−∞∞∫−∞∞f(x,y)e−j2(ux+vy)dxdyF(u, v)=\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x, y) e^{-j 2 \pi (u x+vy)} d x d y

逆改换:

f(x,y)=∫−∞∞∫−∞∞F(ud,v)ej2(ux+vy)dudvf(x, y)=\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} F(u d, v) e^{j 2 \pi (u x+vy) } d u d v

二维离散傅立叶改换为:

F(u,v)=∑x=0M−1∑y=0N−1f(x,y)e−j2(uxM+vyN)F(u, v)=\sum_{x=0}^{M-1} \sum_{y=0}^{N-1} f(x, y) e^{-j 2 \pi\left(\frac{\mathrm{ux}}{\mathrm{M}}+\frac{v y}{N}\right)}

逆改换:

f(x,y)=1MN∑u=0M−1∑v=0N−1F(u,v)ej2(uxM+vyN)f(x, y)=\frac{1}{M N} \sum_{u=0}^{M-1} \sum_{v=0}^{N-1} F(u, v) e^{j 2 \pi\left(\frac{\mathrm{ux}}{M}+\frac{v y}{N}\right)}

图画的傅立叶改换与一维信号的傅立叶改换改换一样,有快速算法,详细拜见参考书目,有关傅立叶改换的快速算法的程序不难找到。实践上,现在有完成傅立叶改换的芯片,能够实时完成傅立叶改换。

利用MATLAB 完成数字图画的傅立叶改换

A.

I=imread('D:\pic\DIP3E_CH03\Fig0316(3)(third_from_top).tif'); %读入原图画文件
imshow(I); %显现原图画
fftI=fft2(I); %二维离散傅立叶改换
sfftI=fftshift(fftI); %直流重量移到频谱中心
RR=real(sfftI); %取傅立叶改换的实部
II=imag(sfftI); %取傅立叶改换的虚部
A=sqrt(RR.^2+II.^2);%计算频谱幅值
A=(A-min(min(A)))/(max(max(A))-min(min(A)))*225; %归一化
figure %设定窗口
imshow(A); %显现原图画的频谱

B.

傅立叶改换在图画处理,特别是在图画增强、恢复和紧缩中,扮演着非常重要的效果。实践中一般采用一种叫做快速傅立叶改换(FFT)的方法,MATLAB 中的fft2 指令用于得到二维FFT 的成果,ifft2 指令用于得到二维FFT 逆改换的成果。

近似冲击函数的二维快速傅立叶改换(FFT)

x=1:99;y=1:99;
[X,Y]=meshgrid(x,y);
A=zeros(99,99);
A(49:51,49:51)=1;
B=fft2(A);
subplot(1,2,1),imshow(A),xlabel('空域图象');
subplot(1,2,2),imshow(B),xlabel('时域图象');
figure
subplot(1,2,1),mesh(X,Y,A),xlabel('空域'),grid on;
subplot(1,2,2),mesh(X,Y,abs(B)),xlabel('时域'),grid on;

空域滤波与频域滤波

% 用于频域滤波的m函数
function g=dftfilt(f,H)
F=fft2(f,size(H,1),size(H,2));
g=real(ifft2(H.*F));
g=g(1:size(f,1),1:size(f,2));
%
function PQ=paddedsize(AB,CD,PARAM)
if nargin==1
PQ=2*AB;
elseif nargin ==2 & ~ischar(CD)
PQ=AB+CD-1;
PQ=2*ceil(PQ/2);
elseif nargin == 2
m=max(AB);
P=2^nextpow2(2*m);
PQ=[P,P];
elseif nargin == 3
m=max([AB CD]);
P=2^nextpow2(2*m);
PQ=[P,P];
else
error('Wrong number of inputs')
end
%图画f的傅里叶频谱
f=imread(' D:\pic\DIP3E_CH04\Fig0438(a)(bld_600by600).tif');
F=fft2(f);
S=fftshift(log(1+abs(F)));
%S=gscale(S);
% gscale 函数参照  function g=gscale(f,varargin)
imshow(S)
%使用函数fspecial生成空间滤波器
h=fspecial(‘sobel’)
freqz2(h) %查看相应频域滤波器图形
PQ=paddedsize(size(f));
H=freqz2(h,PQ(1),PQ(2));
H1=ifftshift(H);
imshow(abs(H),[])
figure,imshow(abs(H1),[])
gs=imfilter(double(f),h);% 生成滤波后的图画,并默许采用了0进行鸿沟填
充
gf=dftfilt(f,H1);
imshow(gs,[])
figure,imshow(gf,[])
figure,imshow(abs(gs),[])
figure,imshow(abs(gf),[])
%创建一幅阀值2值图画
figure,imshow(abs(gs)>0.2*abs(max(gs(:))))
figure,imshow(abs(gf)>0.2*abs(max(gf(:))))
d=abs(gs-gf);
max(d(:))
min(d(:))

参考文献:

[1] Rafael C. Gonzalez, Richard E. Woods, and Steven L. Eddins. 2003. Digital Image Processing Using MATLAB. Prentice-Hall, Inc., USA.

[2] 阮秋琦. 数字图画处理(MATLAB版)[M]. 北京:电子工业出版社, 2014.

[3] 冈萨雷斯. 数字图画处理(第三版)[M]. 北京:电子工业出版社, 2011.