在灰度图像上添加三种不同类型的噪声,并分别输出。
时间: 2023-12-30 19:03:24 浏览: 88
Matlab在图像分析与处理中的应用及其编程
4星 · 用户满意度95%
好的,我可以给你一个示例代码,演示如何在灰度图像上添加三种不同类型的噪声:高斯噪声、椒盐噪声和泊松噪声。
```python
import cv2
import numpy as np
# 加载灰度图像
img = cv2.imread('gray_image.jpg', 0)
# 添加高斯噪声
mean = 0
var = 100
sigma = var ** 0.5
gaussian_noise = np.random.normal(mean, sigma, img.shape)
gaussian_noise = gaussian_noise.reshape(img.shape).astype('uint8')
img_gaussian = cv2.add(img, gaussian_noise)
# 添加椒盐噪声
s_vs_p = 0.5
amount = 0.05
num_salt = np.ceil(amount * img.size * s_vs_p)
num_pepper = np.ceil(amount * img.size * (1.0 - s_vs_p))
salt_coords = [np.random.randint(0, i - 1, int(num_salt)) for i in img.shape]
pepper_coords = [np.random.randint(0, i - 1, int(num_pepper)) for i in img.shape]
img_salt_pepper = img.copy()
img_salt_pepper[salt_coords] = 255
img_salt_pepper[pepper_coords] = 0
# 添加泊松噪声
lam = 10
poisson_noise = np.random.poisson(lam, img.shape)
poisson_noise = poisson_noise.astype('uint8')
img_poisson = cv2.add(img, poisson_noise)
# 显示原图和三种噪声图像
cv2.imshow('Original', img)
cv2.imshow('Gaussian noise', img_gaussian)
cv2.imshow('Salt and pepper noise', img_salt_pepper)
cv2.imshow('Poisson noise', img_poisson)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例代码中,我首先加载了一个灰度图像,然后分别用 `np.random.normal()`、`np.random.randint()` 和 `np.random.poisson()` 函数生成高斯噪声、椒盐噪声和泊松噪声。最后,我用 `cv2.add()` 函数将噪声添加到原始图像中,并显示原始图像和三种噪声图像。
你可以根据自己的需要调整示例代码中的参数,例如均值、方差、椒盐噪声比例和泊松噪声参数等。
阅读全文