Первым шагом будет определение цветов, с которыми вы хотите сравнить.
Второй шаг - найти наименьшее расстояние от вашего цвета до одного из цветов, выбранных вами на предыдущем шаге. Чтобы измерить это расстояние, вам нужно евклидово пространство, в котором можно моделировать цвета.
Конечно, простым выбором будет пространство RGB
А расстояние между двумя цветами C 1 (r 1 , г 1 , b 1 ) и C 2 (r 2 , г 2 , b 2 ) будет
sqrt ((r 1 - r 2 ) 2 + (г 1 - г 2 ) 2 + (b 1 - b 2 ) 2 ) .
Но если вам нужна большая точность, лучше использовать биконовое пространство Hue-Chroma-Lightness, производное цилиндра HSL.
В пространстве RGB вещи были прямыми, как R, G и B, где каждая на отдельной оси. В HCL нам нужно вычислить координаты на каждой оси.
Прежде всего, мы вычисляем цветность (которая немного отличается от насыщенности) как:
Chroma = max (красный, зеленый, синий) - мин (красный, зеленый, синий)
Затем мы нормализуем наши значения H, C и L таким образом, чтобы H переходил от 0 до 2 (чтобы покрыть круг, если мы умножим на PI и примем радианы в качестве единицы), C перейдет от 0 до 1 (радиус тригонометрический круг) и L переходит от -1 (черный) к 1 (белый).
Далее мы берем z = L без каких-либо преобразований, поскольку из изображения ясно, что оно идет вдоль вертикальной оси.
Мы можем легко заметить, что для цвета Chroma - это расстояние от оси z, а Hue - это угол. Итак, мы получаем
x = C * cos (H * PI) и
y = C * sin (H * PI)
В этот момент все x, y и z будут в [-1, 1], а расстояние между двумя цветами будет, по той же формуле, что и выше,
sqrt ((x 1 - x 2 ) 2 + (y 1 - y 2 ) 2 + (z 1 - z 2 ) 2 ) .
Чтобы получить еще большую точность и найти ближайший цвет в соответствии с человеческим восприятием цветов, вы можете использовать CIE-L * ab пространство моделирования и вычислить расстояние с помощью одного из этих алгоритмов, Принципы те же, что и в двух приведенных выше случаях, только алгоритмы являются более сложными.
Обновление (7 лет спустя)
Наконец-то на xkcd появился комикс, который я могу использовать в этом посте!
https://xkcd.com/1882/