Open3D 计算点云的面状指数

时间:2025-03-27 15:48:45
  • import open3d as o3d
  • import numpy as np
  • from matplotlib import pyplot as plt
  • def compute_planarity(pcd, k=30):
  • """
  • 计算点云的面状指数(Planarity Index)。
  • 参数:
  • pcd (): 输入点云。
  • k (int): 每个点的邻域点数量。
  • 返回:
  • : 面状指数数组,长度与点云中的点数相同。
  • """
  • # 使用 KD-Tree 来查找每个点的邻域
  • pcd_tree = (pcd)
  • planarity_indices = (len())
  • # 遍历每个点,计算其面状指数
  • for i in range(len()):
  • # 查找邻域点
  • [_, idx, _] = pcd_tree.search_knn_vector_3d([i], k)
  • neighbors = ()[idx, :]
  • # 计算协方差矩阵
  • cov_matrix = ()
  • # 计算特征值
  • eigenvalues, _ = (cov_matrix)
  • # 对特征值排序
  • eigenvalues = (eigenvalues)
  • # 计算面状指数 (Planarity Index)
  • planarity_index = (eigenvalues[1] - eigenvalues[0]) / eigenvalues[2]
  • planarity_indices[i] = planarity_index
  • return planarity_indices
  • # 加载点云
  • pcd = .read_point_cloud("standford_cloud_data\")
  • .draw_geometries([pcd],window_name="原始点云",width=1024,height=768,)
  • # 计算点云的面状指数
  • planarity_indices = compute_planarity(pcd)
  • # 可视化面状指数(使用颜色映射)
  • colors = plt.get_cmap("viridis")(planarity_indices / max(planarity_indices))
  • = .Vector3dVector(colors[:, :3])
  • # 显示点云和面状指数
  • .draw_geometries([pcd],window_name="处理后点云",width=1024,height=768,)