s1081423 作業3

 一、作業說明

撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖像轉換至頻域後,將頻譜大小與相位角度各以灰階256 色圖像方式呈現出,再呈現還原後圖像。

二、程式功能

(1) 執行Fourier Transform,印出頻譜圖(spectrum image)

(2) 印出相位角度圖(phase angle image)

(3) 執行Inverse Fourier Transform,印出還原圖

(左上)原圖 (右上)IDFT後輸出圖

(左下) 頻譜圖 (右下) 相位角度圖

 

三、開發環境

    Windows 10

    Visual Studio 2022

    OpenCV 4.7.0

 

四、實作討論

A. Fourier Transform流程

(1)以灰階模式讀取影像,做zero-padding避免混疊



(2)執行DFT

<作法一> :根據2-D DFT公式進行計算,並將實數與虛數結果分別儲存在complex_img以進行後續利用

圖、2-D DFT公式

 

圖、複數資料儲存結構

 


<作法二> : 先製作一個用於儲存實部與虛部的planes[],把padded img存放於實部,並組合出雙通道的 complex_img。接著使用opencv內提供之cv::dft()進行運算,得到轉換後的複數結果complex_img


然而做法一由於採用的是DFT作法,在大張圖片執行效率上不佳,因此後續將以作法二進行。

 

B. 顯示頻譜圖(spectrum image)

由於轉換後的複數不好觀察,因此先將complex_img拆成二通道planes[0]planes[1],計算出幅值存於spectrum_img,經過對數轉換後做歸一化。最後由於前面的dft()輸出的圖中心為高頻,為符合中心是低頻,因此呼叫自定義的fftshift()進行象限交換,最後spectrum_img即為所求。要注意的是歸一化步驟與數值計算本身無關,僅是為了方便顯示而用。

[對數轉換公式]

 


 

C. 顯示相位角度圖(phase angle image)

A.2獲得的complex_img分離出實部與虛部放在temp,並執行cv::phase()+normalization+單位轉換,獲得相位角度圖angle_img。

[phase angle formula]

 

D. Inverse Fourier Transform

輸入步驟A.2獲得的complex_img,依序執行分離通道、幅值(magnitude)計算、歸一化、圖像裁剪,獲得之result即為所求。

[IDFT formula]


留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1081444 Homework #7