要实现图像的频域分析和处理,可以使用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()
在这个示例中,首先读取了一张灰度图像,并对其进行傅里叶变换。然后将频谱图显示出来,接着进行高通滤波,并将滤波后的图像显示出来。您可以根据需要调整滤波器的大小和类型,以实现不同的频域处理效果。