s1093345 作業3
作業說明
- 主題:離散傅立葉轉換 DFT 練習
- 撰寫傅立葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖像轉換至頻域後,將頻譜大小與相位角度各以灰階256色圖像方式呈現出,再呈現還原後圖像。
圖一、Input Image
開發環境
- macOS 13.2.1
- Visual Studio Code 1.77.3
- Python 3.8.3
- OpenCV 4.6.0
實作過程
- 傅立葉轉換(Forward Fourier Transform)
- 計算傅立葉轉換
- 使用 np.fft.ff2(img) 將計算原始圖片 img 的二維離散傅立葉轉換取得頻率域的訊號圖像img。
- 透過 np.fft.fftshift(img) ,將上述結果 img 之頻譜低頻從左上角移動至圖像中心位置,得到中心化的頻譜圖像 DFT_img。
- 頻譜大小圖片(Magnitude Spectrum)
- 透過 np.abs(DFT_img) 對先前的頻譜圖像 DFT_img 取絕對值以計算頻譜的大小,得到Abs_DFT_img。
- 使用 np.log(Abs_DFT_img) 將上述結果 Abs_DFT_img 取log,並乘以20,得到灰階256色圖像Magnitude_spectrum。
- 使用 cv2.normalize(src, dst, alpha, beta, normal_type) 在先前的結果Magnitude_spectrum 進行正規化,dst 沒有指定最終圖片設為 none,alpha 設為0,beta 設為255,normal_type 設為 cv2.NORM_MINMAX,使圖像的亮度值範圍從0至255進行正規化。
- 相位角度(Phase Spectrum)
- 透過 np.angle(img) 計算先前頻譜圖像的 DFT_img 的相位角度,得到相位角度圖像Phase_spectrum。
- 使用 cv2.normalize(src, dst, alpha, beta, normal_type) 在先前的結果Phase_spectrum 進行正規化,dst 沒有指定最終圖片設為 none,alpha 設為0,beta 設為255,normal_type 設為 cv2.NORM_MINMAX,使圖像的亮度值範圍從0至255進行正規化。
- 反傅立葉轉換(Inverse Fourier Transform)
- 計算反傅立葉轉換
- 使用 np.fft.fftshift(DFT_img) 將先前中心化的傅立葉轉換的 DFT_img 頻域訊號的中心移到左上角。
- 透過 np.fft.ifft2(IDFT_img) 計算反傅立葉轉換。
- 透過 np.abs(IDFT_img) 計算複數的絕對值。
- 使用 cv2.normalize(src, dst, alpha, beta, normal_type) 在先前的結果 IDFT_img 進行正規化,dst 沒有指定最終圖片設為 none,alpha 設為0,beta 設為255,normal_type 設為 cv2.NORM_MINMAX,使圖像的亮度值範圍從0至255進行正規化。
留言
張貼留言