2014-11-05 4 views
0

У меня есть изображение с таким шумным фоном, как это (взорван, каждый квадрат - это пиксель). Я пытаюсь нормализовать черный фон, чтобы полностью заменить цвет.Python PIL сравнить цвета

Это то, что я имею в виду (псевдо-код):

for pixel in image: 
    if is_similar(pixel, (0, 0, 0), threshold): 
     pixel = (0, 0, 0) 

Какие функции позволила бы мне сравнить два значения цвета, чтобы соответствовать в пределах определенного порога?

+1

Посмотрите на http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color, используя формулу яркости по существу дает значение каждого пикселя в оттенках серого, таким образом, позволяя вы сравниваете пиксели с порогом только в 1 измерении. –

+1

Просмотрите статью [Color Difference] (http://en.wikipedia.org/wiki/Color_difference) Wikipedia для нескольких подходов к определению того, как похожи два цвета. Самый простой ответ: обработать каждый цвет как трехмерную координату и использовать формулу Пифагора, чтобы найти расстояние между ними. – Kevin

ответ

2

В итоге я использовал формулу воспринимаемой яркости от this answer. Он отлично работал.

THRESHOLD = 18 

def luminance(pixel): 
    return (0.299 * pixel[0] + 0.587 * pixel[1] + 0.114 * pixel[2]) 


def is_similar(pixel_a, pixel_b, threshold): 
    return abs(luminance(pixel_a) - luminance(pixel_b)) < threshold 


width, height = img.size 
pixels = img.load() 

for x in range(width): 
    for y in range(height): 
     if is_similar(pixels[x, y], (0, 0, 0), THRESHOLD): 
      pixels[x, y] = (0, 0, 0) 
Смежные вопросы