RANSAC

我的未来我决定 提交于 2019-12-01 21:39:27

原文链接

RANSAC简介

RANSAC是 RANdom SAmple Consensus 的缩写,中文翻译叫随机采样一致。它可以从一组观测数据中,找出符合某些数学模型的样本集,并且估计出这个数学模型的参数。举个例子,如下图所示,这些点是观测数据,给定的数学模型是圆形和直线,我们想从这些观测数据中找出圆形和直线,并且估计出它们的几何参数。


RANSAC算法

下面介绍一下RANSAC算法:

输入:观测数据data,数学模型models;输出是匹配data的数学模型match_models和对应的样本集sub_data

1. 随机采样data中的一些样本sub_data

2. 用数学模型match_model去匹配样本集sub_data,估计出数学模型的参数

3. 评价估计出来的match_model,如果可以接受,则把它放入match_models,并且从原始观测数据中剔除对应的样本集sub_data

4. 迭代步骤1-3,直到估计出了所有的数学模型,或者迭代次数到了最大值

RANSAC算法是一类模式识别方法的框架,算法步骤里的具体内容是需要根据实际情况来实例化的。


三维点云基本图元检测

下面我们介绍一个RANSAC算法的应用,检测三维点云的基本图元。基本图元包括:平面,球面,圆柱面和圆锥面。如下图所示,红色-平面;绿色-圆柱面;黄色-球面;蓝色-圆锥面。

输入:三维点云;数学模型是四类基本图元,它们的参数分别是:

  • 平面:平面上一个点 + 法线
  • 球面:球心 + 半径
  • 圆柱面:圆心 + 半径 + 主轴方向
  • 圆锥面:锥心 + 锥面角 + 主轴方向

1. 随机采样点云中的三个点,做为一个样本集。

2. 用这三个点分别估计出四类图元的参数。

3. 评价估计出的图元:计算图元的支撑集,也就是点云里有多少个点在图元上。取最大支撑集对应的图元类型,并且评估它是否可接受

4. 迭代步骤1-3,直到检测出了所有的图元集,或者迭代步骤到达了最大值

下面讨论一下这个算法:

  • 采样方法:步骤一采用的是随机采样,可能均匀采样会更加好一些。另外这三个点如何去采?三个点如果距离太近,会使得图元参数估计不稳定;距离太远的话,可能它们就分布在不同的图元上了。
  • 图元参数的估计:三个带法线的点,确实可以估计出图元的参数。但是通常估计出来的参数是不准确的,因为点云一般是有噪音的。如何从三个点出发,稳定的估计出高质量的图元参数,也是一个问题。
  • 评估图元是否可接受:一个采样样本估计出了一个候选图元,那么到底是否该接受它呢?举个例子,比如一个圆柱面。我们知道曲面可以用平面去分片逼近。假设我们用一个平面拟合了圆柱的部分点,那么这个平面是否可接受?如果圆柱面占点云的面积比足够大,那么这个局部平面的支撑集面积也不会小。在不知道圆柱面的情况下,我们如何去判断这个平面是否可接受?我们可以创建一个候选集,每次有了候选图元,就把它放入候选集,如果候选图元足够好的话,就接受它。过早的接受图元,可能会导致误判;那如果一直增加候选集,推迟判断的话,会影响算法的性能,因为接受图元后可以减少点云数据,使得后续的迭代性能增加。
  • 迭代次数:理论上采样点越多,算法的稳定性越好,但是性能会下降。所以采样数和性能需要做一个平衡。另外采样策略也可以做一些调整,比如先少量的均匀采样一些样本来考察,如果运气好,可以接受一些面积大的图元,这样就可以减少后续迭代的数据规模。

总之,RANSAC提供了一种很好的算法框架。算法的具体内容和策略,是需要根据实际情况来设计的,需要综合平衡各种因素,比如算法的稳定性,性能,质量等。

有兴趣的读者,欢迎参考视频版本

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!