|
CGAL 6.0 - Triangulated Surface Mesh Skeletonization
|
#include <CGAL/Mean_curvature_flow_skeletonization.h>
Function object that enables to extract the mean curvature flow skeleton of a triangulated surface mesh.
The algorithm used takes as input a triangulated surface mesh and iteratively contracts the surface mesh following the mean curvature flow [1]. The intermediate contracted surface mesh is called the meso-skeleton. After each iteration, the meso-skeleton is locally remeshed using angle split and edge contraction. The process ends when the modification of the meso-skeleton between two iterations is small.
| TriangleMesh | a model of FaceListGraph |
| Traits | a model of MeanCurvatureSkeletonizationTraitsDefault: boost::property_traits<
boost::property_map<TriangleMesh, CGAL::vertex_point_t>::type
>::value_type
|
| VertexPointMap | a model of ReadWritePropertyMap with boost::graph_traits<TriangleMesh>::vertex_descriptor as key and Traits::Point_3 as value type.Default: boost::property_map<TriangleMesh, CGAL::vertex_point_t>::const_type.
|
| SolverTraits_ | a model of NormalEquationSparseLinearAlgebraTraits_d.Default: If Eigen 3.2 (or greater) is available and CGAL_EIGEN3_ENABLED is defined, then an overload of Eigen_solver_traits is provided as default parameter: Eigen::SimplicialLDLT< Eigen::SparseMatrix<double> >
>
|
Types | |
| typedef boost::adjacency_list< boost::vecS, boost::vecS, boost::undirectedS, Vmap > | Skeleton |
The graph type representing the skeleton. The vertex property Vmap is a struct with a member point of type Traits::Point_3 and a member vertices of type std::vector<boost::graph_traits<TriangleMesh>::vertex_descriptor>. See the boost documentation page for more details. | |
Access to the Meso-Skeleton | |
| typedef unspecified_type | Meso_skeleton |
When using the low level API it is possible to access the intermediate results of the skeletonization process, called meso-skeleton. It is a triangulated surface mesh which is model of FaceListGraph and HalfedgeListGraph. | |
| const Meso_skeleton & | meso_skeleton () const |
| Reference to the collapsed triangulated surface mesh. | |
Constructor | |
| Mean_curvature_flow_skeletonization (const TriangleMesh &tmesh, VertexPointMap vertex_point_map=get(CGAL::vertex_point, tmesh), Traits traits=Traits()) | |
| The constructor of a skeletonization object. | |
Local Remeshing Parameters | |
| double | max_triangle_angle () const |
During the local remeshing step, a triangle will be split if it has an angle larger than max_triangle_angle(). | |
| double | min_edge_length () const |
During the local remeshing step, an edge will be collapse if it is length is less than min_edge_length(). | |
| void | set_max_triangle_angle (double value) |
set function for max_triangle_angle() | |
| void | set_min_edge_length (double value) |
set function for min_edge_length() | |
Algorithm Termination Parameters | |
| std::size_t | max_iterations () const |
Maximum number of iterations performed by contract_until_convergence(). | |
| double | area_variation_factor () const |
The convergence is considered to be reached if the variation of the area of the meso-skeleton after one iteration is smaller than area_variation_factor()*original_area where original_area is the area of the input triangle mesh. | |
| void | set_max_iterations (std::size_t value) |
set function for max_iterations() | |
| void | set_area_variation_factor (double value) |
set function for area_variation_factor() | |
Vertex Motion Parameters | |
| double | quality_speed_tradeoff () const |
| This is an advanced function. | |
| bool | is_medially_centered () const |
If true, the meso-skeleton placement will be attracted by an approximation of the medial axis of the mesh during the contraction steps, so will be the result skeleton. | |
| double | medially_centered_speed_tradeoff () const |
| This is an advanced function. | |
| void | set_quality_speed_tradeoff (double value) |
set function for quality_speed_tradeoff() | |
| void | set_is_medially_centered (bool value) |
set function for is_medially_centered() | |
| void | set_medially_centered_speed_tradeoff (double value) |
set function for medially_centered_speed_tradeoff() | |
| template<class InputIterator > | |
| void | set_fixed_vertices (InputIterator begin, InputIterator end) |
| This is an advanced function. | |
High Level Function | |
| void | operator() (Skeleton &skeleton) |
| Creates the curve skeleton: the input surface mesh is iteratively contracted until convergence, and then turned into a curve skeleton. | |
Low Level Functions | |
| Advanced The following functions enable the user to run the mean curvature flow skeletonization algorithm step by step. | |
| void | contract_geometry () |
| Runs one contraction step following the mean curvature flow. | |
| std::size_t | collapse_edges () |
Collapses edges of the meso-skeleton with length less than min_edge_length() and returns the number of edges collapsed. | |
| std::size_t | split_faces () |
Splits faces of the meso-skeleton having one angle greater than max_triangle_angle() and returns the number of faces split. | |
| std::size_t | detect_degeneracies () |
| Prevents degenerate vertices to move during the following contraction steps and returns the number of newly fixed vertices. | |
| void | contract () |
Performs subsequent calls to contract_geometry(), collapse_edges(), split_faces() and detect_degeneracies() | |
| void | contract_until_convergence () |
Iteratively calls contract() until the change of surface area of the meso-skeleton after one iteration is smaller than area_variation_factor()*original_area where original_area is the area of the input triangle mesh, or if the maximum number of iterations has been reached. | |
| void | convert_to_skeleton (Skeleton &skeleton) |
| Converts the contracted surface mesh to a skeleton curve. | |
| CGAL::Mean_curvature_flow_skeletonization< TriangleMesh, Traits_, VertexPointMap_, SolverTraits_ >::Mean_curvature_flow_skeletonization | ( | const TriangleMesh & | tmesh, |
| VertexPointMap | vertex_point_map = get(CGAL::vertex_point, tmesh), |
||
| Traits | traits = Traits() |
||
| ) |
The constructor of a skeletonization object.
The algorithm parameters are initialized such that:
max_triangle_angle() == 110quality_speed_tradeoff() == 0.1medially_centered_speed_tradeoff() == 0.2area_variation_factor() == 0.0001max_iterations() == 500is_medially_centered() == truemin_edge_length() == 0.002 * the length of the diagonal of the bounding box of tmeshtmesh is a triangulated surface mesh without borders and has exactly one connected component. | tmesh | input triangulated surface mesh. |
| vertex_point_map | property map which associates a point to each vertex of the graph. |
| traits | an instance of the traits class. |
| void CGAL::Mean_curvature_flow_skeletonization< TriangleMesh, Traits_, VertexPointMap_, SolverTraits_ >::convert_to_skeleton | ( | Skeleton & | skeleton | ) |
Converts the contracted surface mesh to a skeleton curve.
| Skeleton | an instantiation of boost::adjacency_list as a data structure for the skeleton curve. |
| skeleton | graph that will contain the skeleton of tmesh. It should be empty before passed to the function. |
| double CGAL::Mean_curvature_flow_skeletonization< TriangleMesh, Traits_, VertexPointMap_, SolverTraits_ >::medially_centered_speed_tradeoff | ( | ) | const |
This is an advanced function.
Controls the smoothness of the medial approximation: increasing this value results in a (less smooth) skeleton closer to the medial axis, as well as a lower convergence speed. It is only used if is_medially_centered()==true. This parameter corresponds to \( w_M \) in the original publication.
| void CGAL::Mean_curvature_flow_skeletonization< TriangleMesh, Traits_, VertexPointMap_, SolverTraits_ >::operator() | ( | Skeleton & | skeleton | ) |
Creates the curve skeleton: the input surface mesh is iteratively contracted until convergence, and then turned into a curve skeleton.
This is equivalent to calling contract_until_convergence() and convert_to_skeleton().
| skeleton | graph that will contain the skeleton of the input triangulated surface mesh. For each vertex descriptor vd of skeleton, the corresponding point and the set of input vertices that contracted to vd can be retrieved using skeleton[vd].point and skeleton[vd].vertices respectively. |
| double CGAL::Mean_curvature_flow_skeletonization< TriangleMesh, Traits_, VertexPointMap_, SolverTraits_ >::quality_speed_tradeoff | ( | ) | const |
This is an advanced function.
Controls the velocity of movement and approximation quality: decreasing this value makes the mean curvature flow based contraction converge faster, but results in a skeleton of lower quality. This parameter corresponds to \( w_H \) in the original publication.
| void CGAL::Mean_curvature_flow_skeletonization< TriangleMesh, Traits_, VertexPointMap_, SolverTraits_ >::set_fixed_vertices | ( | InputIterator | begin, |
| InputIterator | end | ||
| ) |
This is an advanced function.
sets the vertices in the range [begin, end) as fixed. Fixed vertices will not be moved during contraction and this will therefore prevent convergence towards the skeleton if contract_until_convergence() is used. It is useful only if the end goal is to retrieve the meso-skeleton after a number of contract_geometry(), keeping the specified vertices fixed in place.
| InputIterator | a model of InputIterator with boost::graph_traits<TriangleMesh>::vertex_descriptor as value type. |