标签:
在基于特征点的视觉SLAM中,通常情况下,在特征匹配过程中往往会存在误匹配信息,使得计算获取的位姿精度低,易产生位姿估计失败的问题,因此,剔除这些错配点有很大的必要性。常会用到RANSAC算法进行消除两两匹配图像的误匹配点,如果只停留在应用的层面上很简单,直接调用opencv函数就行,看到效果时,感觉好神奇,到底怎么实现的啊,以前一直也没弄太明白,与图像结合的博客也比较少,在查阅了一些资料后,笔者似乎明白了一点,希望笔者的总结会对您的理解有帮助。
首先先介绍一下RANSAC算法(RANdom SAmple Consensus随机抽样一致)
(1)数据由“局内点”组成,例如:数据的分布可以用一些模型参数来解释;
(2)“局外点”是不能适应该模型的数据;
(3)除此之外的数据属于噪声。
局外点产生的原因有:噪声的极值;错误的测量方法;对数据的错误假设。
RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:
1.有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
2.用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
3.如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
4.然后,用所有假设的局内点去重新估计模型,因为它仅仅被初始的假设局内点估计过。
5.最后,通过估计局内点与模型的错误率来评估模型。
这个过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用。
RANSAC算法是寻找一个最佳单应性矩阵H,矩阵大小为3*3,目的是找到最优的参数矩阵,使得满足该矩阵的数据点个数最多,通常令,由于单应性矩阵有8个未知参数,所以需要8个线性方程求解,对应到点位置信息上,一组点对可以列出两个方程,则至少包含4组匹配点对。
其中表示目标图像的角点位置,为场景图像角点位置。S为尺度参数。
RANSAC算法从匹配数据集中随机抽出4个样本并保证这四个样本之间不共线。计算出单应性矩阵矩阵,然后利用这个模型测试所有数据,并计算满足这个模型数据点的个数与投影误差(即代价函数)若此模型为最优模型,则对应的代价函数最小:
注:迭代次数k在不大于最大迭代次数的情况下,是在不断更新而不是固定的。
其中,p为置信度,一般取0.995,w为内点的比例,m为计算模型所需要的最少样本数=4.
标签:
原文地址:http://www.cnblogs.com/zjiaxing/p/5548250.html