将一个图像中的SURF描述符与其他图像中的描述符列表进行比较

Mor*_*nGR 6 c# opencv kdtree computer-vision surf

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

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

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

所以我的问题是:使用KD树/其他方法将SURF描述符从一个图像(A)与几个图像(B,C,D ......)匹配时,您有什么经验或知识.什么运作良好,不太好,你做过这样的事情吗?

FLANN将是一个选项,因为OpenCV使用它,但我找不到C#的版本.近似最近的Neightboor也可以选择加速kd树,但这对匹配图像有效吗?

最好的问候莫滕

小智 0

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

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