Je veux créer un bruit synthétique dans une image. Comment vais-je dégrader l'image en noir et blanc avec des erreurs, avec une probabilité d'erreur indépendante à chaque point. Comment vais-je faire cela en Python (par exemple, probabilité d'erreur = 0,0011) ?
Réponses
Trop de publicités?Voici une approche vectorielle utilisant OpenCV +. skimage.util.random_noise
. Vous pouvez expérimenter des modes de bruit tels que localvar
, pepper
, s&p
y speckle
pour obtenir le résultat souhaité. Vous pouvez définir la proportion de bruit avec le bouton amount
paramètre. Voici un exemple utilisant s&p
con 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()
Voici un exemple de programme remplaçant simplement les pixels "dégradés" par du noir, en utilisant la bibliothèque Pillow
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')
J'ai augmenté la probabilité à 0,011 pour la rendre plus perceptible, voici le résultat.