原文:

目前图像匹配中,局部特征匹配占据了绝大部分,常用的局部特征匹配方法有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的图像特征点。 



surf特征点匹配 python 特征点匹配正确率_surf特征点匹配 python


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



surf特征点匹配 python 特征点匹配正确率_surf特征点匹配 python_02



2、特征点匹配评价

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

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

下面是一个非常经典的解释Recall和Precision的图,我做了一点儿说明: 



surf特征点匹配 python 特征点匹配正确率_特征点检测_03


Precision和Recall指标有时候会出现的矛盾的情况,可以绘制Precision-Recall曲线,曲线越靠上部,结果越好。

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

在第一部分中已经说明了根据两图像间的单应性矩阵H计算两个特征点是否重复,这里设置一个correspondence变量,作为重复特征点的数量,则匹配结果评价的两个参数Precision和Recall有如下公式: 



surf特征点匹配 python 特征点匹配正确率_图像处理_04

 




surf特征点匹配 python 特征点匹配正确率_特征点检测_05


特征点重复即认为实际为正确匹配点对,但可能被匹配算法匹配上,也可能未匹配上),#false matches表示匹配结果中错误匹配点对。其中,正确与错误匹配点对可以用上面提到的两个判断特征点是否重复的条件来判定。

1-precision和recall曲线,曲线靠上方的结果较出色! 
参考曲线图: 



surf特征点匹配 python 特征点匹配正确率_图像处理_06

 


(图片来源——《A Performance Evaluation of Local Descriptors》)



以上内容为我的理解,可能存在理解不当的地方,欢迎指正!