代码之家  ›  专栏  ›  技术社区  ›  Eric

找到一个数组中最接近另一种颜色的颜色的最佳算法是什么?[关闭]

  •  18
  • Eric  · 技术社区  · 16 年前

    我有一个颜色(RGB)正在从传感器读取。我还有一个“已知”颜色的列表,每个颜色都与一个字符串名称配对。

    把最近的颜色的名称从这个列表中拉出来最好的方法是什么(表现得像人类选择颜色)?

    我试过用RGB做最短的笛卡尔距离,但这使得灰色比黑色或白色更接近绿色。

    3 回复  |  直到 13 年前
        1
  •  21
  •   Jon Skeet    16 年前

    与其使用RGB,不如尝试使用 HSL (Hue, Saturation, Lightness) or HSV (Hue, Saturation and Value) 颜色模型。然后用不同的偏压元素进行实验,例如,在计算距离时,色调比亮度更重要。

        2
  •  7
  •   Southern Hospitality    16 年前

    乔恩·斯基特是对的。如果您担心匹配的颜色成分差异太大,则需要使用带有色调的系统来代替RGB。为此目的,HSL或HSV都可以正常工作。

    然后你需要摆弄距离公式来加重色调,直到你对结果满意为止。请注意,您会发现问题实际上是无法解决的,除非您有大量的颜色要匹配,或者您的输入颜色仅限于一个小范围的可能值。这是因为,尽管看起来你可以把你想要的任何颜色固定到8种颜色中的一种(红、橙、黄、绿、蓝、紫、黑和白)或16种颜色中的一种,但实际上你会发现你的算法总是会发现明显不正确的匹配,因为有3个运动轴(色调、饱和度、值或红、绿、蓝),有很多或者“基本”的颜色比你一眼就能想到的还要多。

        3
  •  4
  •   Scott Evernden    16 年前

    我认为,如果你在3空间中把颜色当作RGB坐标,计算从采样到已知值的距离,你可以确定最接近的匹配。我可能还会根据眼睛的敏感度(即y=0.3*r+0.59*g+0.11*b)来调整r g b的比例,你会得到最好的结果。