彩虹中颜色的接近程度

3

我有一些点,它们属于彩虹颜色(或接近"彩虹颜色"),现在给定一个也是彩虹颜色的点,我想找到这些点中最接近的匹配点。

什么是强大且简单的数据结构和算法组合来实现这个功能?使用 (R,G,B) 元组和欧拉距离是一种可行的方法。

是的,我有一个严肃的用例 :-)


您是指欧几里德距离吗?除此之外,您的建议听起来是一个相当不错的解决方案 - 选择RGB值作为您彩虹颜色的目标,然后使用(R,G,B)作为坐标,并测量给定颜色与目标颜色之间的距离。您也可以查看其他距离度量 - 欧几里德距离的维基百科“另请参阅”部分中有一些例子。 - bouteillebleu
1
你应该将所有颜色转换成LAB并进行距离计算,因为它比RGB更加感知一致。 - martineau
4个回答

2
我不是在谈论彩虹;-),但我有一个几乎相同的情况,并且我使用kd-tree来快速搜索最近的“点”。我的点也是以0-1浮点数形式表示的rgb颜色。 http://code.google.com/p/python-kdtree/
from kdtree import KDTree

data = [(1,2,3),(4,0,1),(5,3,1),(10,5,4),(9,8,9),(4,2,4)]

tree = KDTree.construct_from_data(data)
nearest = tree.query(query_point=(5,4,3), t=1)

2

您的大部分说法是正确的,但是使用HSL或HSV可以更准确地加权属性。请参见colorsys


2

你可能需要将RGB值转换为HSL,这样基于色调的颜色匹配会更容易。


1
你说“彩虹色”,通常意义上是指可见光谱中的单色光,即单一频率的颜色(白色或粉红色不是彩虹色)。在这种情况下,你有一个巨大的优势,可以仅用它们的频率或波长表示它们,只需一个数字。例如,可以在此处查看样本分割后与彩虹光谱相对应的频率。

现在你有n个数字,然后你选择另一个数字(另一种彩虹颜色),并决定它最接近哪一个。这应该很简单。

如果你按频率排列彩虹颜色(你应该这样做,否则你怎么知道它们是彩虹颜色?),这就是一个简单的工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接