八种点云聚类方法(一)— 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 npif __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
總結
以上是生活随笔為你收集整理的八种点云聚类方法(一)— DBSCAN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 没有电脑基础能学计算机专业吗,没有绘画基
- 下一篇: python+iOS自动化环境搭建