diff --git a/_posts/2024-05-29-Kinetic_surface_reconstruction.md b/_posts/2024-05-29-Kinetic_surface_reconstruction.md new file mode 100644 index 000000000..e34fda48d --- /dev/null +++ b/_posts/2024-05-29-Kinetic_surface_reconstruction.md @@ -0,0 +1,72 @@ +--- +layout: post +title: "New in CGAL: Kinetic Space Partition and Kinetic Surface Reconstruction" +description: "" +category: +tags: [""] +--- +{% include JB/setup %} + +

Sven Oesau°, +Florent Lafarge*. +

+

°GeometryFactory, *INRIA Sophia Antipolis

+
+ +

Acquired point clouds suffer from various defects like noise, missing data and clutter. Reconstruction methods are required to fill in missing parts reasonably to provide a complete reconstruction. Common methods for reconstructing smooth surfaces, e.g., the Poisson Surface Reconstruction, fit an implicit function to the point cloud and extract the level set. However, those methods have difficulties in reconstructing sharp features and piecewise-planar objects. In addition, they often provide a large number of triangles.

+

Keeping architecture and man-made objects with piecewise-linear geometries in mind, a popular approach to guarantee a watertight volume is to use space partitioning. An occupancy labeling then divides the cells of the partition into "empty" or "occupied" space, and thus generates a closed surface. A typical choice to fill in unobserved parts of the object is to use the extensions of detected shapes in the point cloud.

+ +

Kinetic Surface Reconstruction

+ +

Kinetic Surface Reconstruction (CGAL::Kinetic_surface_reconstruction_3) is a new package that implements a state-of-the-art 3D reconstruction pipeline based on another new package, Kinetic Space Partition(CGAL::Kinetic_shape_partition_3). While the Kinetic Space Partition is the core mechanism providing the geometry for the reconstruction (more on that later), other steps are necessary to extract the 3D surface from the partition. Our pipeline is based on Bauchet, J.-P., & Lafarge, F. (2020). Kinetic Shape Reconstruction. In ACM Transactions of Graphics, 39(5), 2020, and takes an oriented point cloud as input and generates a watertight 3D polygonal surface.

+ +
+ +
Indoor LiDAR point cloud and low-polygonal mesh from Kinetic Surface Reconstruction. +
+ +
+
+ +
Indoor LiDAR point cloud and low-polygonal mesh from Kinetic Surface Reconstruction. +
+ +
+
+ +
Polygon mesh only. +
+ +

While the reconstruction pipeline has several parameters, which are directly passed to methods from the Shape Detection package and Shape Regularization package, the Kinetic Space Partition and Kinetic Surface Reconstruction add a few parameters to give the user control over the reconstruction. The complexity of the surface can be adapted to favor simpler surfaces, i.e., with a lower polygon count.

+ +

The occupancy labeling may consider the sides of the bounding boxes as empty space, e.g., for the reconstruction of objects, or individually as occupied space, e.g., the bottom or ground side in the case of aerial LiDAR. Also the bounding box for the space partition can be axis-aligned or oriented without transforming the input data.

+ +

All reconstructions shown here have been created with the example ksr_parameters.cpp. The used parameters are listed in the Performance chapter in the user manual and the datasets can be found on the INRIA Titane webpage.

+ +
+
+
Reconstruction of aerial LiDAR of a church with different complexity parameters.
(middle right) shows the reconstruction with an axis-aligned bounding box and (right) sets the bottom bounding box face to be labeled as empty.
+
+ +
+

Kinetic Space Partition

+ +

The major challenges of space decomposition and labeling methods are high computational complexity and a large number of small cells which are caused by the often indefinite extension of planar shapes. The Kinetic Space Partition overcomes these limitations by following a kinetic approach: planar input shapes are not extended indefinitely, but extend over time until they collide with other input shapes. A user-provided parameter to adjust the overall complexity of the partition limits the extension of shapes after a number of intersections with other shapes. Thus, the Kinetic Space Partition is a subset of a full plane arrangement and small input shapes are limited to only have a local impact on the partition.

+

A subdivision by using an octree allows to split up the input shapes into smaller Kinetic Space Partitions and thus provide a significant speedup. The mechanism is fully transparent as the smaller partitions are fused into one conformal partition.

+
+
+
Point cloud of a horse split into 127 kinetic space partitions using an octree. +
+ +

Performance

+

The runtime of the Kinetic Surface Reconstruction depends mostly on the Shape Detection and the Kinetic Space Partition. The use of Shape Regularization is optional, but can increase the performance and the quality of the reconstruction, particularly in the case of architecture and piecewise-planar objects. The indoor point cloud used in the first two figures has around 3 million points and the reconstruction of the model takes around 132 seconds. The church model has around 1.2 million points and was reconstructed in around 36s.

+ +

Status

+

The Kinetic Shape Partition and the Kinetic Surface Reconstruction are already integrated in CGAL's master branch on the CGAL GitHub repository, and will be officially released in the upcoming version of CGAL, CGAL 6.0, scheduled for June 2024.

+ + +Documentation of the package Kinetic Surface Reconstruction
+Documentation of the package Kinetic Space Partition
+ + +CGAL master branch on GitHub diff --git a/images/KSP_horse_octree.png b/images/KSP_horse_octree.png new file mode 100644 index 000000000..c48785fe7 Binary files /dev/null and b/images/KSP_horse_octree.png differ diff --git a/images/KSR_church_parameters.png b/images/KSR_church_parameters.png new file mode 100644 index 000000000..9405b0093 Binary files /dev/null and b/images/KSR_church_parameters.png differ diff --git a/images/KSR_indoor_overlay.png b/images/KSR_indoor_overlay.png new file mode 100644 index 000000000..0064f49d6 Binary files /dev/null and b/images/KSR_indoor_overlay.png differ diff --git a/images/KSR_indoor_reconstruction.png b/images/KSR_indoor_reconstruction.png new file mode 100644 index 000000000..76a3a0002 Binary files /dev/null and b/images/KSR_indoor_reconstruction.png differ diff --git a/images/KSR_meeting_room_outside.png b/images/KSR_meeting_room_outside.png new file mode 100644 index 000000000..4ff330ac6 Binary files /dev/null and b/images/KSR_meeting_room_outside.png differ