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;
那么,
要么使用已经找到的最大的一致性集合去解决这个模型;
要么以失败来终结掉这个算法。
}