1. 程式人生 > >如何用matlab計算影象的二維傅立葉變換

如何用matlab計算影象的二維傅立葉變換

關於二維DFT的原理的話,可以參考清華出版的《影象工程 上冊》,所以此處贅述二維DFT的原理,如果不懂的話,那效果影象也不會理解為什麼。
所以我在程式碼中直接呼叫庫fft2(X);

% by keyhero
% img_fft.m
clear;
lena=imread('lena.bmp');
freq=fft2(lena);
freq = fftshift(freq);
ampt=abs(freq);
temp=max(ampt);
max_val=max(temp);
temp=min(ampt);
min_val=min(temp);
slope=255/(max_val - min_val);
for
i=1:256 for j=1:256 temp(i,j)=uint8(slope*(ampt(i,j) - min_val)); if temp(i,j)~=0 temp(i,j)=256; end end end imgfft=uint8(temp); subplot(121);imshow(lena); subplot(122);imshow(imgfft);

直接顯示結果freq陣列
你會發現,這是不是很亂的影象,看起來是雜亂無章的,正常情況應該是高頻率居於中間部位,低頻位於四周,事實上影象陣列是這樣分佈的,只是在計算機上只能顯示到255的灰度值。
所以,應該進行灰度對映,把從max對映到255

matlab顯示的數值分佈如下:
數值分佈

所以就有了以上程式碼中的for迴圈,並且,為了突出顯示效果,把畫素值進行了二值化

之後的結果如下:
result

可以發現,當進行影象顯示畫素值歸一化之後,居於影象中間部分(也就是傅立葉變換的低頻部分)比較明顯,並且在縱向和橫向上具有實序列傅立葉變換的對稱性。之所以低頻部分比較多,這影象的畫素分佈決定的。

Thank you!