Python 给一个5×5的二维矩阵添加高斯噪声,并说明每句代码含义
时间: 2024-02-23 17:58:47 浏览: 134
好的,以下是实现该功能的Python代码及解释:
```python
import numpy as np
from scipy.stats import norm
def add_gaussian_noise(image, mean, std):
row, col = image.shape
# 根据高斯分布生成随机噪声
noise = np.random.normal(mean, std, (row, col))
# 将噪声添加到原始图像上
noisy_image = np.clip(image + noise, 0, 255).astype('uint8')
return noisy_image
# 创建一个5×5的随机矩阵作为原始图像
image = np.random.rand(5, 5) * 255
# 添加均值为0,标准差为50的高斯噪声
noisy_image = add_gaussian_noise(image, 0, 50)
```
解释:
1. `import numpy as np`:导入NumPy库并取别名为`np`,用于处理矩阵数据。
2. `from scipy.stats import norm`:从SciPy库中导入`norm`,用于生成高斯分布随机数。
3. `def add_gaussian_noise(image, mean, std):`:定义一个函数`add_gaussian_noise`,接受三个参数:原始图像`image`、高斯分布的均值`mean`、高斯分布的标准差`std`。
4. `row, col = image.shape`:获取原始图像的行数和列数。
5. `noise = np.random.normal(mean, std, (row, col))`:使用NumPy的`random.normal`函数生成均值为`mean`,标准差为`std`,形状为`(row, col)`的高斯分布随机数矩阵。
6. `noisy_image = np.clip(image + noise, 0, 255).astype('uint8')`:将原始图像和随机噪声相加,并使用`np.clip`函数将结果限制在0到255之间,以避免像素值越界。最后使用`astype('uint8')`将结果转换为无符号8位整数类型,以便于显示和保存。
7. `image = np.random.rand(5, 5) * 255`:创建一个5×5的随机矩阵作为原始图像,像素值范围为0到255。
8. `noisy_image = add_gaussian_noise(image, 0, 50)`:调用`add_gaussian_noise`函数并传入原始图像`image`,均值为0,标准差为50,生成带有高斯噪声的图像。
阅读全文