python對灰度圖進行傅里葉變換和低通濾波


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

img = cv2.imread('lenaNoise.png', 0) # 直接讀為灰度圖像

fft2 = np.fft.fft2(img) # FFT快速傅里葉變換
s1 = np.log(np.abs(fft2))
fftShift = np.fft.fftshift(np.fft.fft2(img)) # 將低頻部分移動到中間
s2 = np.log(np.abs(fftShift))

plt.subplot(221), plt.imshow(np.abs(img), 'gray'), plt.title('original')
plt.subplot(222), plt.imshow(np.abs(s1), 'gray'), plt.title('fft')
plt.subplot(223), plt.imshow(np.abs(s2), 'gray'), plt.title('fftShift')

#定義掩模:生成的掩模中間為1周圍為0
row, col = int(img.shape[0] / 2), int(img.shape[1] / 2) # 求得圖像的中心點位置
mask = np.zeros((img.shape[0], img.shape[1]))
mask[row-20:row+20, col-20:col+20] = 1 # 保留了中間40^2個低頻部分

#將掩模與傅里葉變化后圖像相乘,保留中間部分
mask_img = fftShift * mask

#使用np.fft.ifftshift將低頻移動到原來的位置
ifftShift = np.fft.ifftshift(mask_img)
ifft2 = np.fft.ifft2(ifftShift)

plt.subplot(224), plt.imshow(np.abs(ifft2), 'gray'), plt.title('ifft2')

plt.show()


結果如下圖

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM