PCL笔记九:采样一致性

模型拟合?

采样一致性的目的:用于排除错误的样本

基于采样一致性算法的应用主要是对点云进行分割,根据不同设定的几何模型,估计对应的几何模型的参数,在一定允许误差范围内分割出在模型上的点云

目前PCL中支持的几何模型分割空间平面直线二维或三维圆周圆球锥体

随机采样一致性的另一个应用就是点云的配准对的剔除。



RANSAC随机采样一致性算法简介

RANSAC是一种随机参数估计算法。

  1. RANSAC从样本中随机抽选出一个样本子集
  2. 使用最小方差估计算法对这个子集计算模型参数
  3. 然后计算所有样本与该模型的偏差
  4. 再使用一个预先设定好的阈值偏差比较
    1. 当偏差小于阈值时,该样本点属于模型内样本点inliers),局内点或内点。
    2. 否则为模型外样本点outliers),局外点或外点。
  5. 记录下当前的inliers的个数,然后重复这一过程。
  6. 每一次重复,都记录当前最佳的模型参数,所谓最佳:inliers的个数最多,此时对应的inliers个数为best_ninliers。
  7. 每次迭代的末尾,都会根据期望的误差率best_ninliers总样本个数当前迭代次数,计算一个迭代结束评判因子,据此决定是否迭代结束。(很像深度学习中的每轮训练几乎一致)。

迭代结束后,最佳模型参数就是最终的模型参数估计值。(跟深度学习一模一样呀。)


RANSAC理论上可以剔除outliers的影响,并得到全局最优的参数估计。但是RANSAC有几个问题:

  • 在每次迭代中都要区分inliers和outliers,因此需要事先设定阈值,当模型具有明显的物理意义时,这个阈值还比较容易设定,但是若模型比较抽象时,这个阈值就不那么容易设定了,而且固定阈值不适用于样本动态变化的应用;
  • RANSAC的迭代次数是运行期决定的,不能预知迭代的确切次数(当然迭代次数的范围是可以预测的)。
  • RANSAC只能从一个特定数据集中估计一个模型,当两个(或者更多个)模型存在时,RANSAC不能找到别的模型。

直线拟合案例:

通过RANSAC之后:得到

局外点是红色,局内点表示为蓝色,蓝色线就是基于RANSAC的结果。适应数据的结果(模型)就是一条线。




LMedS最小中值方差估计算法

LMedS也是一种随机参数估计算法。最小中值方差估计算法

  1. LMedS也从样本中随机抽选出一个样本子集
  2. 使用最小方差估计算法对子集计算模型参数
  3. 然后计算所有样本与该模型的偏差
  4. (与RANSAC不同)LMedS记录的是:
    1. 所有样本中,偏差值居中的那个样本的偏差[称为MeD偏差(这也是LMedS中Med的由来)],
    2. 以及本次计算得到的模型参数。(由于这一变化,LMedS 不需要预先设定阈值 来区分inliers和outliers)。
  5. 重复前面的过程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_xnormal_ynormal_z)为Hessian范式法向量的坐标及常量d值
  • ax + by + cz + d = 0
  • 其中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)
  • a(x-x_{0}) + b(y-y_{0}) +c(z-z_{0}) = 0

从点云中分割提取的内点都处在估计参数对应直线上直线距离在一定范围内


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值