采样一致性--在一定允许误差范围内分割出在模型上的点云
RANSAC随机采样一致性:
样本中随机抽取子集,计算子集与模型的偏差与阈值作比较,区分内点与外点,迭代重复到内点最多,此时的模型参数即为RANSAC下的估计值。
RANSAC的缺陷:事先设定区分内、外点的阈值;不能确定迭代的次数;
LMedS最小中值方差估计:
样本中随机抽取子集,计算子集与模型的偏差与阈值作比较,取出偏差值居中的子集对应的模型参数。
LMedS的缺陷:当外点数量较多时候,没法很好估计模型;
采样一致性支持的几何模型:
平面模型--SACMODEL_PLANE,参数有A,B,C,D,即平面方程Ax+By+Cz+D=0
直线模型--SACMODEL_LINE,参数有点的x,y,z,直线的三个方向值
圆模型--SCAMODEL_CIRCLE2D,参数有圆心x,y以及半径
球模型--SACMODEL_SPHERE,参数有球心x,y,z以及半径
圆柱模型--SACMODEL_CYLINDER,参数有轴线上点x,y,z,轴线三个方向值,半径
//存储内点索引的向量
std::vector<int> inliers;
//创建随机采样一致性对象
pcl::SampleConsensusModelSphere<pcl::PointXYZ>::Ptr model_s(new pcl::SampleConsensusModelSphere<pcl::PointXYZ>(cloud));
pcl::RandomSampleConsensus<pcl::PointXYZ> ransac(model_s);
//设置判断内、外点的距离阈值
ransac.setDistanceThreshold(0.01);
//执行随机参数估计
ransac.computeModel();
//获得内点索引
ransac.getInliers(inliers);
//获得内点点云
pcl::copyPointCloud<*cloud,inliers,*result>;