import cv2
import numpy as np
img = cv2.imread('test.jpg', 0) #讀取灰階影像
f = np.fft.fft2(img) #將影像進行二維的傅立葉轉換, 輸出為複數
original = 20*np.log(np.abs(f)) #先取絕對值, 表示取模,取對數,將資料範圍變小
cv2.imwrite("original.jpg", original)
#取絕對值: 將複數變化成實數
#取對數的目的為了將資料變化到較小的範圍(ex: 0-255)
fshift = np.fft.fftshift(f) #將FFT的DC分量移到頻譜中心, 輸出為複數
magnitude_spectrum = 20*np.log(np.abs(fshift)) #先取絕對值, 表示取模,取對數,將資料範圍變小
cv2.imwrite("Magnitude Spectrum.jpg", magnitude_spectrum)
row,col = img.shape[0]/2 , img.shape[1]/2
fshift[int(row-30):int(row+30), int(col-30):int(col+30)] = 0 #模板大小為 60×60
f_ishift = np.fft.ifftshift(fshift) #回到左上角
img_back = np.fft.ifft2(f_ishift) #使用FFT逆轉換, 輸出結果為複數数
img_back = np.abs(img_back) #還原成JET影像, 變成可以看的影像
cv2.imwrite("JET.jpg", img_back)
原圖:
傅立葉轉換:
Shift結果:
JET結果:
留言列表