Open3D DbScanClustering聚类算法
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Open3D DbScanClustering聚类算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                DBSCAN聚類算法,是基于密度的聚類算法。該算法需要兩個參數。
labels = np.array(pcd.cluster_dbscan(eps=0.02, min_points=10, print_progress=True))
入參:
- eps: 定義到聚類鄰居的距離
- min_points: 定義形成聚類所需的最小點數。
出參:
- 該函數返回一個標簽,其中標簽-1表示噪音。
該算法定義以選中的點開始蔓延,鄰居點距離<=0.02米,最小有10個點就可以構成一個簇;適用于原始點云分隔的比較開的,有明顯界限的點云。
原始點云被分成了10個聚簇,每個聚簇不同的顏色,只有3個聚簇的點數比較巨大,明顯一些。另外右邊角落有一塊比較小的片段。
官方例子算法效果:
 
 輸出:
Format = auto
Extension = ply
geometry::PointCloud with 196133 points.
[Open3D DEBUG] Precompute Neighbours
[Open3D DEBUG] Done Precompute Neighbours
[Open3D DEBUG] Compute Clusters
Precompute Neighbours[========================================] 100%
[Open3D DEBUG] Done Compute Clusters: 10
point cloud has 10 clusters
源代碼:
# <DBSCAN聚類算法,是基于密度的聚類算法。>
# 該算法需要兩個參數。
# -eps: 定義到聚類鄰居的距離
# -min_points: 定義形成聚類所需的最小點數。
# 該函數返回一個標簽,其中標簽-1表示噪音。>import open3d as o3d
import matplotlib.pyplot as plt
import numpy as nppath =  "../pcds/fragment.ply"
print(path)pcd = o3d.io.read_point_cloud(path)
print(pcd)# 定義以選中的點開始蔓延,鄰居點距離0.02米的,最小有10個點,可以構成一個簇;適用于點云分隔的比較開的,一塊一塊的點云。
with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:labels = np.array(pcd.cluster_dbscan(eps=0.02, min_points=10, print_progress=True))max_label = labels.max()
print(f"point cloud has {max_label + 1} clusters")
colors = plt.get_cmap("tab20")(labels / (max_label if max_label > 0 else 1))colors[labels < 0] = 0
pcd.colors = o3d.utility.Vector3dVector(colors[:, :3])
o3d.visualization.draw_geometries([pcd], "Open3D dbscanclusting")參考:
http://www.open3d.org/docs/release/tutorial/Basic/pointcloud.html#Access-estimated-vertex-normal
總結
以上是生活随笔為你收集整理的Open3D DbScanClustering聚类算法的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 宝路达DS7多少钱一辆?
- 下一篇: 用错了表情是哪首歌啊?
