s1061637 作業3
主題: 離散傅立葉轉換 DFT 練習
作業要求:
撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖像轉換至頻域後,將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出,再呈現還原後圖像。
開發環境:- Windows 11
- Vscode
- python
- Open CV 4.7
作業步驟說明:
1.導入需要的import,並以灰階讀入圖片
2.使用getOptimalDFTSize( )得到最適合DFT轉換的影像尺寸,在一般情況中,圖像大小是2的冪次方會最快,而大小為 3、5 和 300 的乘積的陣列也為較快解。
得到最佳尺寸後,將圖片擴大並在擴大處補上0。此處做法為先建立全黑圖,並將原本的圖片覆蓋。
(註:此題之圖片大小為960x1600,經函數處理後得到的仍為原值)
3.使用open cv中的cv2.dft(),對圖片進行二維離散傅立葉轉換,cv2.DFT_COMPLEX_OUTPUT可將實數與虛數分別儲存。使用ffshift()可將低頻率(0頻率,或稱直流分量)放置於中心,高頻率置於邊緣。
4.
以cv.magnitude()將頻譜大小取其絕對值,對其+1後取log值以方便觀察。接著以cv.phase()取出相位角度。
5.將頻譜大小和相位角度正規化成0~255的256色灰階圖
6. 以plt.show()將圖片輸出結果如下
7.
將原圖回歸到原始位置,即直流分量放回邊緣。
8.
進行反離散傅立葉轉換cv2.idft(),最後計算複數值大小獲得圖像。
9.
輸出轉換結果,並與原圖對照。
留言
張貼留言