OpenCV - SURF功能比较
我很好奇如何比较功能描述符OpenCV
。例如,我可以使用cvExtractSURF()
获取功能列表及其64位(或128位)描述符,我可以在哪里找到两个描述符可以比较的方式?OpenCV - SURF功能比较
在通过一些示例代码步进,对我来说,它看起来像我的两个“匹配”功能具有非常不同的描述符(至少数值)。
有没有人知道如何获取两个描述符数组并对它们进行比较?
谷歌搜索并没有帮助太多...
干杯, 布雷特
SURF特征是64维单位向量。比较两个特征向量的一种自然方法是计算它们的点积。如果它接近1,它们有很强的正相关(=它们是相似的)。如果它接近0,它们几乎是正交的(不相关)。如果它小于零,则它们具有负相关性。根据您的应用程序,您可能会认为一个匹配太多(在这种情况下,您将获得点积的绝对值),或认为它比正交差。
尝试计算一些点积,并查看得到的结果。
我不确定这是OpenCV搜索匹配功能的方式。我计算了OpenCV认为匹配和不匹配的一组点的点积,并且点积遍布整个地方。 – Brett 2010-11-16 18:40:14
一种有效的方法,我发现(这是从一些OpenCV的样本代码的启发)是 - 使用k近邻搜索具有K = 2找到2个匹配在查询对象中的每个描述符。现在,如果距离(第一场比赛)< 0.6 *距离(第二场比赛),将第一场比赛视为“良好比赛”。
为什么你需要这个,为什么一个简单的1个近邻搜索是不够的,因为这给了假阳性很多原因。
我真的看到了那张纸。我希望看到它的代码,所以我可以看到它是如何实现的。然而,这些学术论文似乎都没有开源他们的代码。令人失望,因为重塑他们的工作从来都不是微不足道的。 – Brett 2010-11-12 22:05:50