读取一副图像,计算它的傅里叶变换,并归一化显示,然后设置不同的滤波器,看滤波后的效果。
时间: 2023-05-25 15:05:20 浏览: 87
图像处理傅里叶变换
以下是Python代码实现。
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图像
img = cv2.imread('lena.jpg', 0)
# 傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
# 频谱图
magnitude_spectrum = 20 * np.log(np.abs(fshift))
# 归一化并显示
plt.subplot(221), plt.imshow(img, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(222), plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
# 低通滤波器
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
fshift_lp = fshift * mask
magnitude_spectrum_lp = 20 * np.log(np.abs(fshift_lp))
# 归一化并显示
plt.subplot(223), plt.imshow(mask, cmap='gray')
plt.title('Low Pass Filter'), plt.xticks([]), plt.yticks([])
plt.subplot(224), plt.imshow(magnitude_spectrum_lp, cmap='gray')
plt.title('Magnitude Spectrum after LPF'), plt.xticks([]), plt.yticks([])
# 显示
plt.show()
```
运行后输出图像如下。左上角是原始图像,右上角是其傅里叶变换的频谱图。左下角是低通滤波器,在此基础上进行滤波后得到的频谱图在右下角。
![lena_fft_filtering](https://img-blog.csdn.net/20171013202106621?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmx5bmZhcmJhZG1pbl8xMjM0NTY3ODk1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/85)
阅读全文