s1093345 作業3

 

 作業說明

  • 主題:離散傅立葉轉換 DFT 練習
  • 撰寫傅立葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖像轉換至頻域後,將頻譜大小與相位角度各以灰階256色圖像方式呈現出,再呈現還原後圖像。




圖一、Input Image

開發環境

  • macOS 13.2.1
  • Visual Studio Code 1.77.3
  • Python 3.8.3
  • OpenCV 4.6.0

實作過程

  • 傅立葉轉換(Forward Fourier Transform)
    • 計算傅立葉轉換
      • 使用 np.fft.ff2(img) 將計算原始圖片 img 的二維離散傅立葉轉換取得頻率域的訊號圖像img
      • 透過 np.fft.fftshift(img) ,將上述結果 img 之頻譜低頻從左上角移動至圖像中心位置,得到中心化的頻譜圖像 DFT_img

    • 頻譜大小圖片(Magnitude Spectrum)
      • 透過 np.abs(DFT_img) 對先前的頻譜圖像 DFT_img 取絕對值以計算頻譜的大小,得到Abs_DFT_img
      • 使用 np.log(Abs_DFT_img) 將上述結果 Abs_DFT_img 取log,並乘以20,得到灰階256色圖像Magnitude_spectrum
      • 使用 cv2.normalize(src, dst, alpha, beta, normal_type) 在先前的結果Magnitude_spectrum 進行正規化,dst 沒有指定最終圖片設為 nonealpha 設為0beta 設為255normal_type 設為 cv2.NORM_MINMAX,使圖像的亮度值範圍從0至255進行正規化。

    • 相位角度(Phase Spectrum)
      • 透過 np.angle(img) 計算先前頻譜圖像的 DFT_img 的相位角度,得到相位角度圖像Phase_spectrum
      • 使用 cv2.normalize(src, dst, alpha, beta, normal_type) 在先前的結果Phase_spectrum 進行正規化,dst 沒有指定最終圖片設為 nonealpha 設為0beta 設為255normal_type 設為 cv2.NORM_MINMAX,使圖像的亮度值範圍從0至255進行正規化。


  • 反傅立葉轉換(Inverse Fourier Transform)
    • 計算反傅立葉轉換
      • 使用 np.fft.fftshift(DFT_img) 將先前中心化的傅立葉轉換的 DFT_img 頻域訊號的中心移到左上角。
      • 透過 np.fft.ifft2(IDFT_img) 計算反傅立葉轉換。
      • 透過 np.abs(IDFT_img) 計算複數的絕對值。
      • 使用 cv2.normalize(src, dst, alpha, beta, normal_type) 在先前的結果 IDFT_img 進行正規化,dst 沒有指定最終圖片設為 nonealpha 設為0beta 設為255normal_type 設為 cv2.NORM_MINMAX,使圖像的亮度值範圍從0至255進行正規化。

執行結果

    • 頻譜大小圖像

    o   圖片讀取:程式碼中的 cv2.imread(‘path’) 更改所需讀取圖片路徑。

    o   執行程式:python 1093345_hw3


    圖二、頻譜大小圖像輸出結果
    • 相位角度圖像

    o   圖片讀取:程式碼中的 cv2.imread(‘path’) 更改所需讀取圖片路徑。

    o   執行程式:python 1093345_hw3



    圖三 、相位角度圖像之輸出結果

    • 還原後圖像

    o   圖片讀取:程式碼中的 cv2.imread(‘path’) 更改所需讀取圖片路徑。

    o   執行程式:python 1093345_hw3


    圖四 、還原後圖像之輸出結果

    影片Demo




    影片、程式Demo






    留言

    這個網誌中的熱門文章

    rzwang Homework #1

    s1093350 Homework #2

    s1091537 Homework #1