s1093340 作業3
一、作業說明
撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖 像轉換至頻域後,將頻譜大小與相位角度各以灰階 256 色圖像方式呈現出,再呈現還 原後圖像。
二、開發環境
OS: Windows 11
Editor: Visual Studio Code
Compiler: GCC-12.2.0(MinGW-W64)
Language: C++
Package: OpenCV-4.6.0
三、程式功能
- 執行方式
- 查看執行結果
- input視窗為輸入圖片
- spectrum視窗為轉換後頻譜大小灰階圖像
- phase視窗為轉換後相位角灰階圖像
- recover視窗為還原後圖像
input視窗 - 結束程式
- 要離開程式時,按下鍵盤上任意鍵結束執行
四、實作過程
- 整張圖像讀入
- 使用getOptimalDFTSize()取得最佳化的圖片大小
- 使用copyMakeBorder()將不圖片不足最佳化的邊緣處填上0
- 建立一個雙通道的矩陣 planes,用來存放傅立葉轉換後複數的實部及虛部
- 使用dft()進行離散傅立葉轉換
- 使用split()將轉換結果拆解成實部及虛部存放至planes
- 轉換頻譜
- 使用magnitude()將離散傅立葉轉換後的結果轉換成振幅值
- 換後振幅值不適合直接顯示,因此將原本的線性尺度替換成對數尺度
- 將奇數行及奇數列裁切掉
- 將圖片分為四塊,左上右下交換、右上左下交換,重新排列四個象限,使原點位於圖片中心
- 轉換相位角
- 使用phase()將離散傅立葉轉換後的結果轉換成相位角
- 還原圖像
- 使用idft()將離散傅立葉轉換後的結果還原成圖片
- 正規化圖片
- 輸出結果
留言
張貼留言