feat: 算法升级、整车配准集成与性能分析文档
算法更新: delivery v1.2.1、平整度v1.5、测距v2.2、整车配准v1.3 适配器: vehicle-registration 新增、各算法 manifest 和 adapter 更新 后端: taskCadFiles/source 字段迁移、derivedPointClouds 注册、取消任务联动 前端: ElapsedTime 时长显示、两步算法流程、canRun 逻辑修复 文档: 新增5份算法性能分析报告
This commit is contained in:
50
alg/平整度、平面度、轮廓测量v1.5/archive/relative_code/DBSCAN.py
Normal file
50
alg/平整度、平面度、轮廓测量v1.5/archive/relative_code/DBSCAN.py
Normal file
@@ -0,0 +1,50 @@
|
||||
import open3d as o3d
|
||||
import numpy as np
|
||||
|
||||
|
||||
def dbscan_open3d(pcd, eps=0.1, min_points=10):
|
||||
"""
|
||||
使用 Open3D 进行 DBSCAN 聚类
|
||||
Args:
|
||||
pcd: Open3D 点云对象
|
||||
eps: 邻域半径
|
||||
min_points: 最小邻域点数
|
||||
Returns:
|
||||
labels: 每个点的簇标签(-1 表示噪声)
|
||||
clusters: 各簇的点索引列表
|
||||
"""
|
||||
# DBSCAN 聚类
|
||||
labels = np.array(pcd.cluster_dbscan(eps=eps, min_points=min_points))
|
||||
|
||||
# 提取各簇索引
|
||||
unique_labels = np.unique(labels)
|
||||
clusters = []
|
||||
for label in unique_labels:
|
||||
if label == -1:
|
||||
continue
|
||||
clusters.append(np.where(labels == label)[0])
|
||||
|
||||
return labels, clusters
|
||||
|
||||
|
||||
# 使用示例
|
||||
pcd = o3d.io.read_point_cloud("E:\point_distance\data\part_car_head.ply")
|
||||
|
||||
# 预处理
|
||||
pcd = pcd.voxel_down_sample(voxel_size=0.05)
|
||||
pcd, _ = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0)
|
||||
|
||||
# DBSCAN 聚类
|
||||
labels, clusters = dbscan_open3d(pcd, eps=0.1, min_points=50)
|
||||
|
||||
print(f"找到 {len(clusters)} 个聚类")
|
||||
print(f"噪声点: {np.sum(labels == -1)}")
|
||||
|
||||
# 为每个聚类着色
|
||||
colors = np.random.rand(len(clusters), 3)
|
||||
colored_points = np.zeros((len(pcd.points), 3))
|
||||
for i, cluster in enumerate(clusters):
|
||||
colored_points[cluster] = colors[i]
|
||||
pcd.colors = o3d.utility.Vector3dVector(colored_points)
|
||||
|
||||
o3d.visualization.draw_geometries([pcd])
|
||||
Reference in New Issue
Block a user