如何用matlab計算影象的二維傅立葉變換
阿新 • • 發佈:2019-01-05
關於二維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);
你會發現,這是不是很亂的影象,看起來是雜亂無章的,正常情況應該是高頻率居於中間部位,低頻位於四周,事實上影象陣列是這樣分佈的,只是在計算機上只能顯示到255的灰度值。
所以,應該進行灰度對映,把從max對映到255
matlab顯示的數值分佈如下:
所以就有了以上程式碼中的for迴圈,並且,為了突出顯示效果,把畫素值進行了二值化
之後的結果如下:
可以發現,當進行影象顯示畫素值歸一化之後,居於影象中間部分(也就是傅立葉變換的低頻部分)比較明顯,並且在縱向和橫向上具有實序列傅立葉變換的對稱性。之所以低頻部分比較多,這影象的畫素分佈決定的。
Thank you!