现在的位置: 首页 > 综合 > 正文

RANSC算法(随机样本一致性)

2013年03月14日 ⁄ 综合 ⁄ 共 2203字 ⁄ 字号 评论关闭

一、基本思想

    它是根据一组包含异常数据的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。它于1981年由 Fischler和Bolles最先提出[1]。

 

二、算法描述

    (1)输入:

    1、判断样本是否满足模型的误差容忍度t。t可以看作为对内点噪声均方差的假设,对于不同的输入数据需采用人工干预的方式预设合适的门限,且该参数对RANSAC性能有很大的影响;

    2、随机抽取样本集S的次数。该参数直接影响SC中样本参与模型参数的检验 次数,从而影响算法的效率,因为大部分随机抽样都受到外点的影响;

    3、表征得到正确模型时,一致集S*的大小N。为了确保得到表征数据集P的正确模型,一般要求一致集足够大;另外,足够多的一致样本使得重新估计的模型参数更精确。

    4、算法的迭代次数k。

    5、适应于数据的模型model。

    6、随机在样本抽样的数目n。

    (2)算法流程:

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

    (3)输出:

    1、best_model —— 跟数据最匹配的模型参数(如果没有找到好的模型,返回null)

    2、best_consensus_set —— 估计出模型的数据点

    3、best_error —— 跟数据相关的估计出的模型错误

 

 三、优缺点

    RANSAC的优点是它能鲁棒的估计模型参数。例如,它能从包含大量局外点的数据集中估计出高精度的参数。RANSAC的缺点是它计算参数的迭代次数没有上限;如果设置迭代次数的上限,得到的结果可能不是最优的结果,甚至可能得到错误的结果。RANSAC只有一定的概率得到可信的模型,概率与迭代次数成正比。RANSAC的另一个缺点是它要求设置跟问题相关的阀值。RANSAC只能从特定的数据集中估计出一个模型,如果存在两个(或多个)模型,RANSAC不能找到别的模型。

 

四、应用

    RANSAC算法经常用于计算机视觉,例如同时求解相关问题与估计立体摄像机的基础矩阵。

 

五、伪代码描述

    输入:

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

 

六、优化策略

    ①如果在选取子集S时可以根据某些已知的样本特性等采用特定的选取方案或有约束的随机选取来代替原来的 完全随机选取;

    ②当通过一致集S*计算出模型M*后,可以将P中所有与模型M*的误差小于t的样本加入S*,然后重新计算M*。

 

七、参考

http://www.cnblogs.com/tjulxh/archive/2011/12/31/2308921.html

http://blog.csdn.net/xufuyuan/article/details/7106040

 

抱歉!评论已关闭.