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

news/2024/5/20 9:41:55 标签: 点云聚类, kmeans, 点云, 聚类, python

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

1 KMeans点云聚类>点云聚类

        KMeans聚类方法是机器学习中最常见的聚类方法之一。其主要思想是确定k个分类中心,使得各个分类中的点到分类中心的距离总和最小。最直观的效果是将距离相近的点聚为同一类。Kmeans聚类的总数需要提前设置,即假定K个类别,也就是聚类后的类别是确定的。而DBSCAN方法聚类的类别是不确定的。

        KMeans通常第一步是随机选择K个点作为初始化的类别中心,然后通过不断迭代进行中心坐标更新直到中心点更新距离变化小于阈值或者迭代次数达到上限。KMeans++是在第一步上进行了改进,在初始化过程中尽可能选择距离相隔较远的点作为初始化中心。Skit-learn的Kmeans默认采用的初始化方式为KMeans++。

        Skit-learn的Kmeans函数为sklearn.cluster.KMeans,共有11个参数。这里仅介绍其中三个参数,其他的采用默认值。n_clusters定义类别数量。max_iter定义最大迭代次数。

python">result= KMeans(n_clusters=8,init='k-means++',n_init=10,max_iter=300,tol=0.0001,
       precompute_distances='auto',verbose=0,random_state=None,
       copy_x=True,n_jobs=1,algorithm='auto').fit(points)

        函数返回值这里也仅介绍三个。假设聚类返回的结果用result表示,可以用result.__dict__查看其包含的结果数据。n_iter_为算法实际迭代的次数,cluster_centers_为类别中心,labels_返回各个点的类别标签,从0开始。

python">#返回结果的属性
dict_keys(['n_clusters', 'init', 'max_iter', 'tol', 'precompute_distances', 'n_init', 'verbose', 'random_state', 'copy_x', 'n_jobs', 'algorithm', '_n_threads', 'n_features_in_', 'cluster_centers_', 'labels_', 'inertia_', 'n_iter_'])

2 python 程序样例

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

python"># -*- coding: utf-8 -*-
"""
@author: https://blog.csdn.net/suiyingy
"""

import open3d as o3d
import numpy as np
from sklearn.cluster import KMeans


if __name__ == '__main__':
    file_path = 'rabbit.pcd'
    pcd = o3d.io.read_point_cloud(file_path)
    # pcd = pcd.uniform_down_sample(50)#每50个点采样一次
    pcd.paint_uniform_color([0.5, 0.5, 0.5])#指定显示为灰色
    print(pcd)
    
    points = np.array(pcd.points)
    result = KMeans(n_clusters=8).fit(points)
    #各个类别中心
    center = result.cluster_centers_
    # labels返回聚类成功的类别,从0开始,每个数据表示一个类别
    labels = result.labels_
     
    #最大值相当于共有多少个类别
    max_label = np.max(labels) + 1 #从0开始计算标签
    print(max(labels))
    #生成k个类别的颜色,k表示聚类成功的类别
    colors = np.random.randint(255, size=(max_label, 3))/255.
    colors = colors[labels]
    pcd.colors = o3d.utility.Vector3dVector(colors[:, :3])

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

3 KMeans效果

        labels返回聚类成功的类别,从0开始计算,最大值加一相当于共有多少个类别。

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


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

相关文章

八种点云聚类方法(三)

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

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

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

三维点云重建 — open3d python

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

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

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

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

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

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

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

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

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

【三维语义分割】PointNet++ (二):模型结构详解

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