2012-06-28 133 views
3

我得到了屬於彩虹的n個點(或接近「彩虹色」)。現在給出一個也是彩虹色的點,我想在n個點中找到最接近的匹配點彩虹的接近度

什麼是強大而簡單的數據結構+算法組合來做到這一點?我想起使用(R,G,B)元組和Eularian距離。

是的,我得了嚴重的用例:-)

+0

你的意思是[歐幾里德距離](http://en.wikipedia.org/wiki/Euclidean_distance)?除此之外,您的建議聽起來像是一個很好的解決方案 - 選擇彩虹顏色的RGB值作爲目標,然後使用(R,G,B)作爲座標,並測量給定顏色和目標顏色之間的距離。您還可以查看其他距離度量標準 - [另請參閱維基百科上的歐幾里德距離部分](http://en.wikipedia.org/wiki/Euclidean_distance#See_also)有一些示例。 – bouteillebleu

+1

您應該將所有顏色轉換爲LAB並進行距離計算,因爲它比RGB更感知均勻。 – martineau

+0

@bouteillebleu,我的壞! – aitchnyu

回答

2

我不是玩弄彩虹;-)但我有幾乎相同的情況,我使用kd-tree來快速搜索最近的「點」。我點也是RGB顏色0-1的形式漂浮

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

你說彩虹色,這在通常意義上是指在可見光譜的單色,即單一顏色頻率(白色或粉紅色不是彩虹色)。在這種情況下,你可以用他們的頻率或波長來代表它們,這是一個很好的優勢。看看這裏的例子來看看對應的彩虹光譜分樣頻率:

所以,現在你有ñ號碼,然後你選擇另一個號碼(另一彩虹色),並且必須決定它與哪一個最接近。這應該是微不足道的。所以如果你的彩虹顏色的頻率(你應該知道,否則你怎麼知道它們是彩虹色的?),這是一件簡單的工作。