2010-10-18 191 views
1

我正在研究一個涉及將顏色掃描爲RGB的項目,然後搜索更多RGB數據的數據庫以查看與掃描的顏色最相似的項目。我已經決定在這種情況下確定「相似」意味着什麼的最簡單方法是在三維空間中表示顏色,然後找到掃描點與數據庫其餘部分之間的距離。搜索顏色相似性

在我看來,這是第一部分是好的,使用三維空間和接近度的想法,但後半部分似乎對我來說是一個壞主意,我不應該檢查掃描的顏色對每一個數據庫中的單點,我應該嗎?從未做過任何正式的CS工作,我不知道該怎麼做,但我有一種非常不同的感覺,那就是必須有更好的方法。或者,爲了使這個摘要:我有一些輸入數據,一堆存儲的數據和一個函數,告訴我這兩個數據有多相似。找出輸入中最相似的存儲實體的最有效方式是什麼?

編輯:我使用python,如果任何人都好奇。

回答

3

爲了解決抽象語句:除非在先驗已知的相似度函數中存在結構,否則沒有比「嘗試所有事物」更好的方法。

您的問題在術語"nearest neighbor search"下進行了研究。對於這個問題,cover tree是非常合適的。這page有指向代碼的指針。 A kd-tree也可能是合適的。

由於缺乏關於參考色數據庫結構或覆蓋範圍的進一步信息,很難提出進一步的建議。例如,如果已知數據庫具有最壞的稀疏性,那麼查詢可以被限制爲其R分量與測試顏色的R分量相差小於稀疏度等等的G分量和B分量的那些條目,從而減少整個數據庫保存爲一個較小的立方體部分,保證包含結果。 (使用此方法需要證明立方體中的任何點都不超過數據庫中的某個點的X,這對於固定數據庫至少可以預先確定一次。)

+0

我在考慮使用類似kd樹,但我不知道它存在或有一個名稱。感謝有用的指針!我會一起嘗試破解一些事情。 – NSU 2010-10-18 21:09:03