diff --git a/_posts/2024-12-01-mesh3-improvements.md b/_posts/2024-12-01-mesh3-improvements.md new file mode 100644 index 000000000..44178a580 --- /dev/null +++ b/_posts/2024-12-01-mesh3-improvements.md @@ -0,0 +1,123 @@ +--- +layout: post +title: "Tetrahedral Mesh Generation Improvements" +description: "Tetrahedral Mesh Generation Improvements in CGAL-6.0.1" +category: +tags: [""] +--- +{% include JB/setup %} + +
The CGAL component +3D Mesh Generation +is the primary component to generate isotropic simplicial meshes discretizing 3D domains with CGAL. +First introduced in CGAL-3.5 (2009!), this component has been constantly updated through the years +to improve its performance, its versatility, and the quality of the meshes it produces.
+ +Recent releases of CGAL have once again introduced new enhancements that enable more accurate +representations of input surfaces, for a wider range of input data types. It is now possible to: +
CGAL's tetrahedral mesh generation algorithm is able to generate tetrahedral meshes from 3D segmented images. +Regardless of input type, one-dimensional feature detection and construction must be performed before +the generation of the mesh. +In 3D segmented images, these features correspond to the intersections of the bounding box of the image with the surfaces +defined by the image, as well as polylines that lie at the intersection of three or more subdomains (including the outside).
+ +The article +Hege, H. C., Seebass, M., Stalling, D., & Zöckler, M. (1997), +A generalized marching cubes algorithm based on non-binary classifications provides a classification +of possible voxel configurations. +This description has been generalized for tetrahedral mesh generation needs, and implemented in CGAL.
+ +Following feature lines detection, polyline features are added to the feature graph of the domain +for feature protection, similarly to what is done for polyhedral surfaces.
+ +Two new detection functors are introduced to support the protection of triple lines: +
CGAL::Detect_features_in_image()
: detect and construct all
+ polylines lying at the intersection of three or more subdomains, andCGAL::Detect_features_on_image_bbox()
: detect and construct the polylines
+ that lie at the intersection of two or more subdomains and the bounding box of the input labeled image.When a segmented image is given as input for tetrahedral mesh generation,
+the generated mesh surface sometimes sticks too closely to the voxels surface, causing an aliasing effect.
+A solution to generate a smooth and accurate output surface was described by Stalling et al. in
+Stalling, D., Zöckler, M., Sander, O., & Hege, H. C. (1998),
+Weighted labels for 3D image segmentation.
+The approach consists in generating a second input image made of integer coefficients called weights,
+and to use those weights to define smoother domain boundaries.
+
+This addition has been added to CGAL, and the 3D image of weights can be generated using the new function
+CGAL::Mesh_3::generate_label_weights()
.
The following example shows how to use weighted labeled images: mesh_3D_weighted_image.cpp.
+ +A new method combining triple line protection and weighted labels has been +designed and implemented in CGAL, achieving smooth and feature preserving meshes. +This method leverages the best of these two new functionalities.
+ +Our Delaunay refinement algorithm is guided by meshing criteria (size, shape, etc.). +When these criteria are not honored, new vertices are inserted until the criteria are satisfied, +a process guaranteed to terminate. +The list of CGAL meshing criteria has been enriched with a new criterion that enables users to +define an upper bound on the distance between the input feature graph and the output feature edges, +providing finer control over the mesh features.
+ +The example
+mesh_polyhedral_domain_with_edge_distance.cpp shows how to use this new criterion, called edge_distance
.
edge_distance
meshing criterion.
+ The quality improvement is noticeable at the extremities of the stool legs.
+All these new improvements are part of CGAL-6.0.1, which has just been officially released.
+ + +CGAL-6.0.1 announcement +