python图像频域低通滤波
时间: 2023-10-22 14:31:43 浏览: 106
以下是Python实现图像频域低通滤波的示例代码:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图像
img = cv2.imread('lena.png', 0)
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 = fshift*mask
ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(ishift)
img_back = np.abs(img_back)
# 显示结果
plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(img_back, cmap='gray')
plt.title('Low Pass Filtered Image'), plt.xticks([]), plt.yticks([])
plt.show()
```
首先,读取图像并对其进行傅里叶变换和频域中心化:
```python
img = cv2.imread('lena.png', 0)
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
```
然后,构建一个低通滤波器,其中心部分为1,其余部分为0:
```python
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
```
在这里,我们选择了一个半径为30的圆形低通滤波器。
接下来,将这个低通滤波器应用于频域图像:
```python
fshift = fshift*mask
ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(ishift)
img_back = np.abs(img_back)
```
最后,显示原始图像和低通滤波器处理后的图像:
```python
plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(img_back, cmap='gray')
plt.title('Low Pass Filtered Image'), plt.xticks([]), plt.yticks([])
plt.show()
```
运行代码后,将显示以下结果:
![频域低通滤波示例图像](https://img-blog.csdnimg.cn/20210923185008505.png)
阅读全文