DBSCAN点云聚类

2023-11-18

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是距离聚类的另一种形式,其相比较于常规距离聚类而言,多了核心点判别过程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DBSCAN点云聚类 的相关文章

  • Python学习2——DBSCAN聚类算法

    一 原理 参考博文 xff1a DBSCAN聚类算法Python实现 徐奕的专栏 CSDN博客 dbscan python https blog csdn net xyisv article details 88918448 DBSCAN是
  • DBSCAN聚类算法原理总结

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 DBSCAN是基于密度空间的聚类算法 xff0c 在机器学习和数据挖掘领域有广泛的应用 xff0c 其聚类原理通俗点讲是每个簇类的密度
  • PCL1.12+VTK9.1+QT6编译部署

    本文讲解使用的环境是vs2019 pcl1 12 0 vtk9 1 qt6 0 最后再展示一个示例程序 1 编译VTK vtk下载地址如下 https vtk org download 然后用cmake构建 修改一下几个地方 然后打开生成的
  • 点云基本概念

    文章目录 一 三维数据的表现形式 二 点云的概念 三 点云的特点 四 点云的获取方式 激光雷达 结构光 立体视觉 TOF相机 一 三维数据的表现形式 三维数据的表现形式一般分为四种 分别是点云 网格 体素与多视图 点云是三维空间中点的集合
  • GICP 配准点云(附python 代码)

    import open3d as o3d import numpy as np import copy def draw registration result src tar transformation source temp copy
  • 备战数学建模44-聚类模型(攻坚站8)

    物以类聚 人以群分 所谓的聚类 就是将样本划分为由类似的对象组成的多个类的过程 聚类后 我们可以更加准确的在每个类中单独使用统计模型进行估计 分析或预测 也可以探究不同类之间的相关性和主要差异 聚类和上一讲分类的区别 分类是已知类别的 聚类
  • 【最远点采样FPS】点云采样方式(一) — 最远点采样

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 点云最远点采样FPS
  • 点集配准—CPD(Coherent Point Drift) (附python代码)

    点集配准 CPD Coherent Point Drift 算法是一种点云配准算法 用于将两个点云对齐 该算法最初由Myronenko 和 Song 在2009年提出 CPD算法的核心思想是将一个点集看作是由一个概率密度函数生成的样本 然后
  • DCEL数据结构

    文章目录 前言 DCEL介绍 DCEL优势 DCEL数据结构实现 Point Vertex HalfEdge Face Reference 前言 虽然https blog csdn net baidu 34931359 article de
  • PCL点云处理之读取与保存PLY文件(点云\网格)(一百五十四)

    PCL点云处理之读取与保存PLY文件 一百五十四 一 PLY文件介绍 二 读取内容 1 点云 2 网格 一 PLY文件介绍 在平常的工作学习 会接触到后缀名为 ply的文件 这是一种常用的存储点云或者网格数据的文件格式 我们可以通过一些方法
  • c++ 代码连接激光雷达,使用 pybind11 得到python模块,可以直接在python中连接雷达,获取 numpy 格式激光数据

    注意 这个程序最后需要编译为 python 的一个模块 然后导入python中使用 底层原理是python调用c 程序连接激光雷达 然后把获取的数据转换为numpy格式 因为用python太慢了 C 函数 用于获取一个帧的数据并将其转换为P
  • 三维点云质心与三角化 — python open3d

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 1 质心介绍 质心概
  • 点云配准(一)— ICP方法

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 点云配准本质上是将点
  • PCL-获取点云体素中的所有点的索引的方法

    使用 octree 将点云体素化之后 获取体素中所有点的方法 即OctreeContainerBase中的三个方法的介绍 getPointIndex getPointIndicesVector getPointIndices 这三个方法都是
  • 点云渲染的颗粒感和背景色相关

    很奇怪 在加alpha通道时 当背景是黑色时 黑色点云特别显示颗粒感 而背景色是灰色偏白时 颗粒感消失 看来是审美观很重要啊
  • 点云高度归一化处理(附 matlab 代码)

    由于不同地物之间存在着高程的差异 为了去除地形起伏对点云数据高程值的影响 所以需要根据提取出的地面点进行点云归一化处理 这一步是很多算法的基础 可以提高后续点云分类或分割的准确度等 如下图所示 归一化的过程其实相对简单 遍历每一个非地面点
  • 地面分割--Patchwork

    文章目录 1问题定义 2同心区域模型 3按照区域划分的平面拟合 4地面点似然估计 GLE 总结 patchwork是一种比较优秀的地面分割方法 其过程主要分为三个部分 同心圆环区域 CZM concentric Zone Model 按照区
  • “泰迪杯”挑战赛 - 通过聚类方法对航空客运的客户进行细分

    目 录 挖掘目标 分析方法与过程 2 1 总体流程 2 2 具体步骤 步骤一 数据预处理 步骤二 群体聚类 步骤三 行为特征聚类 2 3 结果分析 第一类 第二类 第三类 结论 参考文献 1 挖掘目标 本次建模目标是在航空公司的海量会员数据
  • DBSCAN点云聚类

    1 DBSCAN算法原理 DBSCAN是一种基于密度的聚类方法 其将点分为核心点与非核心点 后续采用类似区域增长方式进行处理 下图为DBSCAN聚类结果 可见其可以对任意类别的数据进行聚类 无需定义类别数量 DBSCAN聚类说明 DBSCA
  • 八种点云聚类方法(一)— DBSCAN

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 传统机器学习聚类的方

随机推荐

  • pytorch 中 多头注意力机制 MultiHeadAttention的代码实现及应用

    本文将对 Scaled Dot Product Attention Multi head attention Self attention Transformer等概念做一个简要介绍和区分 最后对通用的 Multi head attenti
  • klocwork 2020.3安装使用过程

    klocwork 2020 3 1 安装过程略过 可查看2019的安装过程 2 web分析 存在漏报的问题 可能是规则选择不全 3 desktop分析 4 嵌入式环境插件分析 e mail lu1024lu foxmail com
  • 软件著作权申请注意事项——常见问题[详细版,不断补充中]

    近期在申请几个软著 查询了大量资料 打了很多电话 经过几次 亲身尝试后 总结出了以下要点问题 基本涵盖了目前网上搜不到的一些注意事项 如有问题欢迎在评论中一起讨论 2020年8月上线了新系统 本说明进行了相应调整 请先阅读 0 新系统计算机
  • 开源库jemalloc简介

    jemalloc是通用的malloc 3 实现 它强调避免碎片和可扩展的并发支持 它的源码位于https github com jemalloc jemalloc 最新稳定版本为5 2 1 glibc的内存分配算法是基于dlmalloc实现
  • Two Arithmetic Progressions

    Two Arithmetic Progressions 题目链接 题意 思路 AC代码1 include
  • .NET Core + K8S 玩转容器编排

    Production Grade Container Orchestration Automated container deployment scaling and management 生产级别的容器编排系统 自动化的容器部署 扩展和管
  • RTMP协议与RTSP协议比较

    考虑做一个手机直播系统 首先需要指定一个合理的技术方案 由于自己以前不是搞多媒体这块 对流媒体开发不熟悉 自己的理解思维总习惯用java web开发的惯性走 先指定一个大体的框架 不管对还是错 先考虑其技术可行性 框架的指定 首先取决于自己
  • 代码走查——项目走向成功的锦囊之一

    说起代码走查 相信每个人都不陌生 但为什么要执行代码走查 什么时候来执行代码走查 如何有效执行代码走查 很多人的看法和见解都不一样 一般的看法 认为代码走查是一种非正式的代码评审技术 它通常在编码完成之后由代码的作者向一组同事来讲解他自己编
  • mysql5.7防火墙_mysql 5.7.13 winx64安装配置方法图文教程(win10)

    本文实例为大家分享了mysql 5 7 13 winx64安装配置方法图文教程 供大家参考 具体内容如下 下载 安装 1 解压下载好的mysql 5 7 13 winx64 zip到你需要安转的目录 eg D mysql 2 配置解压目录下
  • openwrt用git https错误:fatal unable to find remote helper for ‘https‘

    opkg update opkg remove git opkg install git http opkg install ca bundle
  • java连接多个mysql_java – MySql连接太多了

    使用您的方法 如果在调用conn close 之前抛出任何异常 则永远不会关闭连接 您需要在try块中获取它 以及语句和结果集 并在finally块中将其关闭 无论是否抛出异常 都将始终执行finally中的任何代码 有了这个 您可以确保关
  • 使用React实现时间的天数,小时数,分钟数之间的自动转化

    由于公司项目需要使用React实现时间的天数 小时数 分钟数之间的自动转化 在遇了很多坑后终于解决了问题 需要实现的功能 当用户在输入小时数的时候 超过24小时就自动转化为相应的天数 当用户在输入分钟数的时候 超过60分钟以上就要自动转化成
  • 深度学习-算法篇

    机器学习 学而不思 深度学习 反省自查 卷积神经网络 CNN CNN 的价值 1 能够将大数据量的图片有效的降维成小数据量 并不影响结果 2 能够保留图片的特征 类似人类的视觉原理 CNN 的基本原理 1 卷积层 主要作用是保留图片的特征
  • Linux文件编程常用函数详解——lseek()函数

    lseek 函数的头文件和形式 include
  • 深圳新政!12大产业将获得大力扶持!

    1月4日 深圳市发布 深圳市数字经济产业创新发展实施方案 2021 2023年 以下简称 实施方案 为未来三年发展指明方向 注 文末可查看 深圳市数字经济产业创新发展实施方案 2021 2023年 原文件 深圳市筛选出十二大细分领域给予重点
  • 你知道项目的属性有哪些吗?

    项目的外资特征应该是其内在的属性 那么项目的属性都有哪些 项目的属性可以分为下面4各方面 项目有多目标属性 项目的目标又分为 成果性目标和约束性目标 成果性目标是一系列技术指标定义的 同时受到多种条件的约束 而约束性目标是多重的 所以项目有
  • 基于Java Socket通信实现聊天室功能

    目录 1 socket简介 2 架构图 3 服务器端详细过程 4 客户端详细过程 5 完整代码 1 socket简介 socket 翻译为 套接字 是计算机之间基于tcp协议的一种连接 两台存在socket连接的计算机可以发送 接收数据 在
  • Python与Stata在数据处理上的区别

    转自 微点阅读 https www weidianyuedu com 本节旨在演示如何在 pandas 中做各种类似Stata的操作 按照惯例 我们按如下方式导入 pandas 和 NumPy 计量经济学服务中心import pandas
  • 计算机中缺少vcruntime140d.dll (附下载链接,亲自试用可用)

    vcruntime140d dll下载地址 链接 https pan baidu com s 1bSigFLZHsjVbhdGs3zykGA 提取码 l0u2 win10系统 将dll复制到 C Windows SysWOW64 目录下 再
  • DBSCAN点云聚类

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