要實現圖像的頻域分析和處理,可以使用Python的OpenCV庫和numpy庫。以下是一個簡單的示例代碼,展示如何進行傅里葉變換,并進行頻域濾波。
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 讀取圖像
img = cv2.imread('input.jpg',0)
# 進行傅里葉變換
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20*np.log(np.abs(fshift))
# 將頻譜圖顯示出來
plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()
# 頻域濾波
rows, cols = img.shape
crow, ccol = rows//2 , cols//2
fshift[crow-30:crow+30, ccol-30:ccol+30] = 0
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)
# 顯示濾波后的圖像
plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img_back, cmap = 'gray')
plt.title('Image after HPF'), plt.xticks([]), plt.yticks([])
plt.show()
在這個示例中,首先讀取了一張灰度圖像,并對其進行傅里葉變換。然后將頻譜圖顯示出來,接著進行高通濾波,并將濾波后的圖像顯示出來。您可以根據需要調整濾波器的大小和類型,以實現不同的頻域處理效果。