1.版本要求

版本: >PCL1.3

2.简介

欧式聚类是点云聚类的一种重要方法,利用点云中点与点之间的欧式距离进行聚类,当点与点之间的欧式距离小于设定的阈值则视为一类。欧式聚类是车辆前方障碍物检测的重要方法。

3.数据

本例中使用的点云数据(test.pcd)请见百度网盘分享。
链接:https://pan.baidu.com/s/1io3q_ESUbhdGT2vr6-NuVA
提取码:ias2

4.代码

#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/kdtree/kdtree.h>
#include <pcl/segmentation/extract_clusters.h>
#include <pcl/visualization/cloud_viewer.h>int main(int argc, char** argv)
{// 读取测试点云pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);pcl::PCDReader reader;reader.read("test.pcd", *cloud);// 创建KdTreea对象用于点云搜索pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);tree->setInputCloud(cloud);std::vector<pcl::PointIndices> cluster_indices;  //创建索引对象向量,用于存储不同聚类结果的点云索引pcl::EuclideanClusterExtraction<pcl::PointXYZ> ec;  //创建欧式聚类对象ec.setClusterTolerance(0.13); // 设置距离阈值为13cm。点与点之间小于这个距离阈值视为一类ec.setMinClusterSize(200);  //设置聚类最少点数ec.setMaxClusterSize(5000);  //设置聚类最大点数ec.setSearchMethod(tree);  //输入点云搜索方法ec.setInputCloud(cloud);ec.extract(cluster_indices);  //开始聚类//将聚类结果合成一幅点云,方便后面对比显示pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_cluster(new pcl::PointCloud<pcl::PointXYZ>);for (std::vector<pcl::PointIndices>::const_iterator it = cluster_indices.begin(); it != cluster_indices.end(); ++it)  //循环一次就是一个聚类结果{for (std::vector<int>::const_iterator pit = it->indices.begin(); pit != it->indices.end(); ++pit)  cloud_cluster->push_back((*cloud)[*pit]);  //每个聚类结果都装到cloud_cluster这幅点云里}cloud_cluster->width = cloud_cluster->size();  //点云尺寸的明确,存储点云前需要明确尺寸大小cloud_cluster->height = 1;cloud_cluster->is_dense = true;//对比显示聚类结果pcl::visualization::PCLVisualizer viewer("Cloud Viewer");int v1(0);  //创建左窗口显示原始点云viewer.createViewPort(0, 0, 0.5, 1.0, v1);  //左右窗口大小划分,1:1viewer.setBackgroundColor(0, 0, 0, v1);viewer.addText("Original Cloud", 2, 2, "Original Cloud", v1);pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> rgb1(cloud, "z");viewer.addPointCloud<pcl::PointXYZ>(cloud, rgb1, "original cloud", v1);viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "original cloud", v1);viewer.addCoordinateSystem(1.0, "original cloud", v1);int v2(1);  //创建右窗口显示聚类结果viewer.createViewPort(0.5, 0, 1.0, 1.0, v2);  //左右窗口大小划分,1:1viewer.setBackgroundColor(0, 0, 0, v2);viewer.addText("Clustered Cloud", 2, 2, "Clustered Cloud", v2);pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> rgb2(cloud_cluster, "z");viewer.addPointCloud<pcl::PointXYZ>(cloud_cluster, rgb2, "clustered cloud", v2);viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "clustered cloud", v2);viewer.addCoordinateSystem(1.0, "clustered cloud", v2);viewer.spin(); //循环不断显示点云return (0);
}

5.效果

左图为原始点云,右图为聚类结果。

点云检测--欧式聚类Euclidean Cluster相关推荐

  1. PCL点云库学习笔记 点云的欧式聚类

    欧式聚类详解(点云数据处理) 欧式聚类是一种基于欧氏距离度量的聚类算法.基于KD-Tree的近邻查询算法是加速欧式聚类算法的重要预处理方法. KD-Tree最近邻搜索 Kd-树是K-dimension ...

  2. PCL点云库学习笔记(3):点云的欧式聚类

    初学者笔记: 点云欧式聚类算法流程 (1)点云读入: (2)体素化下采样(方便处理): (3)去离散点: (4)RANSAC算法检测平面,并剔除平面点云: (5)欧式聚类: (6)结果的输出和可视化: ...

  3. 读自动驾驶激光雷达物体检测技术(Lidar Obstacle Detection)(4):Clustering(欧式聚类)

    在第(3)实现了地面点与障碍物的分离,此部分要实现的是聚类,聚类是指把不同物体的点云分别组合聚集起来, 从而能让你跟踪汽车, 行人等多个目标. 其中一种对点云数据进行分组和聚类的方法称为欧氏聚类. 欧 ...

  4. 点云PCL学习笔记-分割segmentation-RANSAC随机采样一致性算法欧式聚类提取

    随机采样一致性算法RANSAC 程序实例参考网址: https://pcl.readthedocs.io/projects/tutorials/en/latest/random_sample_cons ...

  5. MATLAB点云处理(十二):欧式聚类分割(pcsegdist)

    文章目录 1 欧式聚类分割函数 pcsegdist 2 代码实现 3 输出参数 labels 4 MATLAB点云处理进阶(一):欧式聚类分割❤️独立窗口显示每一聚类结果❤️保存聚类点云 1 欧式聚类 ...

  6. 一文详解激光点云的物体聚类

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 文章导读 本文针对自动驾驶中三维点云的道路目标聚类进行讲解,从聚类算法的原理出发,介绍几种常用的点云障 ...

  7. 【点云处理技术之PCL】点云分割算法1——平面模型分割、圆柱模型分割和欧式聚类提取(含欧式聚类原理)

    文章目录 1. 平面分割 2. 圆柱分割 3. 欧式聚类分割 1. 平面分割 下列中,先随机创建了z=1.0的随机点,然后改变其中3个点的z值.最后,使用SACMODEL_PLANE平面模型对它进行拟 ...

  8. PCL 点云欧式聚类

    目录 一.概述 二.代码 三.结果 一.概述   PCL中点云欧式聚类的简单使用案例 二.代码 cluster_extraction.cpp #include <pcl/ModelCoeffic ...

  9. PCL 点云 欧式聚类疑问

    欧式聚类详解(点云数据处理) 欧式聚类是一种基于欧氏距离度量的聚类算法.基于KD-Tree的近邻查询算法是加速欧式聚类算法的重要预处理方法. KD-Tree最近邻搜索 Kd-树是K-dimension ...

  10. 【点云处理】基于欧式聚类的点云分割

    对于范围较广的点云来说,一开始先使用基于模型的点云分割方法将类似于平面这样的点云块提出来,然后在对留下的小部分点云进行像欧式聚类这样的后续分割处理. 原始点云: 代码,对代码的理解都注释上了,以便于以 ...

最新文章

  1. 802.3和以太网帧结构-路由交换原理1-【HCNA笔记】
  2. 线程同步——内核对象实现线程同步——等待函数
  3. 使用自定义UISlider控制View亮度
  4. #串口通信超时处理_实现4G无线通信透传的远程通信多组网5个PLC相互交换数据...
  5. good things will come late
  6. ___new__方法和__init__方法的区别
  7. 使用Notepad++打造称心的IDE: Python PHP Perl
  8. python实现括号匹配不用栈_使用Python实现栈,判断括号是否平衡
  9. java 定时缓存的实现
  10. html关于点击radio触发事件
  11. 【网站点击流数据分析】01-项目业务背景
  12. KCNScrew for Mac(序列号查询工具)
  13. 树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX
  14. Windows下Qt程序初步打包
  15. java代码审计手书(三)
  16. 7-33 统计素数并求和 (20 分)
  17. matlab筛选excel数据统计,#excel筛选数据#如何用excel表格中的数据制图
  18. 计算机系统删除一点会怎么样,电脑系统还原后会怎么样
  19. 基因xii_在Hack Week XII上运行创意
  20. 中职生计算机基础知识总结,浅谈中职学生的计算机基础教育

热门文章

  1. 怎么把小米手机通讯录导入苹果手机
  2. telnet客户端 端口23失败
  3. php容器概念,PHP容器——Pimple运行流程浅析
  4. 广义相对论-学习记录5-第三章-张量分析与黎曼几何2
  5. 确定部分分式中待定系数的留数方法
  6. 软件构造设计模式III(转载整合)
  7. vs2012中将图片放到resource中进行调用
  8. 禅道----产品经理创建项目集和产品线
  9. 一直想写的关于tarjan算法的理解——向struct edge大佬低头
  10. 图片指纹技术检测图片相似度