Алгоритм проверки сходства цветов - PullRequest
73 голосов
/ 22 марта 2011

Я ищу алгоритм, который сравнивает два цвета RGB и генерирует значение их сходства (где сходство означает «сходство в отношении среднего восприятия человеком»).

Есть идеи?

РЕДАКТИРОВАТЬ :

Поскольку я больше не могу отвечать, я решил поставить свое «решение» в качестве редактирования вопроса.

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

Поскольку это было приложение для iPhone, я работал с target-C, и его реализация более или менее представляет собой матрицу, представляющую таблицу ниже, которая показываетрасстояния между цветами.

enter image description here

Ответы [ 6 ]

53 голосов
/ 22 марта 2011

RGB-расстояние в евклидовом пространстве не очень «похоже на среднее человеческое восприятие»

Вы можете использовать YUV цветовое пространство, оно учитывает этот фактор:

enter image description here

Для этой цели вы также можете использовать цветовое пространство CIE .

РЕДАКТИРОВАТЬ:

Я будуОтметим, что цветовое пространство YUV является недорогим приближением, которое можно вычислить с помощью простых формул.Но это не воспринимается равномерно.Однородное восприятие означает, что изменение одного и того же значения цветового значения должно привести к изменению примерно одинаковой визуальной значимости.Если вам нужна более точная и строгая метрика, вы обязательно должны рассмотреть цветовое пространство CIELAB или другое воспринимаемое однородное пространство (даже если нет простых формул для преобразования).

15 голосов
/ 08 сентября 2014

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

Однако выполнить такое сравнение довольно дорого в вычислительном отношении:

  1. RGB to XYZ для обоих цветов
  2. XYZ to LAB для обоих цветов
  3. Diff = DeltaE94(LABColor1,LABColor2)

Формулы (псевдокод):

11 голосов
/ 22 марта 2011

Человеческое восприятие по цветности слабее, чем интенсивность.

Например, в коммерческом видео цветовые пространства YCbCr / YPbPr (также называемые Y'UV) уменьшают разрешение информации о цветности, но сохраняют яркость (Y).В цифровом видеосжатии, например 4: 2: 0 и 4: 2: 2, уменьшается битрейт цветности из-за относительно более слабого восприятия.

Я считаю, что вы можете рассчитать функцию расстояния, дающую более высокий приоритет над яркостью (Y)и меньший приоритет по сравнению с цветностью.

Кроме того, при низкой интенсивности человеческое зрение практически черно-белое.Таким образом, функция приоритета является нелинейной в том смысле, что для низкой яркости (Y) цвет и цвет все меньше и меньше.

Более научные формулы: http://en.wikipedia.org/wiki/Color_difference

7 голосов
/ 03 декабря 2016

Здесь есть отличная запись на тему цветовых расстояний: http://www.compuphase.com/cmetric.htm

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

typedef struct {
   unsigned char r, g, b;
} RGB;

double ColourDistance(RGB e1, RGB e2)
{
  long rmean = ( (long)e1.r + (long)e2.r ) / 2;
  long r = (long)e1.r - (long)e2.r;
  long g = (long)e1.g - (long)e2.g;
  long b = (long)e1.b - (long)e2.b;
  return sqrt((((512+rmean)*r*r)>>8) + 4*g*g + (((767-rmean)*b*b)>>8));
}
3 голосов
/ 23 марта 2011

Цветовое восприятие не евклидово. Любая формула расстояния будет одновременно достаточно хорошей и ужасной. Любая мера, основанная на евклидовом расстоянии (RGB, HSV, Luv, Lab, ...), будет достаточно хороша для похожих цветов, показывая, что аква близка к чирку. Но для не близких значений это становится произвольным. Например, красный ближе к зеленому или синему?

От Чарльза Пойнтона Цвет FAQ :

Системы XYZ и RGB далеки от проявляя единообразие восприятия. Нахождение преобразования XYZ в достаточно равномерно воспринимаемое пространство потребляется десятилетие или более в CIE и, в конце концов, ни одна система не могла быть согласованным.

0 голосов
/ 22 марта 2011

Сходство цветов в кубе RGB измеряется евклидовым расстоянием (используйте формулу Пифагора).

РЕДАКТИРОВАТЬ: Если подумать, это должно быть верно и для большинства других цветовых пространств.

...