文章和代碼以及樣例圖片等相關(guān)資源,已經(jīng)歸檔至【Github倉庫:digital-image-processing-matlab】或者公眾號【AIShareLab】回復(fù) 數(shù)字圖像處理 也可獲取。
目的
1.掌握二維 DFT 變換及其物理意義
2.掌握二維 DFT 變換的MATLAB 程序
3.空域濾波與頻域濾波
原理
1.應(yīng)用傅立葉變換進(jìn)行圖像處理
傅里葉變換是線性系統(tǒng)分析的一個有力工具,它能夠定量地分析諸如數(shù)字化系統(tǒng)、采樣點、電子放大器、卷積濾波器、噪音和顯示點等的作用。通過實驗培養(yǎng)這項技能,將有助于解決大多數(shù)圖像處理問題。對任何想在工作中有效應(yīng)用數(shù)字圖像處理技術(shù)的人來說,把時間用在學(xué)習(xí)和掌握博里葉變換上是很有必要的。
2.傅立葉(Fourier)變換的定義
對于二維信號,二維Fourier 變換定義為:
F
(
u
,
v
)
=
∫
?
∞
∞
∫
?
∞
∞
f
(
x
,
y
)
e
?
j
2
π
(
u
x
+
v
y
)
d
x
d
y
F(u, v)=\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x, y) e^{-j 2 \pi (u x+vy)} d x d y
F(u,v)=∫?∞∞?∫?∞∞?f(x,y)e?j2π(ux+vy)dxdy
逆變換:
f
(
x
,
y
)
=
∫
?
∞
∞
∫
?
∞
∞
F
(
u
d
,
v
)
e
j
2
π
(
u
x
+
v
y
)
d
u
d
v
f(x, y)=\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} F(u d, v) e^{j 2 \pi (u x+vy) } d u d v
f(x,y)=∫?∞∞?∫?∞∞?F(ud,v)ej2π(ux+vy)dudv
二維離散傅立葉變換為:
F
(
u
,
v
)
=
∑
x
=
0
M
?
1
∑
y
=
0
N
?
1
f
(
x
,
y
)
e
?
j
2
π
(
u
x
M
+
v
y
N
)
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(u,v)=x=0∑M?1?y=0∑N?1?f(x,y)e?j2π(Mux?+Nvy?)
逆變換:
f
(
x
,
y
)
=
1
M
N
∑
u
=
0
M
?
1
∑
v
=
0
N
?
1
F
(
u
,
v
)
e
j
2
π
(
u
x
M
+
v
y
N
)
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)}
f(x,y)=MN1?u=0∑M?1?v=0∑N?1?F(u,v)ej2π(Mux?+Nvy?)
圖像的傅立葉變換與一維信號的傅立葉變換變換一樣,有快速算法,具體參見參考書目,有關(guān)傅立葉變換的快速算法的程序不難找到。實際上,現(xiàn)在有實現(xiàn)傅立葉變換的芯片,可以實時實現(xiàn)傅立葉變換。
利用MATLAB 實現(xiàn)數(shù)字圖像的傅立葉變換
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 %設(shè)定窗口
imshow(A); %顯示原圖像的頻譜
B.
傅立葉變換在圖像處理,特別是在圖像增強(qiáng)、復(fù)原和壓縮中,扮演著非常重要的作用。實際中一般采用一種叫做快速傅立葉變換(FFT)的方法,MATLAB 中的fft2 指令用于得到二維FFT 的結(jié)果,ifft2 指令用于得到二維FFT 逆變換的結(jié)果。
近似沖擊函數(shù)的二維快速傅立葉變換(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函數(shù)
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 函數(shù)參照 function g=gscale(f,varargin)
imshow(S)
%使用函數(shù)fspecial生成空間濾波器
h=fspecial(‘sobel’)
freqz2(h) %查看相應(yīng)頻域濾波器圖形
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);% 生成濾波后的圖像,并默認(rèn)采用了0進(jìn)行邊界填
充
gf=dftfilt(f,H1);
imshow(gs,[])
figure,imshow(gf,[])
figure,imshow(abs(gs),[])
figure,imshow(abs(gf),[])
%創(chuàng)建一幅閥值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(:))
參考文獻(xiàn):
[1] Rafael C. Gonzalez, Richard E. Woods, and Steven L. Eddins. 2003. Digital Image Processing Using MATLAB. Prentice-Hall, Inc., USA.
[2] 阮秋琦. 數(shù)字圖像處理(MATLAB版)[M]. 北京:電子工業(yè)出版社, 2014.文章來源:http://www.zghlxwxcb.cn/news/detail-734723.html
[3] 岡薩雷斯. 數(shù)字圖像處理(第三版)[M]. 北京:電子工業(yè)出版社, 2011.文章來源地址http://www.zghlxwxcb.cn/news/detail-734723.html
到了這里,關(guān)于MATLAB實現(xiàn)圖像的傅立葉變換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!