分析图像的噪声分布代码
时间: 2024-05-15 20:12:29 浏览: 134
以下是一些常用的图像噪声分布及其对应的代码实现:
1. 高斯分布噪声
高斯分布噪声是最常见的一种噪声类型,也是最容易处理的一种。它的数学模型为:
$$
p(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}
$$
其中,$\mu$ 为均值,$\sigma$ 为标准差。生成高斯分布噪声的代码实现如下:
```python
import numpy as np
def add_gaussian_noise(img, mean=0, std=1):
row, col, ch = img.shape
noise = np.random.normal(mean, std, (row, col, ch))
noisy_img = img + noise
noisy_img = np.clip(noisy_img, 0, 255).astype(np.uint8)
return noisy_img
```
2. 椒盐噪声
椒盐噪声是一种极端的噪声类型,它将图像中的一些像素点随机变成黑色或白色,模拟了图像失真的情况。生成椒盐噪声的代码实现如下:
```python
def add_salt_and_pepper_noise(img, noise_ratio=0.05):
row, col, ch = img.shape
noise = np.random.rand(row, col)
noisy_img = np.copy(img)
noisy_img[noise < noise_ratio/2] = 0
noisy_img[noise > 1 - noise_ratio/2] = 255
return noisy_img
```
3. 泊松噪声
泊松噪声是一种统计分布,它常用于模拟光子计数过程中的噪声。泊松噪声的数学模型为:
$$
p(k) = \frac{\lambda^k e^{-\lambda}}{k!}
$$
其中,$\lambda$ 为一个正数,通常表示每个像素点的平均强度。泊松噪声的代码实现如下:
```python
def add_poisson_noise(img, lam=10):
noisy_img = np.random.poisson(img * lam) / lam
noisy_img = np.clip(noisy_img, 0, 255).astype(np.uint8)
return noisy_img
```
4. 均匀分布噪声
均匀分布噪声是一种简单的随机噪声,它的数学模型为:
$$
p(x) =
\begin{cases}
\frac{1}{b-a}, & a \leq x \leq b \\
0, & otherwise
\end{cases}
$$
其中,$a$ 和 $b$ 分别为均匀分布噪声的下界和上界。生成均匀分布噪声的代码实现如下:
```python
def add_uniform_noise(img, low=0, high=255):
row, col, ch = img.shape
noise = np.random.uniform(low, high, (row, col, ch))
noisy_img = img + noise
noisy_img = np.clip(noisy_img, 0, 255).astype(np.uint8)
return noisy_img
```
以上代码实现仅供参考,具体实现方式可以根据需求进行调整。
阅读全文