如何在具有指定错误概率的图像中添加合成噪声
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
的矢量化方法。您可以尝试 localvar
、pepper
、s&p
和 speckle
等噪声模式以获得所需的结果。您可以使用 amount
参数设置噪声的比例。这是一个使用 s&p
和 amount=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()
我想在图像中创建合成噪声。我将如何降低带有错误的黑白图像,每个点都有独立的错误概率。我将如何在 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
的矢量化方法。您可以尝试 localvar
、pepper
、s&p
和 speckle
等噪声模式以获得所需的结果。您可以使用 amount
参数设置噪声的比例。这是一个使用 s&p
和 amount=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()