有2个图像A和B.我提取关键点(A [i]和B [1])从它们。
我不知道如何能够确定B [j]的A [1]之间的匹配,并有效地?
最明显的方法来我是每一个点在A和B中的每个点进行比较,但随着时间的推移,耗费大量的图像数据库。 我如何才能比较点A [1]只有B [K] k是很小的范围内?
我听说,kd树可能是一个不错的选择,不是吗? 是否有关于kd树有什么好的例子 ?
任何其他的建议?
有2个图像A和B.我提取关键点(A [i]和B [1])从它们。
我不知道如何能够确定B [j]的A [1]之间的匹配,并有效地?
最明显的方法来我是每一个点在A和B中的每个点进行比较,但随着时间的推移,耗费大量的图像数据库。 我如何才能比较点A [1]只有B [K] k是很小的范围内?
我听说,kd树可能是一个不错的选择,不是吗? 是否有关于kd树有什么好的例子 ?
任何其他的建议?
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));
现在的问题是你真的想确定关键点匹配两个图像之间,或计算相似度天气。
如果你想确定匹配,那么恐怕你将不得不通过两幅图像之间的所有可能的描述符对穷举搜索(有一些更先进的方法,如FLANN - 快速近似最近邻搜索,但加速是不显著,如果你有小于或约为每图像2000个关键点 - 在我的经验,至少)。 为了得到更精确的匹配(不是更快,只求更好的比赛),我可以建议你去看看:
如果,另一方面,你只需要在一个大的数据库中的相似性度量,再适当的地方开始将是:
在OpenCV中有实现的匹配套关键点的几个策略。 看一看有关文档的描述符匹配器的通用接口 。