1. 程式人生 > >證明2D-FFT能夠拆分成兩個1D-FFT

證明2D-FFT能夠拆分成兩個1D-FFT

經常可以在文獻上看到2D-FFT能夠以兩個1D-FFT來實現,今天我用MATLAB證明了,的確如此。MATLAB的程式碼如下

clear all;
clc;
f=ones(256,256);
center_loc = size(f);
rd = 2;
f(round(center_loc(1)/2)-rd:round(center_loc(1)/2)+rd, round(center_loc(2)/2)-rd:round(center_loc(2)/2)+rd) = 0;
figure(1);imshow(f);
f2=fft2(f);
f3=(abs(f2));
figure(2);imshow(f3);

tmp=zeros(center_loc(1),center_loc(2));
%-the first 1D-FFT, for each row
for i= 1:center_loc(1)
    tmp(i, :) = fft(f(i, :), center_loc(2));
end
%-transpose the tmp, for column-based 1d-fft
tmp = tmp';
%-the second 1d-fft, for each column
for i= 1:center_loc(1)
    tmp(i, :) = fft(tmp(i, :), center_loc(2));
end
tt = abs(tmp);
figure(3); imshow(tt);

以下三張圖從上到下,分別對應程式碼中的figure(1~3)。

Figure(1):

wKioL1VimBbi-unkAAAnenFGOuM968.jpg

figure(2):

wKioL1VimDTSj7A_AABqfz0_yX4518.jpg

figure(3):

wKioL1VimEjSErjyAABqfz0_yX4504.jpg