RANSAC实际上是一种基于迭代的思想,用来在含有离群的被观测数据中估算出数学模型的参数。如下图,有一系列数据点,现在要拟合一条直线来逼近下列数据,如果直接使用最小二乘法,会得到下图中红色那条直线,因为它会尽可能地去拟合所有的数据点,包括噪声。但很显然,这并不科学。如何让模型不去学习那些噪声,就是RANSAC要解决的问题。
RANSAC的步骤:
- 在数据中随机选n个点设定为内群
- 计算适合内群的模型
- 把其他刚才没选到的点代入模型,根据给定的阈值判断其是不是内群
- 记下内群的数量
- 重复以上步骤k次
- 比较哪次记下的内群数量多,内群数量最多的那次建立的模型就是我们要求的解
注:不同问题对应的数学模型不同,因此计算模型参数的方法也不同。当然,RANSAC的作用不在于计算模型参数,而是为模型提供更好的输入数据。
那么问题来了:k和n的值取多少合适?下面通过数学论证:
每个点是真正内群的概率为: w = 内 群 数 目 内 群 数 目 + 外 群 数 目 w=\frac{内群数目}{内群数目+外群数目} w=