八种点云聚类方法(一)— DBSCAN
??傳統(tǒng)機(jī)器學(xué)習(xí)聚類的方法有很多種,并且很多都能夠應(yīng)用在點(diǎn)云上。這是由于聚類方法一般是針對于通用樣本,只是樣本的維度有所不同。對于三維點(diǎn)云來說,其樣本的維度為3。這里主要介紹幾種典型的方法及其實(shí)現(xiàn)方式,包括DBSCAN、KMeans等聚類方法,采用python open3d和skit-learn來實(shí)現(xiàn)。
1 DBSCAN點(diǎn)云聚類
????????DBSCAN聚類是一種基于密度的聚類算法,大體思想是根據(jù)樣本點(diǎn)的密度和連通性,將密度滿足要求且密度可達(dá)的點(diǎn)設(shè)置為同一類。
????????open3d中DBSCAN聚類方法的函數(shù)為cluster_dbscan。第一個參數(shù)eps表示DBSCAN算法確定點(diǎn)密度時和鄰近點(diǎn)的距離大小,即考慮eps距離范圍內(nèi)的點(diǎn)進(jìn)行密度計(jì)算。min_points表示組成一類最少需要多少個點(diǎn)。print_progress可以用來顯示運(yùn)行的進(jìn)度。labels返回聚類成功的類別,-1表示沒有分到任何類中的點(diǎn),原始點(diǎn)云中每個點(diǎn)都會分別得到一個類別標(biāo)簽。
labels=pcd.cluster_dbscan(eps, min_points, print_progress=False) #labels返回聚類成功的類別,-1表示沒有分到任何類中的點(diǎn)2 python open3d程序
?pcd文件請參考:pcd格式點(diǎn)云樣例文件-深度學(xué)習(xí)文檔類資源-CSDN下載。
# -*- coding: utf-8 -*- """ 樂樂感知學(xué)堂公眾號 @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表示沒有分到任何類中的點(diǎn)labels = np.array(pcd.cluster_dbscan(eps=0.25, min_points=16, print_progress=True))#最大值相當(dāng)于共有多少個類別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]#沒有分類成功的點(diǎn)設(shè)置為黑色colors[labels < 0] = 0 pcd.colors = o3d.utility.Vector3dVector(colors[:, :3])# 點(diǎn)云顯示o3d.visualization.draw_geometries([pcd], #點(diǎn)云列表window_name="DBSCAN聚類",point_show_normal=False,width=800, # 窗口寬度height=600) # 窗口高度3 DBSCAN效果
????????labels返回聚類成功的類別,-1表示沒有分到任何類中的點(diǎn),最大值相當(dāng)于共有多少個類別。
python三維點(diǎn)云從基礎(chǔ)到深度學(xué)習(xí)_Coding的葉子的博客-CSDN博客_3d點(diǎn)云 python從三維基礎(chǔ)知識到深度學(xué)習(xí),將按照以下目錄持續(xù)進(jìn)行更新。https://blog.csdn.net/suiyingy/article/details/124017716
總結(jié)
以上是生活随笔為你收集整理的八种点云聚类方法(一)— DBSCAN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 没有电脑基础能学计算机专业吗,没有绘画基
- 下一篇: 美信科技监控易:智慧高校一体化综合监控解