Ответ 1
Преобразуйте все цвета в цветовое пространство CIE Lab и вычислите расстояние в этом пространстве
deltaE = sqrt(deltaL^2 + deltaA^2 + deltaB^2)
Цвета с наименьшей deltaE наиболее восприимчивы друг к другу.
У меня есть массив из 200 цветов в формате RGB. Я хочу написать программу, которая принимает любой цвет RGB и пытается сопоставить цвет из массива, который наиболее "похож".
Мне нужно хорошее определение для "похожего", которое как можно ближе к восприятию человека.
Я также хочу показать некоторую информацию о соответствии точности. Например, черно-белый: 100% и для аналогичного цвета с немного другим оттенком: -4%.
Нужно ли использовать нейронные сети? Есть ли более простая альтернатива?
Преобразуйте все цвета в цветовое пространство CIE Lab и вычислите расстояние в этом пространстве
deltaE = sqrt(deltaL^2 + deltaA^2 + deltaB^2)
Цвета с наименьшей deltaE наиболее восприимчивы друг к другу.
Нет, вам здесь не нужны нейронные сети! Просто рассмотрите значение цвета HSL вектора и определите функцию взвешенного модуля для вектора, как это:
modulus = sqrt(a*H1*H1 + b*S1*S1 + c*L1*L1);
where a,b,c are weights you should decide based on your visual definition of what
creates a bigger difference in perceived color - a 1% change in Hue or a 1%
change in Saturation
Я предлагаю вам использовать a = b = 0.5 и c = 1
Наконец, узнайте диапазон, который примет ваш модуль, и определите похожие цвета, которые будут иметь свои модули очень близко друг к другу (скажем, 5%)
Я также указал бы на метод метод наименьших квадратов, как нечто немного более простое. То есть, вы принимаете разницу в количестве, квадрате, затем суммируете все эти квадратичные различия.
Я искал эту вещь, но не нашел много ответов вокруг, я решил создать эту небольшую библиотеку.
https://github.com/sebastienjouhans/c-sharp-colour-utilities