s1091541 作業3
主題: 離散傅立葉轉換 DFT 練習
撰寫傅立葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖
像轉換至頻域後,將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出,再呈現還 原後圖像。
開發環境:
l Windows 11
l Visual Studio 2019 C++
l OpenCV 4.7.0
程式功能:
l 傅立葉轉換:
1.
Padding以及先前準備:
a. 使用getOptimalDFTSize()將圖片調整至最適合傅立葉轉換的大小。
b. 使用copyMakeBorder()將原始圖像邊緣填上0擴大圖像。
c. 創建planes矩陣陣列儲存padding後矩陣的實部和虛部(初始化為0)後用merge()合併。
2. 使用dft()將複數矩陣做傅立葉轉換。
3. 使用split()和magnitude()將傅立葉轉換過後的複數值圖像換成實數值圖像。
4. 傅立葉轉換後的處理:
a. 先使用log()為了壓縮圖像的動態範圍並使小特徵更加明顯,又因為怕出現log0所以在前面加上Scalar::all(1)避免這類問題出現。
b. 使用Rect()將轉換後的圖像多餘的邊緣切除(若原圖大小為奇數,在邊緣處會多一行或一列)。
c. 接著對頻域圖像進行中心化處理,透過創建四個象限後將第一象限與第三象限交換達到鏡面效果以達到將,圖像的原點移至圖像中心。
d. 最後透過normalize()歸一化將相素質控制在一到零之間。
l 還原圖像:
使用idft()將頻域圖像逆轉,在透過normalize()進行歸一化可得還原圖像。
l 相位圖:
使用phase()得到相位圖。
留言
張貼留言