圖像的傅里葉變換在頻譜居中上的誤區

圖像的傅里葉變換在頻譜居中上的誤區

   如果你用MATLAB去計算圖像的傅里葉變換那麼你一定會用到FFTSHIFT這一函數爲了保證計算後的頻譜能夠居中化。如下圖。

                               

Matlab代碼:

clear all;
close all;
I = im2double(imread('cameraman.tif'));
imshowpair(I,log(abs(fftshift(fft2(I)))+1),'montage')

     但是你如果去看matlab的介紹或者在計算FFT之後調用FFTSHIFT函數,那麼經過該函數處理過的圖像會變成如下形式。如下圖。一定要注意:fftshift這一函數的調用是放在傅里葉變換之後的,這和頻譜居中的真實計算原理(即,利用傅里葉變換的屬性)根本就不一樣,可以說是一種投機取巧的方法,但也不失爲一個好的方法。


Matlab代碼:

Ishift = fftshift(I);
imshow(Ishift,[])

並且MATLAB還給出瞭如下圖所示的示意圖,即交換四個象限。注意:所以MATLAB的這種做法是一種投機取巧的做法。


而實際情況不是這樣的,根據傅里葉變換的屬性或者說是傅里葉變換對。


     要想對頻域的信號進行移位,時域的信號需要乘以一個對應的指數函數。這條屬性叫做頻域移位特性。圖像信號在進行變換之前需要對每一個像素乘以(-1)^x+y次方。這是根據歐拉公式計算出來的,即,e^jπ = -1。


Matlab代碼:

Ie = zeros(size(I));
for i = 1:size(I,1)
    for j = 1:size(I,2)
        Ie(i,j) = (-1)^(i+j).*I(i,j);
    end
end
imshowpair(I,Ie,'montage')

計算出來的圖像如下,左邊是原始圖像,右圖是乘以(-1)爲底的冪函數後的圖像。


     簡單點說就是一正一負,每隔一個像素乘以一個負號,得到的圖像就好像黑白間隔的棋盤一樣。如下圖放大後的圖像細節所示。而不是那種四個象限互換後的結果。


      最後我用空間域圖像乘以指數函數即(-1)^(x+y)的方式對圖像的頻譜進行居中化的操作,能夠得到和MATLAB自帶的函數fftshift一模一樣的結果。如下圖。


      Wherefore,不論是一維信號的頻譜還是二維信號的頻譜,一定要記得真正的頻譜居中不只是簡單的fftshift或是四個象限的對調而是在進行變換之前,用一個指數函數乘以原始信號。而這個指數函數根據著名的歐拉公式e^jπ+1=0,最終變成了以(-1)爲底的冪函數。

(全文完)


鳴謝:

【1】Digital image processing, Third Edition.  岡薩雷斯

【2】signals and systems,Second Edition. 奧本海姆

【3】Matlab 2017a


謝謝收看!

再見!


《聖經》馬太福音7章5節   爲什麼看見你弟兄眼中有刺,卻不想自己眼中有梁木呢?


*配圖與本文無關*


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章