2016-01-05 3 views
2

Я хотел создать соотношение между 0-1, как «красочным» цветом есть, красочный я имею в виду:Расчета, как «красочный» цвет является

  • черных цвета имеют отношение 0 (нет света)
  • белых цветов не имеют отношения 0 (без насыщения)
  • полностью насыщенный/освещенного цветы имеют отношение 1

я пытался путем преобразования цвета к HSV цветовому и вычислению отношения как:

ratio = (color.value/100) * (color.saturation/100) 

Это работает несколько, но он чувствует, как кривая является неправильным, например

HSV(hue=0, saturation=80, value=80)

enter image description here

только дает соотношение 0,64 но выглядит очень близко к полностью насыщенный/освещенный цвет.

Возможно, мне нужно каким-то образом создать «непринужденность» значений? Я подумал о том, чтобы учитывать человеческое восприятие цветов (используя LAB или YUV colorspaces), но я не думаю, что это необходимо здесь, но я могу ошибаться.

+0

Попробуйте применить гамма-коррекцию и повторить попытку. –

ответ

4

Определение насыщенности от HSV не то, что вы хотите, поскольку оно не компенсирует легкость цвета.

От the Wikipedia article on Colorfulness:

[воспринимаемая насыщенность] является долей чистого хроматического цвета в общем цветовом ощущении.

Formula for perceived saturation

, где S AB является насыщенность, L * светлота и С * аб является насыщенность цвета.

Это определение использует L * и С * аЬ компоненты CIELAB colorspace. Я предполагаю, что для вашего приложения вы можете использовать Lab colorspace вместо этого. Тогда ваш код будет выглядеть следующим образом:

function perceived_saturation(L, a, b) 
    return 100 * sqrt(a*a + b*b)/sqrt(L*L + a*a + b*b) 

Для примера цвета RGB = (204, 41, 41), это возвращает воспринимаемую насыщенность около 86%, при преобразовании цвета через путь RGB & Rightarrow; sRGB и rightarrow; Лаборатория

+0

спасибо именно то, что я искал! :) –

1

В качестве простого приближения вы можете использовать max(r,g,b)/255 - min(r,g,b)/255. Он имеет свойства, которые вы ищете, где что-либо на сером спектре между черным и белым имеет красочность 0, и только полностью освещенные цвета будут иметь красочность 1. Полностью насыщенный, но темный цвет будет находиться между ними, например. (128, 0, 0) будет иметь яркость ~ 0,5.

Смежные вопросы