2022年4月14日 星期四

s1081535 作業4

   

一、 作業說明 

  • 計算輸入圖像的傅立葉轉換結果,以灰階256色圖像方式呈現出頻譜大小與相位角角度。
  • 利用Gaussian Low-Pass Filter對輸入圖像進行處理,並輸出平滑後圖像。

 作業環境

  • MacOS Monterey 12.2
  • PyCharm 2019.3.3
  • Python 3.8
  • OpenCV 4.5.5

 實作功能與方法

傅立葉轉換

利用 numpy.fft.fftshift (numpy.fft.fft2( input_image ) )計算二維離散傅立葉變換,並將zero-frequency 分量移動到頻譜的中心,得𝐹(𝝁, 𝜈)。

  • numpy.fft.fft2( ) 通過快速傅裏葉變換 (FFT) 計算 M-dimensional 數組中任意軸上的 n 維離散傅裏葉變換,默認情況下,變換是在輸入數組的最後兩個軸上計算的,即二維 FFT。
  • numpy.fft.fftshift( ) 為列出的所有軸交換half-spaces(默認為全部)。請注意,僅當 len(x) 為偶數時,y[0]才是奈奎斯特分量。

計算頻譜大小

根據頻譜大小計算公式,𝑆𝑝𝑒𝑐𝑡𝑟𝑢𝑚=|𝐹(𝝁, 𝜈)|,利用abs( 𝐹(𝝁𝜈) )得出頻譜大小。

  • 由於FFT計算完成後之結果高頻數據集中於中心,低頻數據分散於四角,需要透過numpy.log( )運算以顯示結果。

計算相位角角度

根據相位角角度計算公式,

使用numpy.arctan2( 虛部, 實部)再將結果單位弧度轉換為角度,得出最終結果。

高斯平滑處理

根據Frequency Filter步驟利用Gaussian Low-Pass Filter處理圖像。
  1. 輸入M*N的圖像
  2. 對該圖像做Zero-Padded,將圖像大小擴大成2M*2N (𝑓𝑝(𝝁, 𝜈) ),並將圖像保持在左上角
  3. 確保傅立葉轉換時頻譜置中,將𝑓𝑝(𝝁𝜈) 奇數點乘以-1
  4. 𝑓𝑝(𝝁𝜈) 做離散傅立葉轉換得到𝐹(𝝁𝜈)
  5. 計算𝐷(𝝁, 𝜈)與𝐻(𝝁𝜈),取得G(𝝁𝜈)
    • 根據兩公式,
    • 設定大小為2M*2N的Gaussian Low-Pass Filter並將中心點定位在M*N,得出𝐻(𝝁, 𝜈)。
    • 再根據公式,G(𝝁𝜈)=𝐹(𝝁𝜈)𝐻(𝝁𝜈)計算後得出G(𝝁𝜈)。
  6.  對結果做IDFT所得即為Gaussian Low-Pass Filter在頻域作用後的結果
  7. 將大小裁減為原始大小M*N,保留左上角圖像部分

*自己的方法*使用fftshift代替步驟2和3,利用Gaussian Low-Pass Filter處理圖像。

四、 執行結果

第一部分

第二部分





沒有留言:

張貼留言