Вычислить кажущуюся разницу в цвете между двумя значениями цвета HSI

У меня есть два значения цвета в HSI (насыщенность и интенсивность оттенка), и я хочу число, которое представляет визуальную разницу между двумя цветами. Оттенок-это число от 0 до 360 включительно. Насыщенность от 0 до 1, а интенсивность от 0 до 1.

рассмотрим, например, красный и синий при насыщенности 100% и интенсивности 100%. на этом веб-сайте есть способ отображения цвета, введя следующий текст.

красный: ВПГ 0, 100%, 100%

синий: hsv 240, 100%, 100%

enter image description here

ясно, что это два очень разных цвета, и поэтому простой способ, которым я мог бы попытаться рассчитать разницу между цветами, - использовать компонент оттенка и рассчитать абсолютную разницу в оттенке, которая будет 120 (360-240), так как 360 также равно 0 в оттенке.

проблема возникает там, где насыщенность или интенсивность очень темная или светлая, рассмотрим очень темно-красный и синий.

темно-красный: ВПГ 0, 100%, 20%

темно-синий: hsv 240, 100% 20%

enter image description here

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

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

должно быть возможно иметь функцию diff, где x=diff(a,b) и y=diff (c,d) дает x и y, и я могу использовать x и y для сравните различия, чтобы найти самый разный цвет или наименее другой цвет.

2 ответов


WCAG2.0 и 1.0 рекомендации ссылаются на различные уравнения восприятия разницы в цвете:

  1. контрастность (http: //www.w3.org/TR/2008/REC-WCAG20-20081211/Overview.html#contrast-ratiodef)

  2. разница яркостью и 3. цвет разница (http://www.w3.org/TR/AERT#color-contrast).

Я попробовал метод Delta-e (http: //colormine.org/delta-e-calculator/) но он квазиметрический, поэтому измерение разницы может меняться в зависимости от порядка передачи двух цветов. Если в вашем примере вы ожидаете,что diff(a,b) всегда будет равен diff(b, a), то это не то, что вы хотите(могут быть разные алгоритмы под этим именем, которые не являются квазиметрическими, но я не заглядывал в него за этот сайт).

Я думаю, что метрика разницы в цвете ближе всего к соответствию моим ожиданиям разницы в цвете измерения. Для вашего примера это даст, что diff(a,b) > diff (c,d)

вы можете проверить его для себя, используя инструмент на этом сайте:http://www.dasplankton.de/ContrastA/


общий ответ, похоже, то, что сказал Дэвид Ван Дрисше, чтобы использовать Delta E. я нашел здесь некоторый Java-код:https://github.com/kennyliou/GAI

Это ответ на вопрос, может быть, не лучший ответ.