1、DBSCAN算法原理

DBSCAN是一种基于密度的聚类方法,其将点分为核心点与非核心点,后续采用类似区域增长方式进行处理。下图为DBSCAN聚类结果,可见其可以对任意类别的数据进行聚类,无需定义类别数量。

DBSCAN聚类说明


DBSCAN聚类过程如下:
1、首先,DBSCAN算法会以任何尚未访问过的任意起始数据点为核心点,并对该核心点进行扩充。这时我们给定一个半径/距离ε,任何和核心点的距离小于ε的点都是它的相邻点。
2、如果核心点附近有足够数量的点,则开始聚类,且选中的核心点会成为该聚类的第一个点。如果附近的点不够,那算法会把它标记为噪声(之后这个噪声可能会成为簇中的一部分)。在这两种情形下,选中的点都会被标记为“已访问”。
3、一旦聚类开始,核心点的相邻点,或者说以该点出发的所有密度相连的数据点(注意是密度相连)会被划分进同一聚类。然后我们再把这些新点作为核心点,向周围拓展ε,并把符合条件的点继续纳入这个聚类中。
4、重复步骤2和3,直到附近没有可以扩充的数据点为止,即簇的ε邻域内所有点都已被标记为“已访问”。
5、一旦我们完成了这个集群,算法又会开始检索未访问过的点,并发现更多的聚类和噪声。一旦数据检索完毕,每个点都被标记为属于一个聚类或是噪声。
与其他聚类算法相比,DBSCAN有一些很大的优势。首先,它不需要输入要划分的聚类个数。其次,即使数据点非常不同,它也会将它们纳入聚类中,DBSCAN能将异常值识别为噪声,这就意味着它可以在需要时输入过滤噪声的参数。第三,它对聚类的形状没有偏倚,可以找到任意大小和形状的簇。
DBSCAN的主要缺点是,当聚类的密度不同时,DBSCAN的性能会不如其他算法。这是因为当密度变化时,用于识别邻近点的距离阈值ε和核心点的设置会随着聚类发生变化。而这在高维数据中会特别明显,因为届时我们会很难估计ε。

从已有的聚类效果上来看,将一些点定义成噪声点,没有进行聚类。因此也可以理解成这样:先对点进行去噪处理,再使用距离聚类(如欧氏聚类)实现点的聚类。
对三维点云数据的聚类结果如下:

2、源码下载

基于C++编写的源代码下载地址:
https://download.csdn.net/download/qq_32867925/86246799
只需要将三个头文件加载到工程中即可

DBSCAN核心代码:

DBSCANKdtreeCluster<pcl::PointXYZ> ec;ec.setCorePointMinPts(10);// test 4. uncomment the following line to test the EuclideanClusterExtraction// pcl::EuclideanClusterExtraction<pcl::PointXYZ> ec;pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);tree->setInputCloud(cloud);std::vector<pcl::PointIndices> cluster_indices;ec.setClusterTolerance(0.1);//搜索近邻点半径ec.setMinClusterSize(100);//最小簇点数要求ec.setMaxClusterSize(5000000);//最大簇点数限制ec.setSearchMethod(tree);ec.setInputCloud(cloud);ec.extract(cluster_indices);clock_t end_ms = clock();std::cout << "cluster time cost:" << double(end_ms - start_ms) / CLOCKS_PER_SEC << " s" << std::endl;pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_clustered(new pcl::PointCloud<pcl::PointXYZI>);int j = 0;// visualization, use indensity to show different color for each cluster.for (std::vector<pcl::PointIndices>::const_iterator it = cluster_indices.begin(); it != cluster_indices.end(); it++, j++) {for (std::vector<int>::const_iterator pit = it->indices.begin(); pit != it->indices.end(); ++pit) {pcl::PointXYZI tmp;tmp.x = cloud->points[*pit].x;tmp.y = cloud->points[*pit].y;tmp.z = cloud->points[*pit].z;tmp.intensity = j % 8;cloud_clustered->points.push_back(tmp);}}

2、聚类效果





从另一个角度可见,DBSCAN是距离聚类的另一种形式,其相比较于常规距离聚类而言,多了核心点判别过程。

DBSCAN点云聚类相关推荐

  1. 八种点云聚类方法(二)— KMeans

    传统机器学习聚类的方法有很多种,并且很多都能够应用在点云上.这是由于聚类方法一般是针对于通用样本,只是样本的维度有所不同.对于三维点云来说,其样本的维度为3.这里主要介绍几种典型的方法及其实现方式,包 ...

  2. 八种点云聚类方法(三)

    本文为博主原创文章,未经博主允许不得转载. 本文为专栏<python三维点云从基础到深度学习>系列文章,地址为"https://blog.csdn.net/suiyingy/ar ...

  3. 代码实战 | 用LeGO-LOAM实现BFS点云聚类和噪点剔除

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Zach 来源丨计算机视觉life 作者介绍:Zach,移动机器人从业者,热爱移动机器人行业,立 ...

  4. 综述:激光雷达全景分割的传统点云聚类方法的技术总结

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨泡泡机器人SLAM 标题:A Technical Survey an ...

  5. 基于Bounding Box的激光点云聚类

    Camera系列文章 传感器融合是将多个传感器采集的数据进行融合处理,以更好感知周围环境:这里首先介绍Camera的相关内容,包括摄像头及图像知识基本介绍,OpenCV图像识别(特征提取,目标分类等) ...

  6. RetinaNet与点云聚类耦合的深度学习个体树分割方法研究

    ABSTRACT 人类活动的增加对全球森林资源造成了严重干扰,如何准确识别单株树木已成为森林资源调查的重要任务.为了得到准确的个体树木数量,本文以针叶林和针阔混交林为实验样本,以数字正射影像图和机载激 ...

  7. 【Matlab】基于改进的 Hausdorf 距离的DBSCAN船舶航迹聚类

    [Matlab]基于改进的 Hausdorff 距离的DBSCAN船舶航迹聚类 一.模型简介 1.1问题背景 1.2具体内容 AIS数据的预处理 船舶轨迹分割 船舶轨迹相似度度量 船舶轨迹表达方式 船 ...

  8. [自动驾驶-目标检测] C++ PCL 连通域点云聚类

    文章目录 引言 标签连通域聚类原理 Octree + LCC 代码实现 Octree + LCC 测试结果 Octree + LCC 的优缺点 改进思路 参考文献 引言 在实际实现3D目标检测时,在不 ...

  9. 二十一. 智能驾驶之基于视觉识别和点云聚类的障碍物检测

    一. 背景介绍 在智能驾驶领域, 根据使用的传感器的不同,对障碍物的检测和识别通常有三种做法: 1.一种是基于相机图像和点云鸟瞰图的纯图像障碍物检测, 比如YOLO三维; 2.一种是将相机和雷达进行联 ...

最新文章

  1. Summer Plan(挖坑待填)
  2. Maven 版 JPA 最佳实践(转)
  3. Spring IOC示例代码
  4. 亿级搜索系统的基石,如何保障实时数据质量?
  5. java serialization/deserialization (序列化对象自描述)
  6. 微软超融合私有云测试08-SCVMM部署之SQL Server与前置条件安装
  7. 二叉树的中序遍历非递归方法(算法导论第三版12.1-3)
  8. java 用户线程如何修改界面内容_java 加入一个线程、创建有响应的用户界面 。 示例代码...
  9. Hi3559AV100开发环境搭建
  10. 20210119:力扣第42周双周赛(下)
  11. imx226_【索尼IMX136LQJ-C、IMX236LQJ-C、IMX226CQJ-C、IMX274LQC-C、】价格_厂家 - 中国供应商...
  12. Lisp编制的坡度标注_形位公差自动标注的ATUOLISP程序设计(Ⅰ)
  13. 哪些服务器适合使用固态硬盘,服务器用固态硬盘还是机械硬盘合适?
  14. 十二进制转十进制-练习
  15. QQ空间FLASH代码及其使用方法
  16. POI excel 单元格换行
  17. 把用户证书安装成系统证书
  18. 一图看懂自然资源资金监测监管系统
  19. Gson 中对象类型的相互转换
  20. 三阶魔方CFOP复原的C语言算法

热门文章

  1. 行列式和全排列的关系
  2. WebStorm误删恢复方法
  3. 压力大吗?AI能测出大学生目前的压力程度
  4. 兄弟Brother HL-3150CDN 驱动
  5. java图形界面设置背景_java窗口背景颜色设置
  6. 欧姆龙CP系列PLC转以太网连接CHNet-CP实现以太网通信配置方法
  7. 中国数据中心行业价值分析及投资决策建议报告2021~2027年
  8. 国网×弘玑 | RPA培训课程提升员工数字素养
  9. MyBatis批量插入大量数据
  10. 连接两个路由器在同一网段