2013-11-09 89 views
3

LSH與二進制字符串一起使用,在索引和檢索中非常高效。雖然SIFT不是二進制描述符,但它仍然是可用的最佳描述符。 LSH可以使用SIFT嗎?另外,是否有更好的索引技術可用於SIFT功能?如何使用SIFT描述符與局部敏感散列?

我一直在使用與FLANNBased匹配器與LSH在OpenCV的SIFT嘗試過,但得到以下錯誤:

what(): C:\OpenCV\opencv\modules\flann\src\miniflann.cpp:315: error: (-210) type=5 in function buildIndex_

代碼:

cv::Ptr<cv::FlannBasedMatcher> matcher = new cv::FlannBasedMatcher(new cv::flann::LshIndexParams(5, 24, 2)); 
     matcher->match(descriptors, descriptors1, matches); 

注:這個問題是在dsp.stackexchange更容易.com,但它現在處於只讀模式。

+0

SIFT確實是視點變化中最好的描述符,但是摘要在光度變化中勝過它。 此外,我認爲如果您將旋轉補償機制添加到BRIEF,它將在視點更改中給出不錯的結果。 – GilLevi

回答

2

LSH是維度減少的算法輸出二進制字符串。它被設計爲用二進制代碼索引實值高維數據(但是具有固有的較低維數,如流形)。

您可以嘗試自己實現LSH,以便它可以使用SIFT描述符。最簡單的方法是使用隨機投影,但使用SIFT描述符是梯度方向直方圖集合這一事實的一些更聰明的方案可能會被利用來產生更高效的散列函數。

+0

謝謝。隨機預測是什麼意思? – krammer

+1

「降維中的隨機投影: 對圖像和文本數據的應用程序」 http://users.ics.aalto.fi/ella/publications/randproj_kdd.pdf –

+0

您是否知道任何可用於使用SIFT的代碼示例(或任何這樣的技術)與LSH – krammer

3

用於SIFT的兩種最佳索引技術是kd-tree and k-means,試一試。 兩者都在FLANN matcher which is part of OpenCV中實施。 這兩篇文章比較FLANN和LSH用於進行篩選,:

Locality sensitive hashing: a comparison of hash function types and querying mechanisms

How to Use SIFT Vectors to Analyze an Image with Database Templates

實際上,亞歷山大·安多尼已經實現something very similar你想要什麼。

+0

但不是LSH更快? – krammer

+0

這是,但不太準確。據我所知,迄今爲止最先進的圖像檢索系統使用k均值聚類。 –

+0

感謝您的參考文獻。我在概念上能夠理解正在發生的事情,但真正在盲目地瞭解如何對其進行編碼 – krammer