随机取样一致 RANSAC (Random Sample Consensus)。能从包含“异常点”的数据集中,通过迭代方式估计数学模型的参数。它是一种不确定的算法——它有一定的概率得出一个合理的结果;为了提高概率必须提高迭代次数。
- 随机选取 s 个点 (如果是线性拟合,估计一条直线的话则 s 的值至少为2,若是平面则另选);
- 选取数据之后来计算模型参数(例如:估计一条直线则是选取两个点,然后来确定直线的参数);
- 然后计算其他所有的点到该模型的误差(例如:线性则是计算其他所有的点到直线的距离);
- 若误差小于一定范围,则被看成是内点( inliers),并统计内点的个数;
- 重复上述过程;
看完上述步骤可以发现一个问题,对于线性拟合,那么需要 C M 2 C_{M}^{2} CM2 次循环才能保证选到最好模型,若是其他拟合,则需要 C M s C_{M}^{s} CMs 次才可以,导致 计算复杂度过高。
但是RANSAC算法则是当选取点这个过程随机到一定程度,就能保证这个模型获得一个好的结果。
详述RANSAC算法
- 迭代 N 次,然后按照均匀分布的形式随机选取 s 个点,然后计算内点个数(距离小于阈值 t),最后如果有 d 个或更多内点数,模型寻找结束,否则再随机迭代;
- 特别注意 s、t、N、d 这四个参数,需要自己去调整;
- 对于 N 的取值可以根据下面公式来确定。
下面则是已知 e、s 的取值,得到的 N 值的表格