RANSAC算法在处理特征误匹配的时候常常被提及,算法不论大小,不学不明,那么今天让我们一起探秘这一个经典算法!
这一部分实际上在SLAM知识篇中我已经做了阐述,这里单独拿出来。如果还有什么问题,请留言。
一篇RANSAC简介博客: https://blog.youkuaiyun.com/robinhjwy/article/details/79174914
另一篇博客也很有帮助,可以参考:https://blog.youkuaiyun.com/YunlinWang/article/details/78147026
ORBSLAM2中的RANSAC算法举例: https://blog.youkuaiyun.com/qq_18661939/article/details/52077491
算法伪代码——
伪码形式的算法如下所示:
输入:
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_inliersfor ( 每个数据集中不属于maybe_inliers的点 )
if ( 如果点适合于maybe_model,且错误小于t )
将点添加到consensus_set
if ( consensus_set中的元素数目大于d )
已经找到了好的模型,现在测试该模型到底有多好
better_model = 适合于c