模型拟合?
采样一致性的目的:用于排除错误的样本。
基于采样一致性算法的应用主要是对点云进行分割,根据不同设定的几何模型,估计对应的几何模型的参数,在一定允许误差范围内分割出在模型上的点云。
目前PCL中支持的几何模型分割有空间平面、直线、二维或三维圆周、圆球、锥体。
随机采样一致性的另一个应用就是点云的配准对的剔除。
RANSAC随机采样一致性算法简介
RANSAC是一种随机参数估计算法。
- RANSAC从样本中随机抽选出一个样本子集
- 使用最小方差估计算法对这个子集计算模型参数
- 然后计算所有样本与该模型的偏差
- 再使用一个预先设定好的阈值与偏差比较
- 当偏差小于阈值时,该样本点属于模型内样本点(inliers),局内点或内点。
- 否则为模型外样本点(outliers),局外点或外点。
- 记录下当前的inliers的个数,然后重复这一过程。
- 每一次重复,都记录当前最佳的模型参数,所谓最佳:即inliers的个数最多,此时对应的inliers个数为best_ninliers。
- 每次迭代的末尾,都会根据期望的误差率、best_ninliers、总样本个数、当前迭代次数,计算一个迭代结束评判因子,据此决定是否迭代结束。(很像深度学习中的每轮训练几乎一致)。
迭代结束后,最佳模型参数就是最终的模型参数估计值。(跟深度学习一模一样呀。)
RANSAC理论上可以剔除outliers的影响,并得到全局最优的参数估计。但是RANSAC有几个问题:
- 在每次迭代中都要区分inliers和outliers,因此需要事先设定阈值,当模型具有明显的物理意义时,这个阈值还比较容易设定,但是若模型比较抽象时,这个阈值就不那么容易设定了,而且固定阈值不适用于样本动态变化的应用;
- RANSAC的迭代次数是运行期决定的,不能预知迭代的确切次数(当然迭代次数的范围是可以预测的)。
- RANSAC只能从一个特定数据集中估计一个模型,当两个(或者更多个)模型存在时,RANSAC不能找到别的模型。
直线拟合案例:

通过RANSAC之后:得到

局外点是红色,局内点表示为蓝色,蓝色线就是基于RANSAC的结果。适应数据的结果(模型)就是一条线。
LMedS最小中值方差估计算法
LMedS也是一种随机参数估计算法。最小中值方差估计算法
- LMedS也从样本中随机抽选出一个样本子集
- 使用最小方差估计算法对子集计算模型参数
- 然后计算所有样本与该模型的偏差
- (与RANSAC不同)LMedS记录的是:
- 所有样本中,偏差值居中的那个样本的偏差[称为MeD偏差(这也是LMedS中Med的由来)],
- 以及本次计算得到的模型参数。(由于这一变化,LMedS 不需要预先设定阈值 来区分inliers和outliers)。
- 重复前面的过程N次,从N个Med偏差中挑选出最小的一个,其对应的模型参数就是最终的模型参数估计值。
其中迭代次数N是由样本子集中样本的个数(子集个数)、期望的模型误差、事先估计的样本中outliers的比例所决定的。
LMedS理论上也可以剔除outliers的影响,并得到全局最优的参数估计,而且克服了RANSAC的两个缺点(虽然LMedS也需要实现设定样本中outliers的比例,但这个数字比较容易设定)。但是当outliers在样本中所占比例达到或超过50%时,LMedS就无能为力了。这与LMedS每次迭代记录的是Med偏差值有关。
PCL中Sample_consensus模型支持的几何模型
1、SACMODEL_PLANE模型:
- 定义为平面模型,共设置4个参数[normal_x normal_y normal_z d],其中(normal_x,normal_y,normal_z)为Hessian范式中法向量的坐标及常量d值:
- 其中a^2+b^2+c^2=1,d>0,(a,b,c)为平面法矢,d为原点至平面的距离,
从点云中分割提取的内点都处在估计参数对应的平面上或与平面距离在一定范围内。
2、SACMODEL_LINE模型:
- 定义为直线模型,共设置6个参数[point_on_line.x point_on_line.y point_on_line.z line_direction.x line_direction.y line_direction.z],
- 其中(point_on_line.x,point_on_line.y,point_on_line.z)为直线上一点的三维坐标(x0, y0, z0),
- (line_direction.x,line_direction.y,line_direction.z)为直线方向向量(a,b,c),
从点云中分割提取的内点都处在估计参数对应直线上或直线距离在一定范围内。
3、SACMODEL_CIRCLE2D模型:
- 定义为二维圆的圆周模型,共设置3个参数[center.x center.y radius],
- 其中(center.x, center.y)为圆周中心的二维坐标,
- radius为圆周半径,
从点云中分割提取的内点都处在估计参数对应圆周上或距离圆周边线的距离在一定范围内。
4、SACMODEL_SPHERE模型:
- 定义为三维球体的圆周模型,共设置4个参数[center.x center.y center.z radius],
- 其中(center.x, center.y center.z)为球体中心的三维坐标,
- radius为球体半径,
从点云中分割提取的内点都处在估计参数对应球体上或距离球体边线的距离在一定范围内。
5、SACMODEL_CYLINDER模型:
- 定义为圆柱体模型,共设置7个参数[point_on_axis.x point_on_axis.y point_on

最低0.47元/天 解锁文章
1016

被折叠的 条评论
为什么被折叠?



