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 物件中。
- phase():計算2D複數的相位。
- idft():執行反離散傅立葉變換。
參考資料:
- https://zhuanlan.zhihu.com/p/488053869
- https://zhuanlan.zhihu.com/p/490725019
留言
張貼留言