simplify_vertex_clustering
open3d.geometry.TriangleMesh.simplify_vertex_clustering(voxel_size, cluster_tolerance, smoothness_angle, neighbor_concurrency, edge_concurrency, verbose=False)
该函数接收五个参数,用于对三角网格进行点云简化,从而降低数据量。具体参数如下:
- voxel_size(float): 像素大小,表示三维体素网格中每个体素的大小。该参数会被用来生成三维体素网格然后对其进行有向边缘检测(directed edge clustering)。可以理解为三维体素网格的分辨率,像素越小分辨率越高,但是计算量也会越大。常见值在0.001-0.01之间。
- cluster_tolerance(float): 聚类容差,表示允许在多远距离内的点被认为是同一聚类的点。在有向边缘检测过程中,点之间的距离小于等于聚类容差时会被认为是同一聚类的点。默认值是2.0*voxel_size。
- smoothness_angle(float): 平整角度,表示对平滑角在阈值内的点进行聚类。默认值是15度,而且只有当参数组合中的噪声处理算法(simplification_contracting_hull 或者 simplification_quadric_decimation)被激活时才会生效。
- neighbor_concurrency(int): 并行检查邻居的数量。默认值是5。
- edge_concurrency(int): 并行处理边缘数量。默认值是2。
- verbose(bool): 是否输出详细信息。默认值是False。
该函数根据给定参数和算法,将输入三角网格进行简化,并返回简化后的三角网格。简化后的三角网格的网格拓扑结构(拓扑关系)基本保持不变,但是网格上的点云变得更加稀疏。简化的算法有:
- simplification_contracting_hull:收缩算法,同时也是一种加速算法。对于点云数据较多的网格比较适用。
- simplification_quadric_decimation:基于二次误差的算法,更适合处理较少点的网格。
注意:在使用simplify_vertex_clustering函数对三角网格进行简化后,返回的简化后的网格可能会缺失未保留的未被聚类或者未被合并到三角面的点。如果需要对所有点进行简化,请使用PointCloud.simplify_vertex_clustering函数。
参考文献: