s1093705 作業3
離散傅立葉轉換 DFT 練習
題目說明:
撰寫傅利葉轉換程式(Forward Fourier Transform and Inverse Fourier Transform)將一張圖
像轉換至頻域後,將頻譜大小與相位角度各以灰階256 色圖像方式呈現出,再呈現還
原後圖像。
開發環境:
- Windows 11
- Visual Studio Code
- Python 3.11.2
- Opencv 4.7.0
實作結果:
程式說明:
此次作業使用cv2, numpy, matplotlib 三個程式庫,分別使用於:影像處理、處理矩陣運算、繪製影像
import cv2
import numpy as np
from matplotlib import pyplot as plt
圖取照片
img = cv2.imread("image3.png", 0)
進行傅立葉轉換,在 numpy 程式庫裡面 fft 套件有 fft2() 函數可以使用,提供二維的傅立葉轉換。
f = np.fft.fft2(img)
二維傅立葉轉換之後,zero frequency component (零頻率) 會位於左上角,用 np.fft.fftshift(),讓兩個維度各自位移
,方便我們觀察頻譜分布狀況。

fshift = np.fft.fftshift(f)
magnitude_spectrum_shift = np.log(np.abs(fshift))
用 np.angle() 取得照片的相位角。
phase_angle = np.angle(f)
用 np.fft.ifft2() 做反傅立葉轉換。
combined = np.multiply(np.abs(f), np.exp(1j * phase_angle))
img_combined = np.real(np.fft.ifft2(combined))
留言
張貼留言