论文地址:https://arxiv.org/pdf/2006.04250.pdf
特征匹配在SFM、SLAM等领域有着广泛的应用,最经典的最近临匹配是比较特征点的高维描述子,取描述子距离最近的一对特征点为匹配对。但由于描述子的自身限制,特征匹配的结果经常会存在大量的误匹配,因此剔除误匹配是SFM、SLAM等领域的重要研究问题,前人们也在此方面做过很多工作(下文会详细介绍)。
在本文中,提出了一个基于局部仿射变换验证和样本自适应阈值的特征点误匹配剔除pipeline,并将该方法命名为自适应局部仿射匹配(Adaptive Locally-Affine Matching——AdaLAM)。且AdaLAM有效利用了现代并行硬件。
贡献:
1.结合过去的空间匹配算法,提出一种快速、鲁棒、高并行的空间匹配算法。
2.提出一种比较新颖的算法,可以自适应放宽匹配算法的各种假设,以尽可能利用到可获取的图像信息。
3.基于一种几何假设(局部仿射),场景实用性较强,经实验验证,该算法目前达到了SOTA。
外点剔除是一个长期存在的问题,众多前人提出的外点剔除策略在不同的层次上发挥着作用,具有不同的复杂性和不同的目标。下面介绍外点剔除的四种主要流派:
是一种直接简单的过滤器,通过最近邻检测(mutual nearest neighbor check),利用汉明距离的阈值滤掉比较明显的误匹配,并通过比率测试(ratio-test),滤除掉模棱两可的匹配。启发式方法简单有效,但可能会漏掉误匹配或删除掉正确匹配。
ratio-test理解:取图像1中的某个关键点,并在图像2中找出与其距离最近的前两个关键点,在这两个关键点中,若最近的距离除以次近的距离小于某个阈值,则接受这一对匹配点。由于特征空间的高维性,相近的距离可能有大量的错误匹配,从而它的ratio值比较高。Lowe推荐ratio的取值为0.8,但作者对大量存在尺度、旋转和亮度变化的两幅图片进行匹配,实验结果表明ratio取值在0. 4~0. 6为最佳,小于0. 4会造成非常少的匹配点,大于0. 6会造成大量的错误匹配点。
该方法假设邻近区域的匹配点应该与其周围的匹配点具有一致的关系(几何关系,或者其他关系)这里的一致性可以是co-neighboring constraint或者是强制设定一个局部变换关系(我这里理解成是E,F,H矩阵)。 待补充
几何校验是基于全局转变矩阵(Global Transformation),认为两张图片上的所有点都满足一种变换关系(相似变换,仿射变换,单应性变换,基础变换),这里变换关系的计算一般采用RANSAC以及基于RANSAC各种改进算法(从概率角度进行采样改进,加入Sequential probability Ratio test 使得迭代更加有效,加入局部优化 等等 这里是一个大坑,有待挖掘,有兴趣可以看原文的引用) 待补充
从图像数据集中提取出一个潜在一致的模型(参考文献有点多,应该是基于深度学习的一系列方法)
AdaLAM集成了上述优秀思想,整合到一个连贯的框架中,以实现快速高效的外点剔除,在特定的环境下达到了SOTA。
首先有两张图片I1和I2,在两张图片上提取SIFT特征点,存于K1、K2中,用最近邻匹配法从K1、K2中提取得到候选匹配集(putative matches)M。因为描述子自身的限制,M中会有大量的误匹配,我们的目标是得到一个尽可能接近正确的匹配集M’。算法的主要步骤如下图所示:
两个视角观测同一平面会使得落在同一平面上的特征点具有单应性,且两个视角之间的单应性矩阵在局部区域内能够使用仿射变换来近似,仿射变换能够强烈的约束正确匹配点之间几何交叉一致性,是一种非常可靠的滤波器。然而,仿射变换所基于的假设条件如平面性,局部性和正确的映射关系等在实际图像中很难保证:
因此作者从候选匹配点中选择匹配置信度高的匹配点作为种子,并且在种子附近的一个小邻域内计算仿射变换矩阵,以满足上述的假设条件(平面性,局部性和正确的映射关系)。在每个小邻域内都利用RANSAC算法的思想,迭代筛除误匹配点,最终得到正确匹配点的集合。
目标: 选择一组置信度较高且分布较好的关键点作为种子点
选择方法: 首先给每个关键点分配一个置信度分数(confident score),对于置信度分数较低的点做半径为R圆内的局部非极大值抑制(local non-maximum suppression),如果该点的置信度为极大值,即圆内置信度最高的点,那么将该点升级为种子点(seed point)。其中置信度分数由ratio-test给出。
PS: 置信度和置信度分数是不一样的,置信度分数越低,置信度越高。
计算匹配时其实是从1对多的点对匹配中找到描述子距离最小的作为最终匹配结果,而ratio-test给的分数指的是 score = 最小距离/次小距离,这个分数越小,说明这个点没有其他模棱两可的备胎,也就是置信度越高。
这里其实类似传统的邻域一致性约束,选取种子点附近满足条件的的匹配,构成邻域来支持Si种子点。令Si=(xSi1,xSi2),其中xSi1、xSi2分别表示两张图上的第i个种子匹配对,它们之间符合相似变换(即旋转+缩放,其中旋转αSi=αSi2−αSi1, 缩放为σSi=σSi2/σSi1)。那么对于任意匹配(p1,p2)=((x1,d1,σ1,α1),(x2,d2,σ2,α2))∈M,其中d表示描述子,如果上述任意匹配满足如下约束关系,就能够被纳入到支持种子点Si的匹配集合Ni⊆M中,该约束关系为:
上式中αp=α2−α1,σp=σ2/σ1表示两个匹配点之间的角度与尺度差异,是该任意匹配对应的相似变换;R1与R2分别表示图像I1与I2的种子点扩散半径;λ表示邻域圈圈的覆盖程度的正则项。
第1个式子约束了候选匹配点与种子匹配点之间的距离应小于一定的范围,第二个式子约束了种子匹配点和候选匹配点之间的方向变换和尺度变换也要小于一定的阈值,满足上述条件的候选匹配点才归属于相应的种子匹配点。
最后,对每个小邻域进行自适应仿射变换验证,按照RANSAC的思想从邻域内选取最小样本集(最少只需要两对匹配点)来估计仿射变换矩阵,然后筛除离群点,续再从剩余的匹配点中采样继续估计仿射变换矩阵,如此反复迭代一定的次数,剩下的匹配点就看作是正确的匹配点。本文采用的是PROSAC(RANSAC的一种改进版)的采样思想,不是随机的从候选匹配点中选择样本来估计仿射变换矩阵,而是引入比率测试(ratio-test)得分来偏置采样分布,使得置信度更高的匹配点更优先被选中。
在第j次迭代中,邻域Ni上采样拟合得到的仿射矩阵为 Aji ,则对于邻域内的候选匹配点k,其对应的偏差值rk如下:
简单来讲,偏差值rk小于一定阈值的,就可以认为是正确匹配点,而大于一定阈值的,就认为是误匹配点(离群点)。但本文是对一个局部邻域内进行仿射变换估计,其只能够反映局部区域的图像运动情况,即不同的种子点区域有不同的仿射变换模型,因此没法得到一个具体的固定的阈值,适用于所有种子匹配点对应的邻域。本文采用了一种基于假设检验的方式来判断当前的候选匹配点是否为正确匹配点,假设所有的离群点都符合均匀分布,则可以将偏差值rk映射到一个置信度度量值ck上(思路来自这篇论文):
其中R表示所有候选匹配点对应的偏差值集合,并从小到大排序(从0开始标序)。P表示偏差值小于等于rk的匹配点的数量,P=1+k(因为R从0开始标序)。R2是上文提到的种子匹配点对应邻域范围的半径。假设rk对应的匹配点k是最差的正确匹配点,或者说rk是允许接受的最大偏差值,则P就表示实际找到的正确匹配点的数量,r2k/R22就表示半径为rk的范围占整个邻域范围的面积比例(因为是圆形区域所以用半径的平方计算比例),那么∣R∣r2k/R22就表示满足前提假设(离群点符合均匀分布)条件下应该找到的正确匹配点数量。置信度ck就是真实找到的正确匹配点数量和估计的正确匹配点数量的比值,比值越大,则说明k点为正确匹配点的概率越高。因此设定一个固定的阈值tc,将置信度大于等于tc的点判断为正确匹配点。对于每个邻域按上述的方法迭代筛选,只输出内点(正确匹配点)数量最多的那次的结果,并且如果某个邻域输出的内点数量小于阈值tn,该邻域也会被筛除。剩余的即为最终的匹配点。注意每次迭代需要更新上述残差/置信度以及内点,后一次利用前一次得到的内点去拟合新的仿射矩阵,然后做校验,直至达到最大迭代次数,最后输出内点。
本文前半部分内容并不难理解,就是通过选取种子匹配点和划分局部邻域,来满足仿射变换假设条件,从而可以采用基于RANSAC方法来筛除离群点。比较困难的点在于不同的邻域都包含不同的仿射变换模型,进而很难用一个固定阈值来判断哪些点属于内点,作者采用的方法相当于根据每个邻域内的实际观测结果,来估计一个置信度值,将置信度高于阈值的点判定为内点,这种方法的好处在于置信度值是会根据邻域内的实际情况自适应调整的,从而可以用一个固定的阈值来进行判断。
参考博客:
AdaLAM 论文翻译_睫力上爬的博客-CSDN博客_ratio-test 置信度
论文阅读笔记《AdaLAM: Revisiting Handcrafted Outlier Detection》_深视的博客-CSDN博客
Learning of descriptor detection_wwwwwinner的博客-CSDN博客
笔记:AdaLAM: Revisiting Handcrafted Outlier Detection 超强外点滤除算法 | RealCat
AdaLAM: Revisiting Handcrafted Outlier Detection_lizhaohu01的博客-CSDN博客
【五分钟读顶会】别再用RANSAC了,图像匹配更高效方法开源 - 知乎
AdaLAM 超强外点滤除算法 - 知乎