用python编程将图像傅里叶变换后在频域上加上干扰,然后在傅里叶反变换并展示
时间: 2023-06-11 20:07:58 浏览: 95
好的,以下是一个简单的例子,使用Python的NumPy和OpenCV库来实现:
```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)
# 在频域上加上干扰
rows, cols = img.shape
crow, ccol = rows // 2, cols // 2
fshift[crow - 30:crow + 30, ccol - 30:ccol + 30] = 0
# 反变换
ishift = np.fft.ifftshift(fshift)
iimg = np.fft.ifft2(ishift)
iimg = np.abs(iimg)
# 显示图像
plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(iimg, cmap='gray')
plt.title('Processed Image'), plt.xticks([]), plt.yticks([])
plt.show()
```
解释一下代码:
1. 读取图像。
2. 对图像进行傅里叶变换,得到频域图像。
3. 在频域上加上干扰,这里我选择在中心点附近加上一个 60x60 的矩形区域,将其置零。
4. 对处理后的频域图像进行傅里叶反变换,得到处理后的图像。
5. 显示原图和处理后的图像。
运行该代码后,将会显示原图和处理后的图像。可以看到,处理后的图像出现了明显的干扰。
需要注意的是,由于傅里叶变换和反变换都是基于复数运算的,因此需要在最后使用 `np.abs()` 函数将反变换后的结果转为实数。
阅读全文