点云分割入门级实例

该博客介绍了激光雷达点云数据处理的基础,特别是利用PCL库进行平面和圆柱体模型的分割。通过RANSAC算法,实现了去除噪声并准确提取平面和圆柱体的内点,提供了编译运行结果展示。
摘要由CSDN通过智能技术生成

Lidar系列文章

传感器融合是将多个传感器采集的数据进行融合处理,以更好感知周围环境;这里首先介绍激光雷达的相关内容,包括激光雷达基本介绍(本节内容),激光点云数据处理方法(点云数据显示,点云分割,点云聚类,障碍物识别实例)等。

系列文章目录

1. 激光雷达基本介绍
2. 激光点云数据显示
3. 基于RANSAC的激光点云分割
4. 点云分割入门级实例学习
5. 激光点云目标物聚类
6. 基于PCL实现欧式聚类提取
7. 激光雷达障碍物识别


基于PCL实现平面模型分割

本小节主要介绍如何对一组点云数据做一个简单的平面分割。

#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> //基于采样一致性分割的类的头文件
int main (int argc, char** argv)
{
   
  //1.创建包含局外点的点云数据,然后在屏幕上打印这些点的坐标值。
  pcl::PointCloud<pcl::PointXYZ> cloud;
  //填充点云数据,设置点云宽度为15,高度为1,即为无序点云
  cloud.width  = 15;
  cloud.height = 1;
  cloud.points.resize (cloud.width * cloud.height);
  //生成数据,采用随机数填充点云的x,y坐标,但都处于z=1.0的平面上
  for (size_t i = 0; i < cloud.points.size (); ++i)
  {
   
    cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
    cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
    cloud.points[i].z = 1.0;
  }
  //设置几个局外点,即重新设置几个点z值,使其偏离在z=1.0的平面
  cloud.points[0].z = 2.0;
  cloud.points[3].z = -2.0;
  cloud.points[6].z = 4.0;
  //在标准输出上打印出点云中各点的坐标值,方便分割后的参考。
  std::cerr << "Point cloud data: " << cloud.points.size () <<" points" << std::endl;
  for (size_t i = 0; i < cloud.points.size (); ++i)
    std::cerr << "    " << cloud.points[i].x << " " 
<< cloud.points[i].y << " " 
<< cloud.points[i].z << std::endl;

  //2.创建随机采样一致性分割对象,设置模型类型和随机采样一致性方法类型,并设定“距离阈值”
  
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值