SIFT特征点的匹配正确率衡量标准与量化

原文链接:https://blog.csdn.net/cgwang_1580/article/details/68944319

另外还有一篇文章写的也不错:http://bookshadow.com/weblog/2014/06/10/precision-recall-f-measure/

目前图像匹配中,局部特征匹配占据了绝大部分,常用的局部特征匹配方法有Harris、SIFT、SURF、ORB等等,不同的特征点检测和匹配方法尤其独特的优势和不足;

特征点匹配经过Ransac算法优化后仍存在错误匹配点对,需要优化后的匹配结果进行量化评价;
特征点检测和匹配评价一般包括两个部分,分别为检测和匹配的评价。

1、特征点检测评价

评价特征点检测方法的优劣常常用到repeatability(重复率)这个概念。
《a performance evaluation of local descriptors》一文提出了特征点检测器和匹配结果的评价准则,我的理解是:图A、B是两幅待匹配图像,图A映射到图B有一个单应性矩阵H1,图B映射到图A有单应性矩阵H2,图A检测出N1个特征点,图B检测出N2个特征点,因为图像A和B有部分图像不重叠,故将A图检测的特征点坐标由H1算出在B图的坐标,去掉不合格(计算结果超出在B图像坐标)的特征点,剩下的特征点数记为n1;同样,B图的特征点经过处理剩下n2个;分母便是min(n1, n2)。将图A剩下的特征点由H1计算出在图B中的坐标,与图B检测出的特征点的坐标求距离,即dist(h1*a1, b1),若距离小于阈值ε,则认为是重复的,这么做是因为得到的单应性矩阵不一定完全精确以及一些别的误差原因。

《An affine invariant interest point detector》中对repeatability定义进行了延伸,针对affine invariant的图像特征点。
在这里插入图片描述
repeatability计算式的分母可以和原来定义相同,分子的定义correspondence满足两个条件:
1、同之前定义,即设定ε=1.5;
2、regions映射到另一幅图像中重叠误差小于0.2。
这里第二点是因为特征点检测器得到的特征点实际上是根据特征点附近区域计算梯度来选取特征点,实际上检测的特征区域(region),如Harris-Affine检测的是一个椭圆区域,SIFT检测的是一个圆形区域;当左图一特征点区域在经过乘上单应性矩阵H后实际,该区域会发生变化,所以需要判断变化之后的区域与右图某一特征点区域的重叠误差,误差<0.2,则判断自是一对特征点。
在这里插入图片描述

2、特征点匹配评价

特征点匹配的评价一般涉及到两个概念,即Recall(召回率)和Precision(精确率),我们先来了解一下这两个概念。
精确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。
——精确率是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;
——召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。
在信息检索中:

精确率 = 提取出的正确信息条数 / 提取出的信息条数
召回率 = 提取出的正确信息条数 / 样本中的信息条数
下面是一个非常经典的解释Recall和Precision的图,我做了一点儿说明:
在这里插入图片描述
Precision和Recall指标有时候会出现的矛盾的情况,可以绘制Precision-Recall曲线,曲线越靠上部,结果越好。

对比信息检索的评价,在特征点匹配时:
A指的是实际为匹配点对,且该匹配算法得到了这些匹配对;
B指的是实际为匹配点对,但该匹配算法没有得到这些匹配对;
C指的是实际为错误匹配对,但该算法得到了这些匹配对;
即Precision为匹配结果中有多少是准确的,Recall就是所有正确的匹配结果有多少通过匹配算法得到了。

在第一部分中已经说明了根据两图像间的单应性矩阵H计算两个特征点是否重复,这里设置一个correspondence变量,作为重复特征点的数量,则匹配结果评价的两个参数Precision和Recall有如下公式:
在这里插入图片描述
在这里插入图片描述
公式中,#correct matches表示匹配结果中正确匹配点对,#correspondences表示特征点检测时重复特征点对(特征点重复即认为实际为正确匹配点对,但可能被匹配算法匹配上,也可能未匹配上),#false matches表示匹配结果中错误匹配点对。其中,正确与错误匹配点对可以用上面提到的两个判断特征点是否重复的条件来判定。

因此,在评价特征点匹配结果时,首先应当知道两个图像间的单应性矩阵H,然后通过特征点检测算法得到左右图像中的特征点信息,根据单应性矩阵得到重复特征点数,即#correspondences;接着由特征点匹配算法得到的匹配结果计算Precision和Recall,绘制1-precision和recall曲线,曲线靠上方的结果较出色!
参考曲线图:
在这里插入图片描述
以上内容为我的理解,可能存在理解不当的地方,欢迎指正!

转载请注明出处:图像特征点检测与匹配评价准则——量化
参考资料:
介绍Precision和Recall的博客:
http://blog.csdn.net/pirage/article/details/9851339
http://bookshadow.com/weblog/2014/06/10/precision-recall-f-measure/
文章《A Performance Evaluation of Local Descriptors》
https://www.robots.ox.ac.uk/~vgg/research/affine/det_eval_files/mikolajczyk_pami2004.pdf
K Mikolajczyk大神的特征点重复率计算相关代码:
http://www.robots.ox.ac.uk/~vgg/research/affine/descriptors.html#binaries
特征点检测匹配标准数据库:

http://www.robots.ox.ac.uk/~vgg/data/data-aff.html

另附另一篇文章的讲解过程:

下面简单列举几种常用的推荐系统评测指标:

1、准确率与召回率(Precision & Recall)

准确率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。

一般来说,Precision就是检索出来的条目(比如:文档、网页等)有多少是准确的,Recall就是所有准确的条目有多少被检索出来了。

正确率、召回率和 F 值是在鱼龙混杂的环境中,选出目标的重要评价指标。不妨看看这些指标的定义先:

1. 正确率 = 提取出的正确信息条数 /  提取出的信息条数     

2. 召回率 = 提取出的正确信息条数 /  样本中的信息条数    

两者取值在0和1之间,数值越接近1,查准率或查全率就越高。

3. F值  = 正确率 * 召回率 * 2 / (正确率 + 召回率) (F 值即为正确率和召回率的调和平均值)

不妨举这样一个例子:某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的。撒一大网,逮着了700条鲤鱼,200只虾,100只鳖。那么,这些指标分别如下:

正确率 = 700 / (700 + 200 + 100) = 70%

召回率 = 700 / 1400 = 50%

F值 = 70% * 50% * 2 / (70% + 50%) = 58.3%

不妨看看如果把池子里的所有的鲤鱼、虾和鳖都一网打尽,这些指标又有何变化:

正确率 = 1400 / (1400 + 300 + 300) = 70%

召回率 = 1400 / 1400 = 100%

F值 = 70% * 100% * 2 / (70% + 100%) = 82.35%

由此可见,正确率是评估捕获的成果中目标成果所占得比例;召回率,顾名思义,就是从关注领域中,召回目标类别的比例;而F值,则是综合这二者指标的评估指标,用于综合反映整体的指标。

当然希望检索结果Precision越高越好,同时Recall也越高越好,但事实上这两者在某些情况下有矛盾的。比如极端情况下,我们只搜索出了一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。因此在不同的场合中需要自己判断希望Precision比较高或是Recall比较高。如果是做实验研究,可以绘制Precision-Recall曲线来帮助分析。
2、综合评价指标(F-Measure)

P和R指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure(又称为F-Score)。

F-Measure是Precision和Recall加权调和平均:
在这里插入图片描述

当参数α=1时,就是最常见的F1,也即
在这里插入图片描述

可知F1综合了P和R的结果,当F1较高时则能说明试验方法比较有效。

3、E值

E值表示查准率P和查全率R的加权平均值,当其中一个为0时,E值为1,其计算公式:
在这里插入图片描述

b越大,表示查准率的权重越大。

4、平均正确率(Average Precision, AP)

平均正确率表示不同查全率的点上的正确率的平均。

原文链接:http://blog.csdn.net/taohuaxinmu123/article/details/9833001

  • 6
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
特征点匹配可以通过在两幅图像上绘制连接匹配特征点的线来显示。具体步骤如下: 1. 通过ORB,SIFT,SURF等算法在两幅图像中提取特征点。 2. 对于每个特征点,在两幅图像中分别计算其描述子。 3. 使用特征点描述子计算两幅图像中的特征点匹配。 4. 通过筛选匹配点对,去掉错误匹配。 5. 在两幅图像上绘制连接匹配点对的线,可视化显示特征点匹配。 下面是一个示例代码段,演示如何通过OpenCV库进行ORB特征点匹配的可视化显示: ```python import cv2 import numpy as np img1 = cv2.imread('image1.jpg', 0) img2 = cv2.imread('image2.jpg', 0) # 初始化ORB检测器 orb = cv2.ORB_create() # 检测特征点计算描述子 kp1, des1 = orb.detectAndCompute(img1, None) kp2, des2 = orb.detectAndCompute(img2, None) # 使用Brute-Force匹配计算特征点匹配 bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) matches = bf.match(des1, des2) # 筛选匹配点对 matches = sorted(matches, key=lambda x: x.distance) good_matches = matches[:50] # 绘制匹配点对 img_matches = cv2.drawMatches(img1, kp1, img2, kp2, good_matches, None, flags=2) # 显示结果 cv2.imshow('Matches', img_matches) cv2.waitKey() cv2.destroyAllWindows() ``` 在这个示例中,我们使用ORB检测器和Brute-Force匹配计算特征点匹配,并使用`cv2.drawMatches()`函数绘制匹配点对。您可以根据实际情况调整匹配点对的数量和绘制线条的样式,以达到更好的可视化效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值