PCL分割学习

1.点云切割概述

点云分割是根据空间,几何和纹理等特征对点云进行划分,使得同一划分内的点云拥有相似的特征,点云的有效分割往往是许多应用的前提,例如逆向工作,CAD领域对零件的不同扫描表面进行分割,然后才能更好的进行空洞修复曲面重建,特征描述和提取,进而进行基于3D内容的检索,组合重用等。

2.PCL中常用的点云分割方法

Plane model segmentation (平面模型分割):这个算法能够把地面等一些平面给分割出来,方便后面的物体的点云分割。
Cylinder model segmentation(圆柱模型分割):这个算法能够把一些圆柱体分割出来,方便后面的物体的点云分割。
Euclidean Cluster Extraction (欧几里德聚类提取):这个算法通俗来讲就是先从点云中找出一个点p0,然后寻找p0周围最近的n个点,如果这n个点与p0之间的距离小于预先设定的阈值,那么就把这个点取出,依次重复。
Region growing segmentation (区域蔓延分割):对于普通点云,其可由法线、曲率估计算法获得其法线和曲率值。通过法线和曲率来判断某点是否属于该类,向周边蔓延直至完成。
Progressive Morphological Filter(渐进形态过滤器):这个算法本身用于处理高空获取的激光雷达数据,把地面与非地面的物体分割,也就是可以将地面分割出来使其他物体悬空,为下一步打基础。

3.几种分割的使用实例

3.1.简单平面分割

这个算法分割点云的平面的原理就是,通过改变平面模型(ax+by+cz+d=0)的参数,找出哪一组的参数能使得这个模型一定程度上拟合最多的点。这个程度就是由distancethreshold这个参数来设置。那找到这组参数后,这些能够被拟合的点就是平面的点。总体感受就是这个算法如果理解的不好调参有点复杂。
代码:

#include <iostream>
#include <pcl/ModelCoefficients.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/sample_consensus/method_types.h>   //随机参数估计方法头文件
#include <pcl/sample_consensus/model_types.h>   //模型定义头文件
#include <pcl/segmentation/sac_segmentation.h>   //基于采样一致性分割的类的头文件
#include <pcl/filters/extract_indices.h>
#include <pcl/visualization/cloud_viewer.h>

int
 main (int argc, char** argv)
{
   
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

  // 读取一个PCD文件
   if (pcl::io::loadPCDFile<pcl::PointXYZ>("d:/2.pcd", *cloud) != 0)
   {
   
       return -1;
   }


  //创建分割时所需要的模型系数对象,coefficients及存储内点的点索引集合对象inliers
  pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);
  pcl::PointIndices::Ptr inliers (new pcl::PointIndices);
  // 创建分割对象
  pcl::SACSegmentation<pcl::PointXYZ> seg;
  // 可选择配置,设置模型系数需要优化
  seg.setOptimizeCoefficients (true);
  // 必要的配置,设置分割的模型类型,所用的随机参数估计方法,距离阀值,输入点云
  seg.setModelType (pcl::SACMODEL_PLANE);   //设置模型类型
  seg.setMethodType (pcl::SAC_RANSAC);      //设置随机采样一致性方法类型
  seg.setDistanceThreshold (5);    //设定距离阀值,距离阀值决定了点被认为是局内点是必须满足的条件
                                       
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值