编写程序,给图像添加高斯噪声、椒盐噪声、泊松噪声、瑞利噪声、指数分布噪声和均匀分布噪声。
时间: 2023-10-09 21:11:24 浏览: 173
您可以使用Python中的OpenCV库来给图像添加不同类型的噪声。下面是一个示例代码,演示如何添加高斯噪声、椒盐噪声、泊松噪声、瑞利噪声、指数分布噪声和均匀分布噪声。
```python
import numpy as np
import cv2
def add_gaussian_noise(image, mean=0, stddev=10):
noise = np.random.normal(mean, stddev, image.shape)
noisy_image = np.clip(image + noise, 0, 255).astype(np.uint8)
return noisy_image
def add_salt_pepper_noise(image, salt_prob=0.05, pepper_prob=0.05):
noisy_image = np.copy(image)
salt_coords = np.random.rand(*image.shape) < salt_prob
pepper_coords = np.random.rand(*image.shape) < pepper_prob
noisy_image[salt_coords] = 255
noisy_image[pepper_coords] = 0
return noisy_image
def add_poisson_noise(image):
noise = np.random.poisson(image.astype(np.float32))
noisy_image = np.clip(image + noise, 0, 255).astype(np.uint8)
return noisy_image
def add_rayleigh_noise(image, scale=50):
noise = np.random.rayleigh(scale, image.shape)
noisy_image = np.clip(image + noise, 0, 255).astype(np.uint8)
return noisy_image
def add_exponential_noise(image, scale=50):
noise = np.random.exponential(scale, image.shape)
noisy_image = np.clip(image + noise, 0, 255).astype(np.uint8)
return noisy_image
def add_uniform_noise(image, low=0, high=50):
noise = np.random.uniform(low, high, image.shape)
noisy_image = np.clip(image + noise, 0, 255).astype(np.uint8)
return noisy_image
# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
# 添加高斯噪声
gaussian_noise_image = add_gaussian_noise(image)
# 添加椒盐噪声
salt_pepper_noise_image = add_salt_pepper_noise(image)
# 添加泊松噪声
poisson_noise_image = add_poisson_noise(image)
# 添加瑞利噪声
rayleigh_noise_image = add_rayleigh_noise(image)
# 添加指数分布噪声
exponential_noise_image = add_exponential_noise(image)
# 添加均匀分布噪声
uniform_noise_image = add_uniform_noise(image)
# 显示原始图像和添加噪声后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Gaussian Noise Image', gaussian_noise_image)
cv2.imshow('Salt and Pepper Noise Image', salt_pepper_noise_image)
cv2.imshow('Poisson Noise Image', poisson_noise_image)
cv2.imshow('Rayleigh Noise Image', rayleigh_noise_image)
cv2.imshow('Exponential Noise Image', exponential_noise_image)
cv2.imshow('Uniform Noise Image', uniform_noise_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
请确保将代码中的'image.jpg'替换为您想要添加噪声的图像的路径。此代码将在窗口中显示原始图像和添加噪声后的图像。您可以根据需要调整噪声参数。