繁体   English   中英

OpenCV - SURF特征比较

[英]OpenCV - SURF Feature Comparison

我很好奇OpenCV功能描述符是如何比较的。 例如,我可以使用cvExtractSURF()来获取功能列表及其64位(或128位)描述符,在哪里可以找出如何比较两个描述符?

在逐步介绍一些示例代码时,对我来说,看起来我的两个“匹配”特征具有非常不同的描述符(至少通过数值)。

有没有人想出如何采取两个描述符数组并进行比较?

谷歌搜索没有太多帮助......

干杯,布雷特

您可能希望查看本文不变特征检测器:调查 这是一篇很棒的论文,描述了广泛使用的特征探测器,包括SURF。

在OpenCV 2.1示例文件find_obj.cpp中,提供了两种方法:

  • 内置的C ++弗莱恩功能(FLANN给aproximate解决方案和工作速度更快),我不知道它究竟是如何工作的,但它是记录在这里
  • 一个更简单的C函数(findPairs()),通过计算描述符之间的简单欧几里德距离来查找最近邻居(查看compareSURFDescriptors()函数)。 拉普拉斯也可以用作相似性的第一指标,因为匹配点不具有相同的拉普拉斯(1或-1)。 此示例可在此处获得

我发现的一个有效方法(这是从一些OpenCV示例代码中获得灵感)是 - 使用K = 2的ak最近邻搜索来查找查询对象中每个描述符的2个匹配项。 现在,如果距离(第一场比赛)<0.6 *距离(第二场比赛),则将第一场比赛视为“好比赛”。

你需要这个以及为什么一个简单的1最近邻搜索不够的原因是因为它给出了很多误报。

SURF特征是64维单位矢量。 比较两个特征向量的一种自然方法是计算它们的点积。 如果接近1,则它们具有强烈的正相关性(=它们相似)。 如果它接近0,它们几乎是正交的(没有相关性)。 如果它小于零,则它们具有负相关性。 根据您的应用程序,您可能会考虑匹配(在这种情况下,您将采用点积的绝对值)或认为它比正交更差。

尝试计算一些点积,看看你得到了什么结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM