RANSAC算法是什么
RANSAC算法于1981年由Fischler和Bolles提出,全程是RANdom SAmple Consensus,一般中文翻译为“随机抽样一致性算法”,它是一个迭代算法,主要用于从包含外点(outliers,可理解为噪声)的数据集中估计数学模型的参数。RANSAC算法有两个假设,第一个是假定所有的数据都是由内点和外点组成,内点可由特定参数的模型所表示,而外点则在任何情况下都不能满足由内点的模型,另外一个必要的假设是存在程序可以从数据中最优的估计出所选择模型的参数。
RANSAC算法迭代过程
RANSAC算法的输入需要数据集和可以表示数据集的参数化模型,以及一些置信参数。RANSAC算法通过迭代的从原始数据里选择一个随机性的子集来得到最终结果,假定子数据集为内点,然后通过以下步骤来验证这个假设:
- 由假定的内点拟合出一个数据模型,即根据内点重构模型的所有自由参数;
- 所有其他的数据在拟合出的模型上进行验证,假如某个点符合所得到的模型,那么这个点就被认为也是内点;
- 如果有足够多的点被认为是内点,则估计的模型就相当好;
- 然后根据所有的内点重新估计模型,因为之前的模型只是从初始的内点估计出来的;
- 最后通过内点和模型的误差来评估整个模型的好坏。
这个过程重复固定次数,每次都会产生一个模型,假如太少的点被归类为内点,则模型被丢弃,反之则得到一个改进的模型以及测量误差,如果测量误差低于上次保存的模型的话,就保留改进的模型。
RANSAC算法优缺点
RANSAC算法的优点是能够对模型参数进行鲁棒估计,也就是说,即使数据集中存在大量的异常值,它也可以高精度地估计参数。RANSAC的缺点是计算这些参数所需的时间没有上限,当计算的迭代次数有限时,得到的解可能不是最优解,甚至可能不是一个很好地适合数据的解。所以RANSAC提供了一个