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

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

1 DBSCAN点云聚类

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

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

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

2 python open3d程序

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

# -*- 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表示没有分到任何类中的点,最大值相当于共有多少个类别。

八种点云聚类方法(一)— DBSCAN_第1张图片

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

你可能感兴趣的:(三维点云,python,聚类,点云聚类,DBSCAN,open3d,python)