欢迎访问宙启技术站
智能推送

利用Python的fft2()函数对图像进行频域平滑处理

发布时间:2023-12-28 14:41:00

频域平滑是一种图像处理技术,它通过将图像转换到频域中,对频域图像进行平滑处理,然后再将图像转换回空域,以实现平滑的效果。Python中的fft2()函数可以用来进行二维快速傅里叶变换,实现频域平滑处理。

fft2()函数是numpy库中的函数,它可以将输入的二维数组转换为频域二维数组。在进行频域平滑处理时,我们需要先将图像的灰度矩阵转换为频域矩阵,然后对频域矩阵进行平滑处理,最后再将平滑后的频域矩阵转换回灰度矩阵。

下面是一个使用fft2()函数对图像进行频域平滑处理的例子:

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

# 读取图像
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)

# 将图像转换为频域
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)

# 构建高斯滤波器
rows, cols = img.shape
crow, ccol = int(rows/2), int(cols/2)
mask = np.zeros((rows, cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1

# 对频域矩阵进行平滑处理
fshift_filtered = fshift * mask

# 将平滑后的频域矩阵转换回灰度矩阵
f_ishift = np.fft.ifftshift(fshift_filtered)
img_filtered = np.fft.ifft2(f_ishift)
img_filtered = np.abs(img_filtered)

# 显示原始图像和平滑后的图像
plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(img_filtered, cmap='gray')
plt.title('Filtered Image'), plt.xticks([]), plt.yticks([])
plt.show()

在上面的例子中,我们首先读取了一张灰度图像,并将其转换为频域矩阵。然后,我们构建了一个高斯滤波器作为平滑的掩模,将需要平滑的频域部分置为1,其他部分置为0。接下来,我们对频域矩阵和滤波器进行乘法运算,得到平滑后的频域矩阵。最后,我们将平滑后的频域矩阵转换回灰度矩阵,并显示原始图像和平滑后的图像。