close

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結果:

arrow
arrow
    文章標籤
    python opencv fourier transform
    全站熱搜

    楓綺 發表在 痞客邦 留言(0) 人氣()