使用Python的fft2()函数进行图像的高通滤波处理
发布时间:2023-12-28 14:40:01
在Python中,可以使用NumPy库中的fft2()函数来实现图像的高通滤波处理。fft2()函数将输入的二维数组(图像)进行快速傅里叶变换(FFT),得到其频域表示。
下面是一个使用Python的fft2()函数进行图像的高通滤波处理的代码示例:
import numpy as np
import cv2
from matplotlib import pyplot as plt
# 读取图像
image = cv2.imread('input_image.jpg', 0) # 灰度图像读取
# 进行傅里叶变换
f = np.fft.fft2(image)
# 将低频分量移到频谱的中心
fshift = np.fft.fftshift(f)
# 构建一个高通滤波器
rows, cols = image.shape
crow, ccol = int(rows / 2), int(cols / 2) # 中心位置
mask = np.ones((rows, cols), np.uint8)
mask[crow - 30 : crow + 30, ccol - 30 : ccol + 30] = 0
# 应用高通滤波器
fshift_filtered = fshift * mask
# 将频谱反移回原始位置
f_filtered = np.fft.ifftshift(fshift_filtered)
# 进行反傅里叶变换
image_filtered = np.fft.ifft2(f_filtered)
image_filtered = np.abs(image_filtered)
# 显示原始图像和滤波后的图像
plt.subplot(121), plt.imshow(image, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(image_filtered, cmap='gray')
plt.title('Filtered Image'), plt.xticks([]), plt.yticks([])
plt.show()
在上述代码中,我们首先读取一个灰度图像,然后使用fft2()函数将其转换为频域表示。接下来,我们将低频分量移到频谱的中心,然后构建一个高通滤波器。我们可以通过将特定区域的值置为0来实现高通滤波器的效果。在上述代码中,我们选择了一个30×30的区域作为低频分量,将其值置为0,而其他区域保持为1。然后,我们将高通滤波器应用于频域表示,并将结果反移回原始位置。最后,我们使用ifft2()函数将滤波后的频域表示转换回空域,并使用abs()函数计算其绝对值得到滤波后的图像。最后,我们使用matplotlib库将原始图像和滤波后的图像显示出来。
通过上述代码示例,我们实现了对图像的高通滤波处理。这种滤波处理能够将图像的高频细节突出显示,从而增强图像的边缘和纹理等细节信息。可以根据具体场景和需求调整滤波器的大小和位置等参数,以获得不同的滤波效果。
