我从传感器读取颜色(RGB).我还有一个"已知"颜色列表,每个颜色都与一个字符串名称配对.
什么是最好的方式(即表现得像人类选择颜色)从这个列表中拉出最近颜色的名称?
我用RGB测试了最短的笛卡尔距离,但这使得灰色更接近绿色而不是黑色或白色.
Jon*_*eet 21
而不是使用RGB,尝试使用HSL(色调,饱和度,亮度)或HSV(色调,饱和度和值)颜色模型.然后尝试不同的偏差元素,例如,当计算距离时,色调比亮度更重要.
Jon Skeet是对的.如果您担心匹配的颜色分量差异太大,则需要使用具有Hue作为组件而不是RGB的系统.HSL或HSV都可以正常工作.
然后你需要调整距离公式来增加色调,直到你对结果感到满意为止.请注意,除非您有大量颜色要匹配,否则您会发现问题实际上是不可解决的,或者您的输入颜色仅限于一小部分可能的值.这是因为虽然看起来你可以将你想要的任何颜色(8,红色,橙黄色,绿色,蓝色,紫色,黑色和白色)或16个中的一个固定,实际上你会发现你的算法总能找到什么似乎是明显不正确的匹配因为3轴运动(色调,饱和度,值或红色,绿色,蓝色),有比你乍看之下更多的"基本"颜色.