Как контролировать контраст изображения на основе значений HSV / RGB

Мне было интересно, можно ли изменить контраст изображения, изменив его значения RGB, HSV (или аналогичные).

В настоящее время я делаю следующее, чтобы возиться с яркостью, насыщенностью и оттенком (на Python):

import numpy as np
from PIL import Image as img
import colorsys as cs

#Fix colorsys rgb_to_hsv function
#cs.rgb_to_hsv only works on arrays of shape: [112, 112,255] and non n-dimensional arrays
rgb_to_hsv = np.vectorize(cs.rgb_to_hsv)
hsv_to_rgb = np.vectorize(cs.hsv_to_rgb)

def luminance_edit(a, h, s, new_v):
    #Edits V - Luminance

    #Changes RGB based on new luminance value
    r, g, b = hsv_to_rgb(h, s, new_v)

    #Merges R,G,B,A values to form new array
    arr = np.dstack((r, g, b, a))

    return arr

У меня есть отдельная функция для преобразования RGB и HSV. A - альфа-канал, h - оттенок, s - насыщенность, а new_v - новое значение V (яркость).

Можно ли отредактировать контраст на основе этих значений, или я что-то упустил?

Изменить: у меня есть отдельная функция, которая импортирует изображения, извлекает значения RGBA и преобразует их в HSL / HSV. Назовем эту функцию x.

В предоставленном коде (функция y) мы берем оттенок (h), насыщенность (s), яркость (v) и альфа-канал (a) - значения HSL, предоставленные функцией x некоторого изображения.

Код редактирует значение V или яркость. На самом деле он не редактирует контраст, это просто пример того, чего я хочу достичь. Используя приведенные выше данные (HSL / HSV / RGB) или аналогичные, мне было интересно, можно ли изменить контрастность изображения.


person John Doe    schedule 23.09.2018    source источник
comment
Кажется, ваш код не загружает изображения или не вызывает вашу luminance_edit() функцию? В вашем описании говорится, что вы планируете возиться с яркостью и насыщенностью, что совсем не помогает. В чем заключается вопрос, и чего пытается достичь ваш неполный код и какой аспект не работает?   -  person Mark Setchell    schedule 23.09.2018
comment
Решил ли мой ответ вашу проблему? Если да, то примите его в качестве своего ответа, щелкнув пустую галочку / галочку рядом с подсчетом голосов. Если нет, скажите, что не сработало, чтобы я или кто-то еще мог вам помочь. Спасибо. meta.stackexchange. ru / questions / 5234 /   -  person Mark Setchell    schedule 02.10.2018


Ответы (1)


Мне очень трудно понять, что вы пытаетесь сделать в своем вопросе, поэтому вот «удар в темноте», что вы пытаетесь увеличить контраст изображения без изменения цвета.

Вы правы, переходя от цветового пространства RGB к HSL / HSV, так что вы можете регулировать яркость, не влияя на насыщенность и оттенок. Итак, я в основном взял канал яркости мрачного изображения и нормализовал его так, чтобы теперь яркость охватывала весь диапазон яркости от 0 до 255, и вернул его обратно в изображение. Я начал с этого изображения:

введите описание изображения здесь

И в итоге получилось вот это:

введите описание изображения здесь

person Mark Setchell    schedule 24.09.2018