我得到了 n 个属于彩虹的点(或接近于“彩虹色”)。现在给定一个也是彩虹色的点,我想从 n 个点中找到最接近的匹配。
什么是强大而简单的数据结构+算法组合来做到这一点?我想到了使用 (R,G,B) 元组和欧拉距离。
是的,我有一个严重的用例:-)
我得到了 n 个属于彩虹的点(或接近于“彩虹色”)。现在给定一个也是彩虹色的点,我想从 n 个点中找到最接近的匹配。
什么是强大而简单的数据结构+算法组合来做到这一点?我想到了使用 (R,G,B) 元组和欧拉距离。
是的,我有一个严重的用例:-)
您基本上是对的,但是 HSL 或 HSV 可能会允许更高的准确性,因为您可以对属性进行加权。见colorsys
。
您可能应该将您的 RGB 值转换为HSL,其中基于色调匹配颜色接近度应该更容易。
我不是在玩彩虹;-) 但我的情况几乎相同,我为此使用 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)
您说的是彩虹色,在通常意义上是指可见光谱中的单色,即单一频率的颜色(白色或粉红色不是彩虹色)。在这种情况下,您有很大的优势,可以仅用它们的频率或波长(一个数字)来表示它们。例如,看一下与彩虹光谱的样本划分相对应的频率:
所以现在你有n 个数字,然后你选择另一个数字(另一种彩虹色),并且必须决定它最接近哪个数字。这应该是微不足道的。
所以如果你有你的彩虹色频率(你应该这样做,否则你怎么知道它们是彩虹色?),这是一项简单的工作。