4

LSH 与二进制字符串一起使用,在索引和检索方面非常有效。虽然 SIFT 不是二进制描述符,但它仍然是那里可用的最佳描述符。是否可以将 SIFT 与 LSH 一起使用?此外,是否有更好的索引技术可用于 SIFT 特征?

我曾尝试在 OpenCV 中将 SIFT 与 FLANNBased Matcher 与 LSH 一起使用,但出现以下错误:

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 上更合适,但它现在处于只读模式。

4

2 回答 2

3

用于 SIFT 的两种最佳索引技术是kd-tree 和 k-means,试试吧。它们都在作为 OpenCV 一部分的 FLANN 匹配器中实现。这两篇论文比较了 SIFT 的 FLANN 和 LSH:

局部敏感散列:散列函数类型和查询机制的比较

如何使用 SIFT 向量分析带有数据库模板的图像

实际上,Alexandr Andoni 已经实现了与您想要的非常相似的东西。

于 2013-11-10T14:03:16.300 回答
3

LSH 是一种输出二进制字符串的降算法。它旨在用二进制代码索引实值的高维数据(但具有内在的低维,例如流形)。

您可以尝试自己实现 LSH,以便它可以与 SIFT 描述符一起使用。最简单和最简单的方法是使用随机投影,但是使用 SIFT 描述符是梯度方向直方图的集合这一事实的更聪明的方案可能被利用来产生更有效的哈希函数。

于 2013-11-09T20:46:24.247 回答