一、RANSAC算法
RANSAC(Random Sample Consensus,随机抽样一致性算法)是一种迭代方法,用于从一组包含大量“外点”(不符合模型的数据点)的数据中估计数学模型的参数。它特别适用于同时包含“内点”(符合模型的数据点)和“外点”的数据集。主要用于解决从一组包含大量噪声和异常值(即“外点”)的数据中估计数学模型参数的问题。这种算法特别适用于那些“内点”数量相对较少,但足以描述整体数据趋势的场景。内点是指那些符合模型假设的数据点,而外点则是不符合模型的数据点,可能是由测量错误、错误的数据记录或数据中的异常现象引起的。
二、应用场景
- 直线拟合:在二维平面上,从包含噪声的数据点中拟合出一条最佳直线。
- 平面拟合:在三维空间中,从包含噪声的数据点中拟合出一个最佳平面。
- 基本矩阵和单应性矩阵估计:在计算机视觉中,用于估计两幅图像之间的基本矩阵或单应性矩阵,这是进行图像拼接、立体视觉和三维重建等任务的基础。
- 运动估计:在视频处理或机器人导航中,通过匹配连续帧之间的特征点来估计相机的运动。
- 数据清洗:通过识别并去除数据集中的外点,提高数据的整体质量。
三、算法原理
- 给定一个数据集 S S S,从中选择建立模型所需的最小样本数(例如直线最少由两个点确定,所以最小样本数是2,而平面可以根据不共线三点确定,所以最小样本数为3),记选择数据集为 S ′ S' S′;
- 使用选择的数据集 S ′ S' S′计算得到一个数学模型 M M M;
- 用计算的模型 M M M去测试数据集中剩余的点,如果测试的数据点在误差允许的范围内(计算所有点到这个模型的误差(或距离)),如果某个点的误差小于某个预设的阈值,则将该数据点判为内点(inlier),否则判为外点(outlier),记所有内点组成的数据 S ∗ S^* S∗,表示为 S S S的一致性集合;
- 比较当前模型和之前推出的最好的模型的“内点”的数量,记录最大“内点”数量时模型参数和“内点”数量;
- 重复1-4步,直到迭代结束或者当前模型已经足够好了(“内点数目大于设定的阈值”)。
这里的迭代次数可以通过理论推算获得。在一定的置信概率下,其最小样本数 S S S与至少取得一个良性采样子集的概率P满足:
P = 1 − ( 1 − t S ) m P=1-(1-t^S)^m P=1−(1−tS)m
其中, t = 内点数 内点数 + 外点数 t=\frac{内点数}{内点数+外点数} t=内点数+外点数内点数表示为数据集合中内点概率, N N N是计算模型参数需要的最小数据量。
因此,在基本子集的在迭代次数内,至少有一次采样使得采样子集内的 N N N个点均为内点,从而保证在迭代次数中,至少存在一次采样能够取得目标函数的最大值,因此终止循环条件应满足:
m ≥ ln ( 1 − P ) ln ( 1 − 1 N ) m≥\frac{\ln{(1-P)}}{\ln{(1-1^N)}} m≥ln(1−1N)ln(1−P)
四、算法缺点
- 计算成本高:由于需要多次迭代和计算内点,对于大数据集来说,计算成本可能很高。
- 参数敏感性:算法的性能可能受到迭代次数、内点阈值等参数的影响。
- 概率性:算法得到的模型不一定总是最优的,因为结果取决于随机选择的样本子集。
五、代码实现
Do RANSAC
Wait...
六、参考
- https://mp.weixin.qq.com/s/dUu2YfEPiZTrR2A3XnrNfQ