在 openCV 中查找 SURF 的精确匹配

Posted

技术标签:

【中文标题】在 openCV 中查找 SURF 的精确匹配【英文标题】:Find Exact Matches of SURF in openCV 【发布时间】:2010-07-06 15:36:55 【问题描述】:

我正在使用 openCV Surf 跟踪器来查找两个图像中的精确点。 如您所知,Surf 在两幅图像中都返回了许多特征点。我想要做的是使用这些特征参数来找出哪些匹配是完全正确的(真正的正匹配)。在我的应用程序中,我只需要真正的肯定匹配。

这些参数存在:Hessian, Laplacian, Distance, Size, Dir.

我不知道如何使用这些参数? 精确匹配的距离更小还是粗麻布更远?拉普拉斯能帮忙吗? size 或 dir 有帮助吗?

我怎样才能找到完全匹配(真阳性)??

【问题讨论】:

【参考方案1】:

通过采用以下策略,您可以在查询和图像中的描述符之间找到非常合适的匹配 -

使用 2 NN 搜索图像描述符中的查询描述符,以及以下条件-

如果距离(第一次匹配)

过滤掉误报。

【讨论】:

这个叫做比率测试,似乎比普通的<= 3*min_dist好。【参考方案2】:

很明显,您无法 100% 确定哪些点真正匹配。您可以通过调整 SURF 参数(参见一些链接 here)来增加(性能成本)正数。根据您的实际任务,您可以使用稳健的算法来消除异常值,即如果您执行某种模型拟合,则使用 RANSAC。另外,正如 Erfan 所说,您可以使用空间信息(查看“Elastic Bunch Graph Matching”和Spatial BoW)。

【讨论】:

查看“Elastic Bunch Graph Matching”和Spatial BoW。【参考方案3】:

我即将发布的答案只是我的猜测,因为我尚未对其进行测试以查看它是否完全按预期工作。 通过比较opencv返回的3个随机候选特征点之间的相对极距,并与模板中的对应点进行比较(有一定误差),不仅可以计算出真阳性的概率,还可以计算出角度和匹配模式的规模。

干杯!

【讨论】:

以上是关于在 openCV 中查找 SURF 的精确匹配的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV+Python特征提取算法与图像描述符之SIFT / SURF / ORB

OpenCV——SURF特征检测与匹配

opencv之SURF图像匹配

opencv中SURF特征提取的最佳hessian阈值+最小描述符匹配

OpenCV - 使用 SURF 描述符和 BruteForceMatcher 进行对象匹配

opencv学习之路(35)SURF特征点提取与匹配