s1093332 作業3

 Assignment3 : DFT練習

功能:

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

開發環境:Windows11 + Visual Studio 2022 + Opencv4.7.0

程式說明:

  • 以灰階讀取圖片。擴展圖像矩陣,創建一個雙通道矩陣,儲存複數的實部與虛部。從多個單通道數組中創建一個多通道數組。進行傅立葉轉換。將雙通道分為兩個單通道,一個表示實部,一個表示虛部。計算複數的幅值。做歸一化。重新排列傅里葉圖像中的象限,使原點位於圖像中心。交換象限中心化。計算2D複數的相位。做反離散傅立葉變換。

1.以灰階模式讀取圖片

  • imread((path, IMREAD_GRAYSCALE)以灰階模式讀取圖片位置。
2.做傅立葉轉換,並顯示頻譜圖
  • getOptimalDFTSize():計算DFT的優化尺寸的函數,該函數會接受一個整數參數,並返回大於或等於該參數的最小2的冪次方。如果輸入參數本身已經是2的冪次方,則直接返回輸入參數。
  • copyMakeBorder():對圖像進行複製邊界的操作。其功能為將圖像四周複製一份,擴展圖像邊界。
  • merge():將多個矩陣按通道合併成一個多通道的矩陣。
  • dft():進行離散傅立葉轉換。
  • split():將多通道圖像分離為單通道圖像,使通道之間進行轉換。
  • magnitude():用於計算複數的模,即幅度
  • Scalar():數據類型,用於表示像素值或其他數值。可以表示包含一個或多個元素的向量,每個元素都是浮點數或整數。
  • log():計算傅立葉變換的頻譜,以獲得更好的顯示效果,並且在正規化之前使用。
  • normalize():將輸入矩陣的值範圍進行線性映射,將其調整為指定範圍內的值。用於正規化頻譜圖像的像素值。
  • copyTo():將一個 Mat 物件的數據複製到另一個 Mat 物件中。
3.顯示相位角度圖
  • phase():計算2D複數的相位。
4.還原圖像
  • idft():執行反離散傅立葉變換。
成果展示:
(原圖)

(頻譜圖)

(相位圖)

(還原後圖像)


參考資料:
  • https://zhuanlan.zhihu.com/p/488053869
  • https://zhuanlan.zhihu.com/p/490725019

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6