按最小距离对 RGB 颜色列表进行排序

Sort RGB list of colors by least distance

我希望按最小距离对 RGB 颜色列表进行排序,希望这会提供比亮度和 HSV 更好的排序。我正在使用距离公式来计算颜色的距离,但是如何根据最小距离对列表进行排序?

有几种方法可以做到这一点,您可以按照@yshavit 的建议使用比较器。

我会做的是创建一个新的 class 并分配一个颜色类型加上一个双倍比较值,创建一个新数组,然后根据双精度值(最小的优先等)对颜色进行排序,然后再次提取颜色。

暂时忘记你有颜色,只考虑 3D(或 2D)中的点 space。

您不能简单地按距离 "sort" 点。您可以按到某个指定点 X 的距离对它们进行排序,但这可能不是您想要的。

相反,您可能正在寻找的是使通过它们的路径的总长度最小化的点的排序。这本质上是旅行商问题,它的计算量比仅对列表排序要多很多

理想情况下,您希望使用感知上正确的距离函数来执行此距离计算 - 这通常意味着将您的点转换为 Lab space 并使用其中一种标准。

根据您实际想要执行的操作,使用不同的颜色可能会更好space,例如:CIEDE2000。 有一个 command-line 工具可以使用该颜色测量感知色差 space:Ciff

用法:ciff <24 位十六进制颜色> <24 位十六进制颜色>

例如,白色和黑色之间的差异报告距离为 100(这是最大值):

$ ciff ffffff 000000
100

基于此工具(或相应的代码),您可以轻松编写一些代码来进行排序(如果颜色不是太多,只需使用暴力即可)。

(我是Ciff的作者)