open3d DBSCAN 聚类

DBSCAN 聚类

一、算法原理

1.密度聚类

介绍

基于密度的噪声应用空间聚类(DBSCAN):是一种无监督的ML聚类算法。无监督的意思是它不使用预先标记的目标来聚类数据点。聚类是指试图将相似的数据点分组到人工确定的组或簇中。另一方面,DBSCAN不要求我们指定集群的数量,避免了异常值,并且在任意形状和大小的集群中工作得非常好。它没有质心,聚类簇是通过将相邻的点连接在一起的过程形成的。

原理

首先,选择一个在其半径内至少有minPts的随机点。然后对核心点的邻域内的每个点进行评估,以确定它是否在epsilon距离内有minPts (minPts包括点本身)。如果该点满足minPts标准,它将成为另一个核心点,集群将扩展。如果一个点不满足minPts标准,它成为边界点。随着过程的继续,算法开始发展成为核心点"a"是"b"的邻居,而"b"又是"c"的邻居,以此类推。当集群被边界点包围时,这个聚类簇已经搜索完全,因为在距离内没有更多的点。选择一个新的随机点,并重复该过程以识别下一个簇。

2、主要函数
python 复制代码
pcd.cluster_dbscan(eps=0.02,   # 邻域距离
                       min_points=10,  # 最小点数目
                             print_progress=True)  # 进度条展示

参数

首先,让我们定义Epsilon和最小点、应用DBSCAN算法时需要的两个参数以及一些额外的参数。

  1. **Epsilon (ɛ)(eps):**社区的最大半径。如果数据点的相互距离小于或等于指定的epsilon,那么它们将是同一类的。换句话说,它是DBSCAN用来确定两个点是否相似和属于同一类的距离。更大的epsilon将产生更大的簇(包含更多的数据点),更小的epsilon将构建更小的簇。一般来说,我们喜欢较小的值是因为我们只需要很小一部分的数据点在彼此之间的距离内。但是如果太小,您会将集群分割的越来越小。
  2. **最小点(minPts)(min_points):**在一个邻域的半径内minPts数的邻域被认为是一个簇。请记住,初始点包含在minPts中。一个较低的minPts帮助算法建立更多的集群与更多的噪声或离群值。较高的minPts将确保更健壮的集群,但如果集群太大,较小的集群将被合并到较大的集群中。

如果"最小点"= 4,则在彼此距离内的任意4个或4个以上的点都被认为是一个簇。

二、代码

python 复制代码
import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt
if __name__ == '__main__':

    pcd = o3d.io.read_point_cloud('res/monkey.ply')
    # 使用 DBSCAN 算法对点云进行聚类
    labels = np.array(pcd.cluster_dbscan(eps=0.02,   # 邻域距离
                                         min_points=10,  # 最小点数目
                                         print_progress=True))  # 进度条展示

    # 获取聚类数目
    max_label = labels.max()
    print(f"point cloud has {max_label + 1} clusters")

    # 根据聚类标签给点云上色
    colors = plt.get_cmap("tab20")(labels / (max_label if max_label > 0 else 1))
    colors[labels < 0] = 0
    pcd.colors = o3d.utility.Vector3dVector(colors[:, :3])
    # 可视化
    o3d.visualization.draw_geometries([pcd])

三、结果

原点云

DBSCAN 聚类

四、相关数据

点云密度计算:open3d 计算点云密度-CSDN博客

百度网盘数据集:

包括 obj,pcd,las,png,ply等

百度网盘链接:https://pan.baidu.com/s/1JFxKUk_xMcEmpfBHtuC-Pg

提取码:cpev

相关推荐
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
默_笙3 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
AI的探索之旅3 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003963 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
长沙三为智能科技3 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习