如何在具有指定错误概率的图像中添加合成噪声

How to add synthetic noise in an image with specified error probability

我想在图像中创建合成噪声。我将如何降低带有错误的黑白图像,每个点都有独立的错误概率。我将如何在 Python 中做到这一点(例如错误概率 = 0.0011)?

这是一个示例程序,使用 Pillow 库

简单地将 "degraded" 像素替换为黑色
from PIL import Image
import random

img = Image.open('text.png')
pixels = img.load()

for x in range(img.size[0]):
    for y in range(img.size[1]):
        if random.random() < 0.011:
            pixels[x,y] = 0 # only 1 number given since the image is grayscale

img.save('text_degraded.png')

我已将概率增加到 0.011 以使其更加引人注目,这是输出

这是使用 OpenCV + skimage.util.random_noise 的矢量化方法。您可以尝试 localvarpeppers&pspeckle 等噪声模式以获得所需的结果。您可以使用 amount 参数设置噪声的比例。这是一个使用 s&pamount=0.011:

的例子

import cv2
import numpy as np
from skimage.util import random_noise

# Load the image
image = cv2.imread('1.png', 0)

# Add salt-and-pepper noise to the image
noise = random_noise(image, mode='s&p', amount=0.011)

# The above function returns a floating-point image in the range [0, 1]
# so need to change it to 'uint8' with range [0,255]
noise = np.array(255 * noise, dtype=np.uint8)

cv2.imshow('noise',noise)
cv2.imwrite('noise.png',noise)
cv2.waitKey()