用opencv给图片加高斯噪声,瑞利噪声,伽马噪声,指数噪声,均匀噪声,脉冲噪声,并且将噪声图放在同一块画布上
时间: 2024-11-04 22:10:00 浏览: 54
WNNM_code.zip_WNNM_code_WNNM去噪_WNNM图像去噪_图像去噪_高斯噪声用wnnm
5星 · 资源好评率100%
在OpenCV中添加噪声到图像通常涉及以下几个步骤:
1. **高斯噪声**:这是最常见的随机噪声类型,可以使用`cv2.GaussianBlur()`函数先对原图进行模糊处理,然后将随机值添加到像素值上。示例代码:
```python
import cv2
img = ... # 加载原始图像
noisy_img = img + np.random.normal(0, sigma, img.shape)
```
其中sigma决定了噪声的强度。
2. **瑞利噪声**:这种噪声模拟的是电子设备信号传输过程中的噪声。你可以生成正态分布的噪声,然后乘以特定的因子(如`sqrt(img)`)来保持图像亮度的一致性。
```python
noise_rician = np.sqrt(np.abs(noisy_img)) * np.random.randn(*img.shape) / (2 * sigma)
```
3. **伽马噪声**:这种噪声通过调整像素值的分布来模拟人眼感知的非线性响应。通过设置不同的伽马系数,可以改变图像的暗部和亮部对比度。
```python
gamma = ... # 设置伽马值
noisy_img = pow(img / 255.0, gamma) * 255
```
4. **指数噪声**:这是一种幂律分布噪声,可以使用类似瑞利噪声的方式来生成。
```python
noise_exponential = img * np.random.gamma(shape, scale, img.shape)
```
5. **均匀噪声**:所有像素都按照同样的概率增加相同的随机量。
```python
uniform_noise = np.random.randint(-max_val, max_val+1, img.shape).astype(img.dtype)
noisy_img = img + uniform_noise
```
6. **脉冲噪声**:一种局部的、跳跃式的噪声,例如椒盐噪声(salt and pepper),可以在像素值上加上随机的二值变化。
```python
prob = ... # 惰性概率
noisy_img[pixel_values > 127] += np.random.choice([-max_val, max_val], p=[prob, 1-prob])
```
为了展示这些噪声效果在同一张图像上,你可以创建一个新的大图像,分别将上述噪声应用到子区域,然后拼接在一起。
阅读全文