当前位置:   article > 正文

Open3d dbscan聚类算法cluster_dbscan

cluster_dbscan

一、dbscan聚类算法介绍

下面这篇文章介绍的非常详细,如果有兴趣消息了解算法的,可以移步到这里:https://blog.csdn.net/weixin_50514171/article/details/127195711
dbscan是一种基于密度的聚类算法,根据点周围的密度,将点进行聚类划分。
几个概念(半径eps,阈值点数min_points):
• 核心点:半径eps内的点个数大于给定min_points的点
• 边界点:半径eps内的点个数小于给定阈值min_points,但它在核心点R邻域内。
• 噪声点:既不是核心点,也不是边界点
特点:可以对任意形状的稠密数据集进行聚类,可以在聚类的同时发现异常点,对数据集中的异常点不敏感,如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差。

二、cluster_dbscan函数解析

labels = np.array(pcd.cluster_dbscan(eps=0.02, min_points=10, print_progress=True))
  • 1

参数:
eps:搜索半径
min_points:形成聚类所需的最小点数。
返回值:
聚类标签索引,其中标签-1表示噪声点。

三、代码实现

这段代码有两个不容易理解的地方:
1、 with o3d.utility.VerbosityContextManager(
o3d.utility.VerbosityLevel.Debug) as cm:
在 python 中,为了保证资源在使用过后得到释放,会使用 with as 语句操作上下文管理器(context manager),它能够帮助我们自动分配并且释放资源。这里的意思是在执行cluster_dbscan方法时,设置open3d的调试级别为o3d.utility.VerbosityLevel.Debug。
2、colors = plt.get_cmap(“tab20”)(labels / (max_label if max_label > 0 else 1))
python中matplotlib内置的离散cmap中颜色,最多的tab20有20个颜色。
cmap类似于一个字典,以float形式输入[0, 1]之间的数字,能够得到对应的颜色rgba值(输入数字如果大于1,cmap会自动对其进行正则化)。

import open3d as o3d
import numpy as np
import matplotlib.pyplot as plt

if __name__ == "__main__":
    sample_ply_data = o3d.data.PLYPointCloud()
    pcd = o3d.io.read_point_cloud(sample_ply_data.path)
    # Flip it, otherwise the pointcloud will be upside down.
    pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])

    with o3d.utility.VerbosityContextManager(
            o3d.utility.VerbosityLevel.Debug) as cm:
        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([pcd])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号