def add_noise(img, noise_type='s&p', SNR=0.1, prob=0.5): """ img: PIL.Image,输入的图像 noise_type: str,噪声类型,可选的有:'gaussian', 'poisson', 's&p',默认为's&p' SNR: float,信噪比,取值范围为[0, 1],默认为0.1 prob: float,噪声添加的概率,取值范围为[0, 1],默认为0.5 """ img = np.array(img) h, w, c = img.shape # 生成噪声 if noise_type == 'gaussian': noise = np.random.normal(0, 1, (h, w, c)) * 255 * (1 - SNR) elif noise_type == 'poisson': noise = np.random.poisson(255 * (1 - SNR), (h, w, c)) / (255 * (1 - SNR)) elif noise_type == 's&p': noise = np.zeros((h, w, c)) # 添加椒盐噪声 for i in range(h): for j in range(w): rand = random.random() if rand < prob: noise[i, j, :] = 0 elif rand > 1 - prob: noise[i, j, :] = 255 else: noise[i, j, :] = img[i, j, :] # 将图像和噪声相加 img_noise = img + noise img_noise = np.clip(img_noise, 0, 255).astype(np.uint8) img_noise = Image.fromarray(img_noise) return img_noise
时间: 2023-06-14 20:06:57 浏览: 146
w4_4.rar_W4_snr adaptive
这段代码实现了在给定的图像上添加噪声的功能。其中,噪声类型可以选择高斯噪声、泊松噪声和椒盐噪声。信噪比(SNR)是一个衡量信号质量的指标,它表示信号与噪声的比值。prob参数是椒盐噪声的概率,在0到1之间取值,它表示在每个像素点上添加椒盐噪声的概率。
具体实现上,这段代码首先将输入的PIL图像转换为numpy数组,然后根据噪声类型和信噪比生成对应的噪声。对于椒盐噪声,它在每个像素点上根据概率随机选择是否添加椒盐噪声。最后,将图像和噪声相加,并使用np.clip函数将像素值限制在0到255之间,最后再将numpy数组转换回PIL图像并返回。
阅读全文