叠加零均值高斯噪声python
时间: 2023-11-15 10:59:50 浏览: 165
叠加零均值高斯噪声是指在图像处理中,为了模拟图像在传输或者采集过程中的噪声,向原始图像中添加高斯分布的随机噪声。在Python中,可以使用numpy库中的random模块生成高斯噪声,并使用skimage库中的img_as_float函数将图像转换为浮点型,最后使用clip函数将图像像素值限制在0到1之间。为了通用的处理,最好使用np.random.normal生成高斯噪声。具体实现可以参考引用中的代码。
相关问题
python图像高斯噪声
### 实现 Python 中向图像添加高斯噪声
为了在 Python 中实现对图像添加高斯噪声的功能,可以利用 NumPy 库来生成服从正态分布的随机数,并将其叠加到原始图像上。具体方法如下:
首先,导入必要的库:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
```
定义一个用于添加高斯噪声的函数 `add_gaussian_noise`,该函数接收两个参数:待处理的图像以及均值和方差组成的元组 `(mean, sigma)` 表示期望的高斯分布特性[^3]。
```python
def add_gaussian_noise(image, mean=0, sigma=25):
"""
向给定的灰度或彩色图像添加指定参数的高斯噪声
参数:
image (numpy.ndarray): 输入图像数组.
mean (float): 噪声平均强度,默认为0.
sigma (float): 噪声的标准偏差,默认为25.
返回:
noisy_image (numpy.ndarray): 加入高斯噪声后的图像.
"""
# 获取输入图像尺寸
row, col, ch = image.shape if len(image.shape) == 3 else (*image.shape, 1)
# 创建具有相同大小的零矩阵作为临时容器
gauss = np.random.normal(mean, sigma, (row, col))
# 对于彩色图像是三通道,则重复上述过程三次分别作用于RGB三个分量;
# 若是单通道则直接相加即可。
if ch > 1:
gauss = gauss.reshape(row, col, 1).repeat(ch, axis=-1)
# 将产生的高斯噪声与原图按元素求和得到含噪新图
noisy_image = image + gauss
# 确保最终结果仍在合理范围内(0~255之间),并转换回无符号整型
noisy_image = np.clip(noisy_image, 0, 255).astype(np.uint8)
return noisy_image
```
读取测试图片并调用此函数查看效果:
```python
# 读取一张测试图片
original_img = cv2.imread('example.jpg')
# 调用自定义函数添加高斯噪声
noisy_img = add_gaussian_noise(original_img.copy(), mean=0, sigma=25)
# 展示对比效果图
plt.figure(figsize=(10, 5))
plt.subplot(121), plt.imshow(cv2.cvtColor(original_img, cv2.COLOR_BGR2RGB)), plt.title('Original Image')
plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(cv2.cvtColor(noisy_img, cv2.COLOR_BGR2RGB)), plt.title('Noisy Image with Gaussian Noise')
plt.xticks([]), plt.yticks([])
plt.show()
```
这段代码展示了如何创建一个简单的工具函数来模拟现实世界中的信号干扰情况——即通过引入人为控制水平的随机波动(这里指代的是符合特定统计特性的高斯白噪音),从而帮助训练更加鲁棒的人工智能模型或是评估现有算法面对不完美条件下的表现能力[^2]。
高斯扰动python
### 实现高斯扰动
在 Python 中应用高斯扰动通常涉及向数据集或图像添加基于正态分布的随机噪声。这可以通过多种方式完成,具体取决于应用场景。
对于图像处理来说,`skimage` 库提供了便捷的方法来实现这一目标[^3]:
```python
from skimage.util import random_noise
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
# 加载一张图片作为例子
img = Image.open('example.jpg')
img_array = np.array(img)
# 添加高斯噪声
noisy_img = random_noise(img_array, mode='gaussian', var=0.01)
# 显示原始图与加噪后的效果对比
fig, axes = plt.subplots(1, 2, figsize=(8, 4))
axes[0].imshow(img)
axes[0].set_title("Original")
axes[1].imshow(noisy_img)
axes[1].set_title("Gaussian Noise Added")
for ax in axes:
ax.axis('off')
plt.tight_layout()
plt.show()
```
上述代码展示了如何利用 `random_noise()` 函数轻松地为输入图像引入指定方差 (`var`) 的高斯白噪声。
如果目的是对数值型数据而非图像施加高斯扰动,则可以借助 NumPy 来生成符合特定均值和标准偏差的随机数序列,并将其叠加到原有数据之上[^2]:
```python
mu, sigma = 0, 0.1 # 均值μ设为零;σ表示标准差
data_with_gaussian_perturbation = original_data + np.random.normal(mu, sigma, size=original_data.shape)
```
这段脚本说明了怎样创建具有给定参数 μ 和 σ 的高斯分布样本,并将这些样本加入到待处理的数据集中去,从而达到增加微小波动的效果。
阅读全文
相关推荐















