Вычислить, как люди воспринимают сходство между разными цветами

Я работаю над сайтом, где пользователи могут описывать физический объект, используя (среди прочего) любой цвет в диапазоне rgb 0-255. Мы предлагаем несколько упрощенных палитр для удобного нажатия, но полное цветовое колесо является обязательным.

За кулисами один из процессов сравнивает два пользовательских описания объекта и оценивает их сходство.

What I ' Я пытаюсь получить оценку того, насколько похожи два цвета с точки зрения человеческого восприятия . По сути, алгоритм должен определить, могут ли 2 человека, выбирающие 2 разных цвета, описывать один и тот же объект. Таким образом, Светло-Красный-> Красный должен быть 100%. Большинство оттенков серого будут на 100% совпадать друг с другом и т. Д., Но красный-> зеленый определенно не подходит.

Чтобы получить достойный взгляд на то, как были алгоритмы работая, я построил градации серого и 3 интенсивности каждого оттенка по сравнению с каждым другим цветом в наборе и указал отсутствие совпадения (0%) с черным, визуально идентичное (100%) с белым и оттенками серого, чтобы указать промежуточные значения.

Мой первый (очень упрощенный подход) заключался в том, чтобы просто рассматривать значения RGB как координаты в цветном кубе и вычислять расстояние (величину вектора) между ними.

Это устраняет ряд проблем, связанных с тем, что черный -> 50% серый цвет находится на большем расстоянии, чем (скажем) черный -> 50% синий. после проведения сотен сравнений и запроса обратной связи это, похоже, не соответствует человеческому восприятию (показано ниже)

Method 1

Метод 2 преобразовал значения RGB в HSV . Затем я получил оценку, основанную на оттенке 80%, а остальные 20% - на Sat / Lum. На данный момент это кажется лучшим методом, но он все же дает некоторые странные совпадения

Method 2

Метод 3 был попыткой гибрида - были рассчитаны значения HSL, но окончательная оценка была основана на расстоянии между двумя цветами в пространстве цветового цилиндра HSL. (как в трехмерных полярных координатах.)

Method 3

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

Итак, мой вопрос:

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

Решение (Delta E 2000): Используя предложения, представленные ниже, я реализовал компаратор Delta E 2000 . Мне пришлось настроить значения веса, чтобы они были довольно большими - я не ищу цвета, которые незаметно отличаются, но которые не сильно отличаются. На случай, если кому-то интересно, итоговый график приведен ниже ...

DeltaE2000

10
задан Basic 12 April 2015 в 01:40
поделиться