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 %} + +

Jane Tournois

+

GeometryFactory

+
+ +

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: +

+ + +
+

Recovery of Sharp Features in Labeled Images

+ +

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: +

+

+ +
+
+
Mesh generation from labeled image without (left) + and with triple lines detection and protection (right). + Protection of the feature lines at the intersection of the three subdomains (pink, blue, outside) + enables a much more faithful mesh, with fewer vertices. +
+ + +
+

Weighted Labeled Images

+ +

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().

+ +
+
+
Mesh generation from labeled image without weights (left, 88,000 vertices) + and with weights (right, 67,000 vertices). +
+ +
+

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.

+ +
+

Approximation Criterion for Feature Edges

+ +

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.

+ +
+
+
Mesh generation from polyhedral surface with a varying edge_distance meshing criterion. + The quality improvement is noticeable at the extremities of the stool legs. +
+ + +

Status

+ +

All these new improvements are part of CGAL-6.0.1, which has just been officially released.

+ + +CGAL-6.0.1 announcement +
+ +Documentation of the Tetrahedral Mesh Generation package +
+ +CGAL master branch on GitHub diff --git a/images/mesh3_edge_distance_stool.png b/images/mesh3_edge_distance_stool.png new file mode 100644 index 000000000..c449042ea Binary files /dev/null and b/images/mesh3_edge_distance_stool.png differ diff --git a/images/mesh3_triple_lines_protection.png b/images/mesh3_triple_lines_protection.png new file mode 100644 index 000000000..7023e4a24 Binary files /dev/null and b/images/mesh3_triple_lines_protection.png differ diff --git a/images/mesh3_weighted_images.png b/images/mesh3_weighted_images.png new file mode 100644 index 000000000..69c19c4da Binary files /dev/null and b/images/mesh3_weighted_images.png differ