对二维图像进行理想低通滤波的python代码
时间: 2023-12-03 22:04:29 浏览: 145
以下是用Python实现理想低通滤波的代码:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取图片
img = cv2.imread('test.jpg', 0)
# 把图片转换为频域
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
# 低通滤波器
(w, h) = f.shape
center = (w // 2, h // 2)
r = 30
mask = np.zeros((w, h), np.uint8)
cv2.circle(mask, center, r, 1, -1)
# 进行频域滤波
fshift = fshift * mask
ishift = np.fft.ifftshift(fshift)
iimg = np.fft.ifft2(ishift)
iimg = np.abs(iimg)
# 显示处理前后的图像
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122)
plt.imshow(iimg, cmap='gray')
plt.title('Low Pass Filtered Image'), plt.xticks([]), plt.yticks([])
plt.show()
```
解释如下:
1. 首先读取了一张灰度图像 `test.jpg`,并把它转换为频域(`f` 表示变换后的频域,`fshift` 表示中心化后的频域)。
2. 接着定义了一个圆形低通滤波器,并将其作用于 `fshift`,相当于在频域中去除了高频部分。
3. 然后通过逆变换把处理后的频域图像 `ishift` 转换回空间域,并计算绝对值(虚部是噪声)得到最终的低通滤波后的图像 `iimg`。
4. 最后使用 `matplotlib` 库在窗口中同时显示处理前后的图像。
需要注意的是,此代码只是基于理想滤波器实现的低通滤波,因为理想滤波器在现实应用中有其局限性,对一些图像处理问题并不适用。为了在实际应用中取得更好的性能,需要根据实际情况选择合适的滤波器。
阅读全文