八种点云聚类方法(一)— DBSCAN

news/2024/5/20 10:15:46 标签: 聚类, 点云聚类, DBSCAN, open3d, python

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

1 DBSCAN点云聚类

        DBSCAN聚类是一种基于密度的聚类算法,大体思想是根据样本点的密度和连通性,将密度满足要求且密度可达的点设置为同一类。

        open3dDBSCAN聚类方法的函数为cluster_dbscan。第一个参数eps表示DBSCAN算法确定点密度时和邻近点的距离大小,即考虑eps距离范围内的点进行密度计算。min_points表示组成一类最少需要多少个点。print_progress可以用来显示运行的进度。labels返回聚类成功的类别,-1表示没有分到任何类中的点,原始点云中每个点都会分别得到一个类别标签。

python">labels=pcd.cluster_dbscan(eps, min_points, print_progress=False)
#labels返回聚类成功的类别,-1表示没有分到任何类中的点

2 python open3d程序

 pcd文件请参考:pcd格式点云样例文件-深度学习文档类资源-CSDN下载。

python"># -*- coding: utf-8 -*-
"""
乐乐感知学堂公众号
@author: https://blog.csdn.net/suiyingy
"""

import open3d as o3d
import numpy as np

if __name__ == '__main__':
    file_path = 'rabbit.pcd'
    pcd = o3d.io.read_point_cloud(file_path)
    pcd.paint_uniform_color([0.5, 0.5, 0.5])#指定显示为灰色
    print(pcd)
    #labels返回聚类成功的类别,-1表示没有分到任何类中的点
    labels = np.array(pcd.cluster_dbscan(eps=0.25, min_points=16, print_progress=True))
    #最大值相当于共有多少个类别
    max_label = np.max(labels)
    print(max(labels))
    #生成n+1个类别的颜色,n表示聚类成功的类别,1表示没有分类成功的类别
    colors = np.random.randint(255, size=(max_label+1, 3))/255.
    colors = colors[labels]
    #没有分类成功的点设置为黑色
    colors[labels < 0] = 0 
    pcd.colors = o3d.utility.Vector3dVector(colors[:, :3])

    # 点云显示
    o3d.visualization.draw_geometries([pcd], #点云列表
                                      window_name="DBSCAN聚类",
                                      point_show_normal=False,
                                      width=800,  # 窗口宽度
                                      height=600)  # 窗口高度

3 DBSCAN效果

        labels返回聚类成功的类别,-1表示没有分到任何类中的点,最大值相当于共有多少个类别。

python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_3d点云 python从三维基础知识到深度学习,将按照以下目录持续进行更新。https://blog.csdn.net/suiyingy/article/details/124017716


http://www.niftyadmin.cn/n/1257567.html

相关文章

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

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

八种点云聚类方法(三)

本节主要介绍OPTICS、Spectral Clustering(SC,即谱聚类)、 Hierarchical Clustering(层次聚类)、Mean-shift&#xff08;即&#xff1a;均值迁移&#xff09;、BIRCH、Affinity Propagation等聚类算法在点云聚类上的简单应用效果。DBSCAN和KMEANS聚类已在前两节介绍。skit-lean…

两种点云分割(一)— RANSAC分割平面

点云分割的目的是将点云中属于不同部分的点加以区分。最直接的点云分割方法就是聚类&#xff0c;八种点云聚类方法&#xff08;一&#xff09;— DBSCAN_Coding的叶子的博客-CSDN博客这个在前面几节之中已经进行了详细介绍。本节将简要介绍另外几种点云分割的方法。采用深度学习…

三维点云重建 — open3d python

这里三维点云重建是指根据三维点云重建目标的表面或轮廓&#xff0c;即表面重建。三维点云是一批离散的点&#xff0c;这样空间中必然回有一些位置是空的&#xff0c;没有数据信息。点云重建是让三维物体的表面都由一个个平面组成&#xff0c;即在表面处成为连续状态。这里仅介…

【三维目标分类 】PointNet详解(一)

Pointnet是基于点云的三维目标检测网络&#xff0c;也是三维深度学习目标检测的基础网络之一。PointNet文章作者关于三维物体检测的讲解请参考3D物体检测的发展与未来 - 深蓝学院 - 专注人工智能与自动驾驶的学习平台。本节将参考Github上的源码进行介绍&#xff0c;GitHub地址…

【三维语义分割】PointNet详解(一)

本节主要介绍PointNet语义分割&#xff0c;其中主干网络和代码环境等PointNet详细介绍请参考三维目标检测 — PointNet详解&#xff08;一&#xff09;_Coding的叶子的博客-CSDN博客&#xff0c;这里不再进行重复介绍。 PointNet文章作者关于三维物体检测的讲解请参考3D物体检测…

【三维目标分类】PointNet++详解(一)

上一节主要介绍了PointNet分类&#xff0c;本节将进一步介绍PointNet点云分类。本节仍然参考Github上的源码进行介绍&#xff0c;PointNet采用全局最大值池化的方式对全体点云进行了特征抽取&#xff0c;这导致了对局部特征的考虑不足。PointNet通过分组采用PointNet的方式对局…

【三维深度学习】PointNet++(三):多尺度分组MSG详解

上 一节详细介绍了PointNet点云分类。PointNet通过SA模块对原始点云进行采样分组&#xff0c;如果只是采用单一半径尺度和固定采样点数&#xff0c;那么分组内的点云会受点云密度的影响。如果点云过于稀疏&#xff0c;那么小半径尺寸无法将稀疏的点云进行分组&#xff0c;从而无…