目录
7、PCL中Sample_consensus模块支持的几何模型
9、使用RandomSampleConsensus类获得点云的拟合平面模型
1、算法简介
RANSAC算法的基本假设是样本中包含正确数据(inliers,可以被模型描述的数据),也包含异常数据(outliers,偏离正常范围很远、无法适应数学模型的数据),即数据集中含有噪声。这些异常数据可能是由于错误的测量、错误的假设、错误的计算等产生的。同时RANSAC也假设,给定一组正确的数据,存在可以计算出符合这些数据的模型参数的方法。
2、基本思想描述
RANSAC基本思想描述如下:
①考虑一个最小抽样集的势为n的模型(n为初始化模型参数所需的最小样本数)和一个样本集P,集合P的样本数#(P)>n,从P中随机抽取包含n个样本的P的子集S初始化模型M;
②余集SC=P\S中与模型M的误差小于某一设定阈值t的样本集以及S构成S*。S*认为是内点集,它们构成S的一致集(Consensus Set);
③若#(S*)≥N,认为得到正确的模型参数,并利用集S*(内点inliers)采用最小二乘等方法重新计算新的模型M*;重新随机抽取新的S,重复以上过程。
④在完成一定的抽样次数后,若未找到一致集则算法失败,否则选取抽样后得到的最大一致集判断内外点,算法结束。
如果上面的表达比较抽象,可以换一种更清晰的表达,如下:
RANSAC通过反复选择数据中的一组随机子集来达成目标。被选取的子集被假设为局内点,并用下述方法进行验证:
- 有一个模型适用于假设的局内点,即所有的未知参数都能从假设的局内点计算得出。
- 用1中得到的模型去测试所有的其它数据,如果某个点适用于估计的模型,认为它也是局内点。
- 如果有足够多的点被归类为假设的局内点,那么估计的模型就足够合理。
- 然后,用所有假设的局内点去重新估计模型,因为它仅仅被初始的假设局内点估计过。
- 最后,通过估计局内点与模型的错误率来评估模型。
这个过程被重复执行固定的次数,每次产生的模型要么因为局内点太少而被舍弃,要么因为它比现有的模型更好而被选用。
3、算法优化策略
①如果在选取子集S时可以根据某些已知的样本特性等采用特定的选取方案或有约束的随机选取来代替原来的完全随机选取;
②当通过一致集S*计算出模型M*后,可以将P中所有与模型M*的误差小于t的样本加入S*,然后重新计算M*。
4、案例说明
使用RANSAC——拟合直线
5、PCL随机采样一致性算法
RANSAC算法的输入是一组观测数据,一个可以解释或者适应于观测数据的参数化模型,一些可信的参数。
- RANSAC从样本中随机选择数据中的一个样本子集,用最小方差估计算法对这个子集计算参数模型,然后计算所有样本与该模型的偏差,再使用一个预先设定好的阈值与这个偏差比较,当偏差小于阈值时,该样本点属于模型内样本点inliers,否者为模型外样本点outliers。
- 记录下当前的inliers,并重复这1中的过程。每一次重复,都记录当前最佳的模型参数,所谓最佳,就是inliers的个数最多。此时对应的inliers个数为best_ninliers。每次迭代的结尾,都会根据期望的误差率,best_ninliers,总样本个数,当前迭代次数,计算一个迭代结束评判因子,据此决定是否迭代结束。迭代结束后,最佳模型参数及时最终的模型参数估计值。
理论上RANSAC可以剔除outliers的影响,并得到全局最优的参数估计。但是RANSAC算法有两个问题:
- 每次迭代中都要区分outliers和inliers,因此需要事先设定阈值。当模型有明显的物理意义时,这个阈值还比较容易设定,但是若模型比较抽象