对于SIFT描述符匹配的有效途径(Efficient way for SIFT descriptor

2019-08-01 07:53发布

有2个图像A和B.我提取关键点(A [i]和B [1])从它们。
我不知道如何能够确定B [j]的A [1]之间的匹配,并有效地?

最明显的方法来我是每一个点在A和B中的每个点进行比较,但随着时间的推移,耗费大量的图像数据库。 我如何才能比较点A [1]只有B [K] k是很小的范围内?

我听说,kd树可能是一个不错的选择,不是吗? 是否有关于kd树有什么好的例子

任何其他的建议?

Answer 1:

KD树商店的方式训练的描述,这是真的更快地找到最相似的描述符进行匹配时。

随着OpenCV的它是很容易使用kd树,我会给你一个例子为FLANN匹配:

flann::GenericIndex< cvflann::L2<int> >  *tree; // the flann searching tree
tree = new flann::GenericIndex< cvflann::L2<int> >(descriptors, cvflann::KDTreeIndexParams(4)); // a 4 k-d tree

然后,当你做的匹配:

const cvflann::SearchParams params(32);
tree.knnSearch(queryDescriptors, indices, dists, 2, cvflann::SearchParams(8));


Answer 2:

现在的问题是你真的想确定关键点匹配两个图像之间,或计算相似度天气。

如果你想确定匹配,那么恐怕你将不得不通过两幅图像之间的所有可能的描述符对穷举搜索(有一些更先进的方法,如FLANN - 快速近似最近邻搜索,但加速是不显著,如果你有小于或约为每图像2000个关键点 - 在我的经验,至少)。 为了得到更精确的匹配(不是更快,只求更好的比赛),我可以建议你去看看:

  • DG罗威。 从比例不变的关键点鲜明的形象特征 -与第二最接近的匹配比较
  • J. Sivic和A. Zisserman。 视频谷歌:文本检索方法目标匹配的视频 -关于空间的一致性节

如果,另一方面,你只需要在一个大的数据库中的相似性度量,再适当的地方开始将是:

  • D.Nistér和H.Stewénius。 用词汇树可伸缩的认可 -他们使用基于结构称为词汇树分层方法能够从大型数据库计算查询图像和图像之间的相似性度量
  • J. Sivic和A. Zisserman。 视频谷歌:文本检索方法目标匹配的视频 -相同的纸张如上,但它是非常有帮助的understan在Nistér,Stewénius的方法


Answer 3:

在OpenCV中有实现的匹配套关键点的几个策略。 看一看有关文档的描述符匹配器的通用接口 。



文章来源: Efficient way for SIFT descriptor matching