python低通滤波图像增强
时间: 2025-01-02 21:38:31 浏览: 8
### 使用Python实现低通滤波进行图像增强
为了通过低通滤波来增强图像,在Python中通常会借助`numpy`和`scipy`库来进行傅里叶变换以及逆变换操作,而`opencv-python`或`PIL`(即`Pillow`)用于加载图片。下面是一个简单的例子说明如何应用理想低通滤波器到灰度图上:
```python
import numpy as np
from scipy.fft import fftshift, ifftshift, fft2, ifft2
import cv2
import matplotlib.pyplot as plt
def ideal_low_pass_filter(image, cutoff_frequency):
"""
创建并返回给定截止频率的理想低通滤波器
参数:
image (ndarray): 输入的二维数组表示的图像.
cutoff_frequency (int): 滤波器的半径大小.
返回:
ndarray: 应用了理想低通滤波之后的结果.
"""
rows, cols = image.shape[:2]
crow, ccol = int(rows / 2), int(cols / 2)
mask = np.zeros((rows, cols))
for i in range(rows):
for j in range(cols):
if ((i - crow)**2 + (j - ccol)**2) <= cutoff_frequency**2:
mask[i, j] = 1
fshift = fftshift(fft2(image)) * mask
img_back = np.abs(ifft2(ifftshift(fshift)))
return img_back.astype(np.uint8)
# 加载测试图像作为灰度模式读取
img = cv2.imread('path_to_image',0)
# 定义理想的低通滤波器,并指定一个合理的截止频率值
filtered_img = ideal_low_pass_filter(img, 30)[^1]
plt.figure(figsize=(10,5))
# 显示原图
plt.subplot(121)
plt.title('Original Image')
plt.imshow(img,cmap='gray')
# 显示经过低通滤波后的图像
plt.subplot(122)
plt.title('Low Pass Filtered Image')
plt.imshow(filtered_img,cmap='gray')
plt.show()
```
这段代码展示了怎样创建一个理想型的低通滤波器应用于输入图像之上。这里采用了离散傅立叶变换(DFT),它能够把空间域中的信号转换成频谱形式;接着乘以设计好的滤波函数完成降噪过程;最后再做一次反向DFT回到原来的空间坐标系下得到最终结果。
阅读全文