Обнаружение Нейтральности Цвета От HSL - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть ряд значений HSL, которые я хочу классифицировать с точки зрения:

  • нейтральности цвета (т. Е. Сгруппировать все нейтральные цвета, такие как черный / серый / белый / бежевый / коричневый, исгруппируйте все ненейтральные цвета, такие как желтый / синий / зеленый / красный, в отдельную категорию)
  • яркость

Последнее относительно просто, поскольку я могу взять значение L иопределите> 50% как светлое и <50% как темное. Однако у меня возникают проблемы с определением правила, которое бы классифицировало значения HSL по их нейтральности цвета - каков наилучший способ сделать это? </p>

1 Ответ

1 голос
/ 08 ноября 2019

Я собрал несколько цветовых диаграмм, составленных HSL, HSV и LCH (цилиндрический LAB), чтобы увидеть, какой показатель лучше для «нейтральности цвета». Насыщенность / цветность увеличивается сверху вниз, яркость / значение увеличивается слева направо, а цвет увеличивается по диагонали вверх слева направо внутри каждого квадрата 4 * 4.

HSL
HSL colour chart

HSV
HSV colour chart

LCH
LCH colour chart

Конечно, решать вам, но я думаю, что HSL S, HSV S и LCH C, похоже, вполне соответствуют «нейтральности цвета».


Была небольшая идея. Для меня это выглядит примерно так:

HSL colour chart with red arrows showing 'neutrality' gradient

Мы можем реализовать версию этого с некоторой простой арифметикой.

convert xc:blue xc:darkRed xc:red xc:pink xc:brown xc:gray \
  -colorspace HSL -format '%[fx:(abs(b-0.5)+(1-g))/1.5]\n' info:-
# 5.08634e-06
# 0.151629
# 5.08634e-06
# 0.250985
# 0.333272
# 0.670588

Или применить его к таблице цветов HSL

convert comp-hsl.png -colorspace HSL \
  -channel red -fx "(abs(b-0.5)+(1-g))/1.5" -channel R -separate \
  hsl4.png

HSL colour chart 'netrality' gradient in grey scale

...