python设计一个去除灰度图像上泊松噪声的滤波器
时间: 2024-02-11 14:08:27 浏览: 70
一个处理图片灰度值的python脚本
下面是一个基于双边滤波器的Python实现,用于去除灰度图像上的泊松噪声:
```python
import cv2
import numpy as np
# 双边滤波器去噪
def denoise(img, d=15, sigmaColor=75, sigmaSpace=75):
# 估计噪声方差
img_var = np.var(img)
img_noisy_var = np.var(img - cv2.blur(img, (5, 5)))
noise_var = img_noisy_var - img_var
# 计算滤波器参数
sigma = np.sqrt(max(0, noise_var))
sigma_space = sigmaSpace
sigma_color = sigmaColor
# 双边滤波器去噪
img_denoised = cv2.bilateralFilter(img.astype(np.float32), d, sigma_color, sigma_space)
# 将像素值限制在0-255范围内
img_denoised[img_denoised > 255] = 255
img_denoised[img_denoised < 0] = 0
return np.uint8(img_denoised)
# 读入图像并加入泊松噪声
img = cv2.imread('lena.png', 0)
img_noisy = np.random.poisson(img)
# 去噪并显示结果
img_denoised = denoise(img_noisy)
cv2.imshow('Original Image', img)
cv2.imshow('Noisy Image', img_noisy)
cv2.imshow('Denoised Image', img_denoised)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
需要注意的是,双边滤波器的去噪效果和速度可能会受到不同的图像和噪声类型的影响,需要根据具体情况进行选择。
阅读全文