RANSAC

RANSAC范例的正式描述如下:

首先,要给定:

         1一个模型,该模型需要最少n个数据点去实例化它的自由参数;

         2一组数据点P,P中包含数据点的数量#(P)大于n。

然后

从P中随机地选择n个点(组成P的一个子集S1)并实例化这个模型(构造成M1)。

接下来

         利用实例化的模型M1去测定P中点的某个子集S1*,这些点相对于M1的错误被限制在一个给定的阈值下,其中S1*被称作S1的一致性集合。

         或者:

         利用实例化的模型M1去逐个测定P中的其它点,舍掉那些偏离M1较大的点,保留那些偏离M1较小的点并组成一个集合S1*,该集合被称作S1的一致性集合。

接下来的步骤要对S1*中点的数量#(S1*)进行条件判定:

         if( #(S1*) >= t )         // t是一个阈值,是P中离群点(相对于M1)数量的估计函数

         {

                   利用S1*(+S1)去计算一个新的模型M1*;// 例如用最小二乘法

         }

         if( #(S1*) < t )

         {

                   随机地选择一个新的子集S2,并重复以上过程;

                   如果

在几次预定义的实验次数之后,找到的一致性集合含有点的数量总是小于t;

                   那么

要么使用已经找到的最大的一致性集合去解决这个模型;

                              要么以失败来终结掉这个算法。

}

原文地址:https://www.cnblogs.com/pangblog/p/3301691.html