赞
踩
关键代码:
labels = np.array(pcd.cluster_dbscan(eps=0.02, min_points=10, print_progress=True))
point_cloud_dbscan_clustering.py
- import open3d as o3d
- import numpy as np
- import matplotlib.pyplot as plt
-
- if __name__ == "__main__":
- # 1. read pcd
- sample_ply_data = o3d.data.PLYPointCloud()
- pcd = o3d.io.read_point_cloud(sample_ply_data.path)
- # Flip it, otherwise the pointcloud will be upside down.
- """
- [
- [1, 0, 0, 0],
- [0, -1, 0, 0],
- [0, 0, -1, 0],
- [0, 0, 0, 1]
- ]
- """
- pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
-
- # 2. cluster_dbscan. 聚类
- """
- eps. Density parameter that is used to find neighbouring points.
- min_points. Minimum number of points to form a cluster.
- print_progress (default False). If 'True' the progress is visualized in the console.
- return: label. 每个点都有类别值
- """
- 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))
-
- # 3. view:
- 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 # 类别为0的,颜色设置为黑色
- pcd.colors = o3d.utility.Vector3dVector(colors[:, :3]) # ndarray to vector3d
- o3d.visualization.draw([pcd])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。