学习orbslam过程中对RANSAC算法的理解

RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。

    RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:
    1.有一个模型适应于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
    2.用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
    3.如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
    4.然后,用所有假设的局内点去重新估计模型,因为它仅仅被初始的假设局内点估计过。
    5.最后,通过估计局内点与模型的错误率来评估模型。
    这个过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为比现有的模型更好而被选用

算法
伪码形式的算法如下所示:摘自https://blog.csdn.net/robinhjwy/article/details/79174914
输入:
data —— 一组观测数据
model —— 适应于数据的模型
n —— 适用于模型的最少数据个数
k —— 算法的迭代次数
t —— 用于决定数据是否适应于模型的阀值
d —— 判定模型是否适用于数据集的数据数目
输出:
best_model —— 跟数据最匹配的模型参数(如果没有找到好的模型,返回null)
best_consensus_set —— 估计出模型的数据点
best_error —— 跟数据相关的估计出的模型错误

iterations = 0
best_model = null
best_consensus_set = null
best_error = 无穷大
while ( iterations < k ) 
maybe_inliers = 从数据集中随机选择n个点 
maybe_model = 适合于maybe_inliers的模型参数 
consensus_set = maybe_inliers for ( 每个数据集中不属于maybe_inliers的点 ) 
if ( 如果点适合于maybe_model,且错误小于t ) 
将点添加到consensus_set 
if ( consensus_set中的元素数目大于d )
 已经找到了好的模型,现在测试该模型到底有多好 
better_model = 适合于consensus_set中所有点的模型参数 
this_error = better_model究竟如何适合这些点的度量 
if ( this_error < best_error )
 我们发现了比以前好的模型,保存该模型直到更好的模型出现 
best_model = better_model 
best_consensus_set = consensus_set 
best_error = this_error 
增加迭代次数 
返回 best_model, best_consensus_set, best_error

你可能感兴趣的:(SLAM)