6

我想将一张图像 (A) 中的 SURF 描述符与其他几张图像 (B,C,D,..) 中的描述符进行比较,以找到与 A 最相似的图像。描述符有 64 个维度。

使用 C# 和 Emgu,通过将 A 的描述符与 B 的描述符进行比较来完成匹配,然后是 C 的描述符,然后是 D 的描述符,依此类推。当图像数量超过 10 时,这非常慢,因为必须搜索许多不相关的描述符。

为了加快这个过程,正确的方法(根据文章)似乎是为 (B,C,D,..) 中的描述符构建一个 kd-tree 以快速匹配找到 A 中的描述符。 kd -tree 根据级别在维度上进行拆分。第一次拆分由第一维决定,第二次拆分由第二维等决定。但是,在描述符(64)的维数很高时,使用 KD-tree 的好处变得更小。

所以我的问题是:使用 KD-tree/其他方法将 SURF 描述符从一个图像 (A) 匹配到多个图像 (B、C、D..),您有什么经验或知识。什么效果好,什么效果不好,你做过这样的事情吗?

FLANN 在这里是一个选项,因为它被 OpenCV 使用,但我找不到 C# 的版本。大约最近的 Neightboor 也是加速 kd-tree 的一个选项,但是这对匹配图像有效吗?

最好的问候莫腾

4

2 回答 2

0

您可以在 C 或 C++ 上尝试FLANN 。它并不太复杂。

但是,我在 C++ 上测试 FLANN,但匹配时间(使用 SURF 特征、FLANN、查询 1,000 张图像)非常长,从 20 秒到 400 秒(取决于每个图像的特征向量数量)。

于 2011-12-01T15:03:01.700 回答
0

看看这个例子:https ://code.ros.org/trac/opencv/browser/trunk/opencv/samples/c/find_obj.cpp?rev=2065

于 2011-12-08T21:34:48.673 回答