Ответ 1
Вместо использования RGB попробуйте использовать цветную модель
У меня есть цвет (RGB), который считывается с датчика. У меня также есть список "известных" цветов, каждый из которых связан с именем строки.
Каким будет лучший способ (т.е. вести себя как человек, выбирающий цвета), чтобы вытащить имя ближайшего цвета из этого списка?
Я пробовал кратчайшее декартовое расстояние с RGB, но это делает серое ближе к зеленому, чем к черному или белому.
Вместо использования RGB попробуйте использовать цветную модель
Затем вам нужно возиться с формулой расстояния, чтобы высвечивать оттенок, пока вы не будете довольны результатами. Обратите внимание, что вы обнаружите, что проблема на самом деле практически неразрешима, если у вас нет большого количества цветов для соответствия или ваши входные цвета ограничены небольшим диапазоном возможных значений. Это потому, что, хотя может показаться, что вы можете прикрепить любой цвет к одному из 8 (красный, оранжевый, зеленый, синий, фиолетовый, черный и белый) или один из 16, на самом деле вы найдете, что ваш алгоритм всегда найдет кажущиеся явно неправильными совпадения, потому что с тремя осями движения (оттенок, насыщенность, значение или красный, зеленый, синий), есть намного больше "основных" цветов, чем вы могли бы подумать на первый взгляд.
Я бы подумал, что если вы обрабатываете цвета как координаты RGB в трехмерном пространстве и вычисляете расстояние от выборочных до известных значений, вы можете определить ближайшее совпадение. Я, вероятно, также попытаюсь масштабировать R G B в соответствии с чувствительностью к глазам (т.е. Y = 0,3 * R + 0,59 * G + 0,11 * B), вы достигнете наилучшего результата