圖像的傅里葉變換的迷思----頻譜居中

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

 

   如果你用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

 

謝謝收看!

再見!

 

《聖經》箴言 14章12節   有一條路,人以爲正,至終成爲死亡之路。

                                                                                                 *配圖與本文無關*

 

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