我从传感器读取颜色(RGB)。我还有一个“已知”颜色列表,每个颜色都配有一个字符串名称。
从列表中提取最近颜色的名称,最好的方法(即表现得像人类选择颜色)会是什么?
我尝试用RGB制作最短的笛卡尔距离,但这使得灰色更接近绿色而不是黑色或白色。
答案 0 :(得分:21)
尝试使用HSL (Hue, Saturation, Lightness) or HSV (Hue, Saturation and Value)颜色模型,而不是使用RGB。然后尝试不同的偏见元素,例如:在计算距离时,色调比亮度更重要。
答案 1 :(得分:7)
Jon Skeet是对的。如果您担心匹配的颜色分量差异太大,则需要使用具有Hue作为组件而不是RGB的系统。 HSL或HSV都可以正常工作。
然后你需要摆弄距离公式来增加色调,直到你对结果感到满意为止。请注意,除非您有大量颜色要匹配,否则您会发现问题实际上是不可解决的,或者您的输入颜色仅限于一小部分可能的值。这是因为虽然你可能看起来可以将你想要的任何颜色(8,红色,橙黄色,绿色,蓝色,紫色,黑色和白色)或16个中的一个固定,实际上你会发现你的算法总能找到什么似乎是明显不正确的匹配,因为3轴运动(色调,饱和度,值或红色,绿色,蓝色),有比你乍看之下更多的“基本”颜色。
答案 2 :(得分:4)
我认为如果您将颜色视为3空间中的RGB坐标并计算从采样到已知值的距离,则可以确定最接近的匹配。我可能也会根据眼睛敏感度尝试缩放R G B(即,Y = 0.3 * R + 0.59 * G + 0.11 * B)你会达到最佳效果