经过ORB提取以及匹配特征点对后,再通过前面的快速最近邻算法、余弦相似度提纯操作对特征点对进行初步筛选,我们已经初步得到了一系列比较好的特征点对,这些是2D-2D的特征点匹配关系,然后我们需要从匹配成功的点中恢复帧间位姿,实现位姿估计。
我们利用RANSAC算法选出所有匹配成功特征点对中的内点,利用迭代思想估计最佳位姿。
例如,这是相邻两帧图片之间特征点匹配图,可以看到,仍然存在许多斜线点对,很乱,这种匹配情况一般出现在运动物体大幅运动过程,而相邻两帧图片中比较少出现这种大幅运动,一般都是略微的平移,所以,还需要最后使用RANSAC算法选出匹配成功特征点对中的内点,利用迭代的思想挑取最优数据估计最佳位姿。
一次RANSAC迭代过程: 1、随机在所有点对中选出一部分内点作为初值,拟合一个初始模型 这些点对中有正常的,也有错误的,但我们先选出一部分,先用它来拟合一个模型 2、用(1)中拟合的模型对所有的数据进行测试,若样本中的某些点适合模型,则扩充内点集合 把适合当前拟合模型的点认为是内点 3、当内点数目足够多的时候,认为估计的模型合理 这个多是相对于总数来说的 4、用当前所有内点重新估计模型,作为最终的模型 因为我们使用的模型仅仅是用一开始选定的点来估计的,现在需要用更新的内点集合重新估计一个新模型 5、对模型进行评价 这只是一次迭代过程,我们要继续选点重复如上操作,因为可能某次选到的正好都是不符合情况的误匹配的特征点,得到一个不断扩充外点的模型,这种是要淘汰的。重复执行指定次数,每次产生的模型要么因为局内点太少被舍弃,要么因为比现有的模型更好而被选用 假如内点数量不足,则重新选点进行迭代 假如模型的评价指标在所有迭代结果中最佳,则选用这个模型
这是经过RANSAC算法处理后的匹配情况:
原理浅析: 假设P表示迭代过程中出现过好的模型的概率,好的意思就是抽到用来计算模型的点全都是局内点 假设W=局内点数目/数据点总数目 (W是未知的,不然我已经知道了哪些是局内点,何必迭代来找,此处假设局内点占比用来推导) 假设计算模型参数需要n个点 n 个点中至少有一个点为局外点的概率为:1-W^n
1-p=(1-w^n)^k
等式两边均是 k次迭代没有出现好的模型的概率
我们可以看出,当K 趋近无穷时,P会趋近于1,这说明只要迭代次数够大,那么一定会出现上面说的幸运情况
我们也可以用对数反解出迭代次数K: 假设需要P为0.99,n 易知,w可以估计一个
通过这个过程,我们不难发现其缺点,也就是算法随机性太高,必须加大迭代次数来提高精度,而为了使得算法有更好的效果,我们才在ORB提取匹配后加入一系列的预处理操作,增大局内点占比,使得在较底迭代次数下能有更高概率得到最佳筛选
|