python二维傅里叶变换后,高斯滤波
时间: 2023-07-07 07:04:12 浏览: 121
在Python中进行二维傅里叶变换和高斯滤波可以使用NumPy和OpenCV库。
下面是一个简单的例子:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图像
img = cv2.imread('image.png', 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
# 创建高斯滤波器
mask = np.zeros((rows,cols), np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
# apply mask and inverse DFT
fshift = fshift*mask
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.real(img_back)
# 显示结果
plt.subplot(131),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(np.abs(img_back), cmap = 'gray')
plt.title('Image after HPF'), plt.xticks([]), plt.yticks([])
plt.subplot(133),plt.imshow(mask*255, cmap = 'gray')
plt.title('Mask'), plt.xticks([]), plt.yticks([])
plt.show()
```
上述代码中,首先读取了一张灰度图像。然后进行二维傅里叶变换,计算频谱,将低频信号移动到中心位置。
接下来,创建一个高斯滤波器,将其应用于频域图像,并通过反傅里叶变换将结果转换回空间域。
最后,使用Matplotlib库显示结果。第一个子图是原始图像,第二个子图是应用高斯滤波器后的图像,第三个子图是使用的高斯滤波器。
阅读全文