CGAL的三角曲面网格骨架化

2023-12-26 06:39:48

1、介绍

马模型的曲线骨架。?

????????骨架是用于分割、形状匹配、重建、虚拟导航等的有效形状抽象。顾名思义,曲线骨架是曲线结构的图(1D)。对于3D几何体来说,它不是由表面(2D)组成的中轴。如图所示,形状的曲线骨架捕捉其基本拓扑。在这个包中,我们实现了中描述的平均曲率骨架算法,该算法通过迭代收缩输入的三角曲面网格,从无边界的三角曲面中提取曲线骨架。

2、使用

2.1、输入输出

????????输入是一个三角表面网格,FaceListGraph 概念的模型(CGAl::Surface_mesh,CGAL::Polyhedron_3),它没有边界,只有一个连接的组件。骨架以 boost::adjacency_list 类型的图提供。骨架的每个顶点都与一个 3D 位置点和一组输入顶点相关联,这些输入顶点与该骨架顶点相联系。请注意,由于骨架的构造过程,骨架顶点可能没有相应的输入顶点。

????????此软件包需要稀疏线性求解器,我们建议使用 Eigen 3.2 或更高版本。

????????输入和输出如图所示。

?????????左图:章鱼的输入三角曲面网格模型;中:使用该包提取的平均曲率流骨架;右:输入曲面的每个顶点都与一个骨架顶点相关联。

2.2、自由函数

????????如果FaceListGraph概念的CGAL模型(如CGAL::Surface_mesh或CGAL::Polyhedron_3)用作三角化输入曲面网格,Eigen 3.2或更高版本可用,并且定义了CGAL_EIGEN3_ENABLED,则函数CGAL::extract_mean_curvature_flow_skeleton()可用于使用默认参数从输入曲面网格提取平均曲率流骨架,其在大多数情况下工作良好。

2.3、函数对象的高级用法

????????类CGAL::Mean_curvature_flow_skeletonization允许使用低级别函数,如contract_geometry()和collapse_edges()。该类还允许更改算法的参数,例如通过调用set_is_medially_centered()。该类允许用户完全控制算法的每一步以及中间收缩网格(称为细观骨架),如图所示。

????????图中马的平均曲率流量收缩的三次迭代。红色点表示曲面局部退化为曲线结构的顶点。?

2.4、通过骨骼化进行分割

????????作为概念验证,我们展示了如何使用骨架以及输入顶点与骨架的关联,使用包“三角曲面网格分割”来计算输入三角曲面网格的分割。分割算法包括为输入网格的每个面计算形状-直径函数,然后解决图形切割问题。在这里,我们使用骨架来定义一个新的形状-直径函数。具体来说,对于每个面,我们将直径值计算为其三个入射顶点与其相应骨骼点之间的平均距离。该分割的结果如图所示。

????????左图:从三角曲面网格中提取的曲线骨架;右图:分割使用骨架来计算形状直径函数。?

3、性能

????????大象模型用于说明平均曲率流骨架化过程的性能。使用了通过循环细分获得的模型的不同分辨率。
????????如图所示,曲面采样越多,骨架在模型内就越好。

????????大象模型的头部骨架。左图:使用原始网格(2775个顶点);中间:在一个循环细分步骤(11112个顶点)之后;右:在两个循环之后细分步骤(44460个顶点)。?

????????extract_mean_curvature_flow_skeleton()的运行时间(以毫秒为单位),使用多面体3<Simple_cartesian<double>>作为输入数据结构。如果使用Surface_mesh<Simple_cartesian<double>::Point_3>,则运行时类似。当“特征”可用时,使用的解算器是默认解算器。

Number of loop subdivision of?elephant.offNumber of verticesRuntime in s
02,7750.46
111,1121.26
244,4605.64
3177,85226.26

?4、其他

????????Mean_curvature_flow_skeletonization::contract_geometry是CGAL库中的一个函数,用于在骨架化过程中收缩几何体。

????????Mean_curvature_flow_skeletonization::collapse_edges是CGAL库中的一个函数,用于在骨架化过程中折叠边。

????????Mean_curvature_flow_skeletonization::split_faces是CGAL库中的一个函数,用于在骨架化过程中分割面。

????????Mean_curvature_flow_skeletonization::detect_degeneracies是CGAL库中的一个函数,用于在骨架化过程中检测退化情况。

????????Mean_curvature_flow_skeletonization::contract是CGAL库中的一个函数,用于在骨架化过程中收缩骨架。

????????Mean_curvature_flow_skeletonization::contract_until_convergence是CGAL库中的一个函数,用于在骨架化过程中持续收缩骨架,直到收敛为止。

????????Mean_curvature_flow_skeletonization::convert_to_skeleton是CGAL库中的一个函数,用于将骨架化结果转换为骨架。

文章来源:https://blog.csdn.net/weixin_44897632/article/details/135105839
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。