RANSAC算法详解

数据分两种:有效数据(inliers)和无效数据(outliers)。偏差不大的数据称为有效数据,偏差大的数据是无效数据。如果有效数据占大多数,无效数据只是少量时,我们可以通过最小二乘法或类似的方法来确定模型的参数和误差;如果无效数据很多(比如超过了50%的数据都是无效数据),最小二乘法就失效了,我们需要新的算法

RANSAC的基本假设:

1、内群数据可以通过几组模型的参数来叙述其分别,而“离群”数据则是不适合模型化的数据

2、数据会受噪声影响,噪声指的是离群,例如从极端的噪声或错误解释有关数据的测量或不正确的假设

3、RANSAC假定,给定一组(通常很小)的内群,存在一个程序,这个程序可以估算最佳解释或最适用于这一数据模型的参数

概述:

1、在数据中随机选择几个点设定为内群

2、计算适合内群的模型

3、把其他刚才没有选到的点带入刚才建立的模型中,计算是否为内群

4、记下内群数量

5、重复以上步骤多次

6、比较哪次计算中内群数量最多,内群最多的那次所建的模型就是我们所要求的解

这里有几个问题:

1、一开始的时候我们要随机选择多少点

2、以及要重复多少次

 

算法:

伪代码的算法如下所示:

输入:

Data       一组观测数据

Model     适应于数据的模型

        适应于模型的最小数据个数

        算法的迭代次数

         用于决定数据是否适应于模型的阈值

         判定模型是否适用于数据集的数据数目

参考链接:http://blog.csdn.net/pi9nc/article/details/26596519

Best_model  与数据最匹配的模型参数(没有返回null)

Best_consensus_set 估计出模型的数据点

Best_error   跟数据相关的估计出的模型错误

iterations 0
best_model null
best_consensus_set null
best_error 无穷大
while iterations )
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

 

参数决定:

假设每个点是真正内群的概率是w真正内群的数目/数据总共的数量

通常我们不知道w是多少,wn次方是所选择的n个点都是内群的概率,1-w^n所选择的n个点至少有一个不是内群的概率,(1-w^n^k表示重复k次都没有全部的n个点都是内群的概率

这边定算法跑k次以后成功的概率是p,那么,

1-p (1 w^n)^k

w^n)^k

所以如果希望成功率提高,0.99,n不变时,k越大,p越大;当 不变时,n越大,所需的k就越大,通常,w位置,所以选小一点比较好

 

应用:RASAC常被用在电脑视觉,例如对应点问题和估算立体摄影机双眼相对点的基本矩阵

 

优缺点:

RANSAC 算法的优点是能鲁棒的估计模型参数。例如,他能从包含大量局外点的数据集中估计出高精度的参数。

缺点是它计算参数的迭代次数没有上限,如果设置迭代次数的上限,得到的结果可能不是最优的结果,甚至可能得到错误的结果。

RANSAC只有一定的概率得到的可信的模型,概率与迭代次数成正比。另一个缺点是它要求设置跟问题相关的阈值,

RANSAC职能从特定的数据集中估计出一个模型,如果存在两个(或多个)模型,RANSAC不能找到别的模型

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值