s1082046 作業 3

 主題: 離散傅立葉轉換 DFT 練習

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

一、 開發環境:

  • Windows 11
  •  Visual Studio 2022 C++
  • OpenCV 4.7.0

二、 程式功能:

() 主程式

       Step1:  利用imread()IMREAD_GRAYSCALE讀入灰階原圖。

   Step2:  將原圖resize成長寬皆原來一半的大小,以適當大小顯示。

          Step3:  執行副程式DFT(input)做傅立葉轉換和逆傅立葉轉換,顯示頻譜圖、相位圖和逆傅             
           立葉轉換後之結果。

原圖灰階結果



() 副程式(DFT)

     1. 傅立葉轉換

     Step1:  利用getOptimalDFTSize()分別獲取做DFT時適當的長、寬。

  Step2:  擴展圖像矩陣,對input圖像做padding,邊界部分補0

     Step3:  建一個雙通道的矩陣planes,用來存放複數的實部和虛部。

     Step4:  利用merge()將兩個通道合併成transform_array

     Step5:  利用dft(transform_array, transform_array)進行傅立葉轉換。

  Step6:  split()將兩個通道分開,一個表示實部,一表示虛部(planes[0]planes[1])

     Step7:  magnitude(planes[0], planes[1], output) 計算複數的振幅(頻譜圖),並存於output內。

     Step8:  利用phase(planes[0], planes[1], angle)來獲得相位圖,相位圖存於angle中。

     Step9:  對頻譜圖取對數log

     Step10: 將頻譜圖正規化至0~255

     Step11: 為使原點位於頻譜圖中心,必須重新排列傅立葉轉換後圖像的象限,利用交換象限

         中心化。

     Step12: 顯示存於output中的頻譜圖。

   2. 逆傅立葉轉換

     transform_array傅立葉轉換結果,利用idft()轉換回原圖像。

相位圖結果


  頻譜圖結果


 逆轉換回原圖之結果



程式demo



留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1