s1072026 作業 3
作業說明
主題:離散傅立葉轉換 DFT 練習
撰寫傅利葉轉換程式(Forward
Fourier Transform and Inverse Fourier Transform)將一張圖 像轉換至頻域後,將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出,再呈現還 原後圖像。
開發環境
l Ubuntu 20.04.5 LTS
l Visual Studio Code
l OpenCV 3.4.16
l C++
實作說明
1. getOptimalDFTSize():將圖片拓展成 2*3*5 的倍數,可以加速 DFT 的效率
2. copyMakeBorder():利用 getOptimalDFTSize() 拓展圖片大小後,用 copyMakeBorder() 填充拓展的範圍
3. planes:儲存 padded 的實數與虛數平面
4. complex:透過 merge() 合併實數與虛數平面
5. dft():計算離散傅立葉轉換
6. split():把轉換後的 complex 分離成實數與虛數平面
7. 計算 magnitude,並取 log 方便觀測
8. 調整轉換後的圖像,讓圖像中心對齊原點
9. normalize():將 magnitude 調整到 0 到 1 的範圍,方便視覺化
10. phase():算出相位角度
11. normalize():將 phase 調整到 0 到 1 的範圍,方便視覺化
12. 使用 idft() 還原圖像
執行結果
原圖
轉換成頻譜
轉換成相位
還原後圖像
環境設定
執行前需安裝以下套件
l cmake
l OpenCV 3.4.16
l libgtk2.0-dev
l pkg-config
n xming
l 執行程式時需開啟
l x11-xserver-utils
如果在 terminal 執行
xhost + 顯示 xhost:
unable to open display "",需要設定 export
DISPLAY=:0.0,之後執行程式就能顯示視窗。
執行方式
執行 cmake . 產生 makefile,該 makefile 用於編譯主程式時動態連結 OpenCV 函式庫與主程式,之後便可執行編譯好的程式。
參考資料
l OpenCV:
Discrete Fourier Transform
留言
張貼留言