RANSAC算法详解

随机抽样一致算法(random sample consensus,RANSAC),采用迭代的方式从一组包含离群的被观测数据中估算出数学模型的参数。

算法简介:RANSAC算法的基本假设是样本中包含正确数据(inliers,可以被模型描述的数据),也包含异常数据(outliers,偏离正常范围很远、无法适应数学模型的数据),即数据集中含有噪声。这些异常数据可能是由于错误的测量、错误的假设、错误的计算等产生的。同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。

基本思想描述:

①考虑一个最小抽样集的势为n的模型(n为初始化模型参数所需的最小样本数)和一个样本集P,集合P的样本数#(P)>n,从P中随机抽取包含n个样本的P的子集S初始化模型M;
②余集SC=P\S中与模型M的误差小于某一设定阈值t的样本集以及S构成S*。S*认为是内点集,它们构成S的一致集(Consensus Set);
③若#(S*)≥N,认为得到正确的模型参数,并利用集S*(内点inliers)采用最小二乘等方法重新计算新的模型M*;重新随机抽取新的S,重复以上过程。
④在完成一定的抽样次数后,若未找到一致集则算法失败,否则选取抽样后得到的最大一致集判断内外点,算法结束。

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

RANSAC的基本假设:

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

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

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

概述:

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

2、计算适合内群的模型

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

4、记下内群数量

5、重复以上步骤多次

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

这里有几个问题:

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

2、以及要重复多少次

 

算法:

伪代码的算法如下所示:

输入:

Data       一组观测数据

Model     适应于数据的模型

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

 k        算法的迭代次数

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

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

参考链接: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 < 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

 

参数决定:

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

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

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

1-p = (1 - w^n)^k

P = 1 - 1 - w^n)^k

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

 

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

 

优缺点:

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

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

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

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

你可能感兴趣的:(计算机视觉,立体视觉)