编写程序,在给定图像上分别添加高斯噪声、椒盐噪声、以及高斯-椒盐混合噪声 ,并将含噪图像保存(噪声的参数自行)。列出处理前后图像,并给出添加噪声后图像不同效果的分析说明。(主要代码请加注释)
时间: 2024-10-10 07:16:11 浏览: 48
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
在Python中,我们可以使用PIL(Python Imaging Library)库来处理图像,同时结合numpy进行数值计算。这里是一个简单的示例,我们将使用OpenCV(cv2)库,它在图像处理方面非常强大。
首先,确保已安装`opencv-python`和`Pillow`库。如果没有,可以使用pip安装:
```bash
pip install opencv-python pillow
```
接下来,我们编写一段代码,实现对图像添加三种类型的噪声:
```python
import cv2
import numpy as np
from PIL import Image
# 加载图像
img = cv2.imread('original_image.jpg', cv2.IMREAD_GRAYSCALE) # 灰度图便于操作
assert img is not None, "Image loading failed!"
# 高斯噪声
def add_gaussian_noise(img, sigma=0.5):
noise = np.random.normal(0, sigma, img.shape)
noisy_img = img + noise
return np.clip(noisy_img, 0, 255).astype(np.uint8)
# 椒盐噪声
def add_salt_pepper_noise(img, p=0.05):
row, col = img.shape
s_vs_p = 0.5 # 权重比例,s指salt,p指pepper
amount = p * s_vs_p * row * col # 生成椒盐点的数量
amount_sp = int(amount * 2) # 因为有些会被两次选择
salt_mask = np.zeros(img.shape, np.bool)
pepper_mask = np.zeros(img.shape, np.bool)
while amount_sp:
i = np.random.randint(row)
j = np.random.randint(col)
salt_mask[i, j] = True
pepper_mask[i, j] = True
amount_sp -= 1
noisy_img = img.copy()
noisy_img[salt_mask] = 255
noisy_img[pepper_mask] = 0
return noisy_img
# 高斯-椒盐混合噪声
def add_gauss_salt_pepper_mixture(img, gauss_sigma=0.5, sp_prob=0.05):
noisy_img = add_gaussian_noise(img, gauss_sigma)
mixed_noisy_img = add_salt_pepper_noise(noisy_img, sp_prob)
return mixed_noisy_img
# 添加噪声并保存
noisy_img_gaussian = add_gaussian_noise(img)
noisy_img_salt_pepper = add_salt_pepper_noise(img)
noisy_img_mixed = add_gauss_salt_pepper_mixture(img)
# 将图像转换回PIL格式以便显示
gaussian_pil = Image.fromarray(cv2.cvtColor(noisy_img_gaussian, cv2.COLOR_GRAY2RGB))
salt_pepper_pil = Image.fromarray(cv2.cvtColor(noisy_img_salt_pepper, cv2.COLOR_GRAY2RGB))
mixed_pil = Image.fromarray(cv2.cvtColor(noisy_img_mixed, cv2.COLOR_GRAY2RGB))
# 保存图像
gaussian_pil.save("noisy_gaussian.jpg")
salt_pepper_pil.save("noisy_salt_pepper.jpg")
mixed_pil.save("noisy_mixed.jpg")
# 分析说明:
# - 高斯噪声:图像细节变得模糊,整体色彩保留。
# - 椒盐噪声:部分像素变为黑白,破坏了连续性,造成斑块状的效果。
# - 高斯-椒盐混合:结合了上述两种噪声,既有局部模糊又有随机斑点,更接近真实世界中的噪声。
阅读全文