C++ OpenCV-SURF功能比较
我很好奇如何比较C++ OpenCV-SURF功能比较,c++,objective-c,graphics,opencv,computer-vision,C++,Objective C,Graphics,Opencv,Computer Vision,我很好奇如何比较OpenCV特性描述符。例如,我可以使用cvExtractSURF()获取功能及其64位(或128位)描述符的列表,在哪里可以找到如何比较这两个描述符 在逐步浏览一些示例代码时,在我看来,我的两个“匹配”功能具有非常不同的描述符(至少通过数值) 有人知道如何获取两个描述符数组并比较它们吗 谷歌搜索帮不了什么忙 干杯, 布雷特你可能想看看报纸。这是一篇很棒的论文,介绍了广泛使用的特征检测器,包括SURF。SURF特征是64维单位向量。比较两个特征向量的自然方法是计算它们的点积。如果
OpenCV
特性描述符。例如,我可以使用cvExtractSURF()
获取功能及其64位(或128位)描述符的列表,在哪里可以找到如何比较这两个描述符
在逐步浏览一些示例代码时,在我看来,我的两个“匹配”功能具有非常不同的描述符(至少通过数值)
有人知道如何获取两个描述符数组并比较它们吗
谷歌搜索帮不了什么忙
干杯,
布雷特你可能想看看报纸。这是一篇很棒的论文,介绍了广泛使用的特征检测器,包括SURF。SURF特征是64维单位向量。比较两个特征向量的自然方法是计算它们的点积。如果接近1,则它们具有很强的正相关(=它们相似)。如果接近0,则它们几乎是正交的(无相关性)。如果小于零,则它们具有负相关性。根据您的应用程序,您也可以考虑匹配(在这种情况下,您将采取点产品的绝对值)或认为它比正交更差。
尝试计算一些点积,看看结果如何。在OpenCV 2.1示例文件find_obj.cpp中,介绍了两种方法:
- 内置的C++ FLAN函数(FLANN给出了一个近似的解决方案,并且工作得更快),我不知道它是如何工作的,但是它被记录下来。
- 一个更简单的C函数(findPairs()),它通过计算描述符之间的简单欧几里德距离来查找最近的邻居(查看comparesurfddescriptors()函数)。拉普拉斯算子也可用作相似性的第一个指标,因为匹配点的拉普拉斯算子(1或-1)不同。此示例可用
你之所以需要这个,以及为什么简单的1近邻搜索不够,是因为这会产生很多误报。我真的看过那篇文章。我希望看到代码和它一起,这样我就可以看到它是如何实际实现的。然而,这些学术论文似乎都没有开源代码。令人失望的是,重新设计他们的工作从来都不是一件小事。我不确定OpenCV搜索匹配功能的方式是否是这样。我计算了OpenCV认为匹配和不匹配的点集的点积,点积到处都是。