Заменить цветовые значения на изображении случайным шумом - PullRequest
0 голосов
/ 07 апреля 2019

Я нашел что-то достаточно близкое к тому, что я хочу сделать здесь: Python: PIL заменяет один цвет RGBA

Однако в моем сценарии у меня есть изображения, которые изначально были в оттенках серого с цветоманнотации добавлены к изображению (рентген с заметками в цвете).Я хотел бы заменить любой пиксель, который не является оттенками серого, случайным шумом.Моя основная проблема - заменить значения шумом, а не одним цветом.

Редактировать: я выяснил случайную часть шума, теперь просто пытаюсь выяснить, как отделить цветные пиксели от пикселей, которые изначально были в оттенках серого..

from PIL import Image
import numpy as np

im = Image.open('test.jpg')

data = np.array(im)   # "data" is a height x width x 3 numpy array
red, green, blue = data.T # Temporarily unpack the bands for readability


# Replace white with random noise...
white_areas = (red == 255) & (blue == 255) & (green == 255)
Z = random.random(data[...][white_areas.T].shape)
data[...][white_areas.T] = Z

im2 = Image.fromarray(data)
im2.show()

Ответы [ 2 ]

0 голосов
/ 23 июля 2019

Вы можете использовать это Pixel Editing python module

from PixelMenu import ChangePixels as cp
im = Image.open('test.jpg')
grayscalergb=(128, 128, 128) #RGB value of gray in your image
noise=(100,30,5) #You can adjust the noise based upon your requirements
outputimg=cp(im, col=grayscalergb, col2=noise, save=False,tolerance=100) #Adjust the tolerance until you get the right amount of noise in your image

Также:

Я бы посоветовал вам использовать изображения в формате png вместо изображений jpg, потому что JPEG разработан со сжатием, каждый раз, когда вы загружаете изображение, меняются значения RGB, что затрудняет нормальную работу вашего кода

0 голосов
/ 08 апреля 2019

Вы можете попробовать

col_areas = np.logical_or(np.not_equal(red, blue), np.not_equal(red, green))
...