s1081440 作業3

 

主題:離散傅立葉轉換 DFT 練習

功能:

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

開發環境:

Windows 11
Visual Studio Code

Python 4.1

OpenCV 4.7.0

程式碼:

import cv2
import numpy as np
import matplotlib.pyplot as plt

# 灰階讀取圖片
img = cv2.imread('image3.png', cv2.IMREAD_GRAYSCALE)

# Fast Fourier Transform
# 得到一個三維ndarray dft,每個元素都是一個不同的Fourier子圖
fft = np.fft.fft2(img)
fftshift = np.fft.fftshift(fft)  # 將zero-frequency shift到dft中間,方便頻域圖的辨識
# 因為原始的fft數值太大(Intensity values of the Fourier Image),所以要將這些數值取log調小
# np.abs計算出這些Intensity向量的大小
freq_image = 20*np.log(np.abs(fftshift))
phase_image = np.angle(fftshift)  # 相位圖表示每組對應頻域圖的相位

# Inverse Fast Fourier Transform
ishift = np.fft.ifftshift(fftshift)
iimg = np.fft.ifft2(ishift)
img_back = np.real(iimg)

# show result
plt.subplot(221), plt.imshow(img, 'gray'), plt.title('a')
plt.axis('off')
plt.subplot(222), plt.imshow(freq_image, 'gray'), plt.title('b')
plt.axis('off')
plt.subplot(223), plt.imshow(phase_image, 'gray'), plt.title('c')
plt.axis('off')
plt.subplot(224), plt.imshow(img_back, 'gray'), plt.title('d')
plt.axis('off')
plt.show()

執行結果:



留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6