分割杯子模型,主要组合如下的接口:
1. PassThrough 直通滤波,保留感兴趣区
2. NormalEstimation 法线估计
3. SACSegmentationFromNormals 法线方向的模型拟合分割
原始点云如下:
使用pcd_viewer查看点云
第一步,读取点云:
读取点云
第二步,提取感兴趣部分:
使用 直通滤波,设置 z = 0~1.5之间
第三步, 估计法线、进行平面拟合分割:
提取平面,然后就只剩下 杯子的点云,对应的标号3的位置
第四步,使用 圆柱拟合提取杯子模型:
在第三步的剩下的点云里继续拟合分割,得到杯子点云和模型参数
整个步骤比较清晰,一步一步实现了杯子的拟合。
编写核心的 拟合代码插件如下:
struct SegSacModelWithNormals
{
bool random = false;
int model = 0; //所提取目标模型的属性(平面、球、圆柱等等)
int method = 0; // SAC_RANSAC = 0; SAC_LMEDS = 1; SAC_MSAC = 2; SAC_RR