Source code of the Survey on Differential Estimators for 3d point clouds.
Survey on differential estimators for 3D point clouds
Arnal--Anger, L., Lejemble, T., Coeurjolly, D., Barthe, L., & Mellado, N. (2026)
In Computer Graphics Forum (Vol. 45, No. 2).
Project Page | Zenodo | DOI | HAL link
Recent advancements in 3D scanning technologies, including LiDAR and photogrammetry, have enabled the precise digital replication of real-world objects. These methods are widely used in fields such as GIS, robotics, and cultural heritage. However, the point clouds generated by such scans are often noisy and unstructured, posing challenges for traditional geometry processing tasks. Accurately estimating differential properties like surface curvatures and normals is crucial for tasks such as shape matching and classification, but remains complex due to these inherent challenges.
This paper reviews state-of-the-art methods for estimating differential properties from 3D point clouds, with a focus on approaches that offer strong mathematical foundations and theoretical guarantees. We also benchmark these methods using various datasets, evaluating their performance in terms of accuracy, robustness, and efficiency. Our contributions include the release of datasets, tools, and code to promote reproducibility and support future research in this area.
Before running any evaluations or tests, you must download the required datasets. The repository includes a Python script that automatically fetches the data from Zenodo.
To download and extract the data into the mandatory datasets/ folder, run:
pip install zenodo_get
python download_datasets.pyNote: This script requires the zenodo_get package to retrieve the record ID and will automatically extract datasets.zip into the datasets directory.
Requirements To build this project, ensure you have the following dependencies installed:
- CMake: Version 3.24 or higher is strictly required.
- C++ Standard: The project requires a C++20 compatible compiler.
The project is structured with standard CMake subdirectories for src/generators, src/estimators, and src/tools.
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -jThe repository is divided into several specialized modules:
Tools dedicated to creating synthetic point clouds from implicit mathematical surfaces (e.g., Goursat, spheres, tori) or converting existing PLY meshes.
generateFromImplicit: Creates points via rejection sampling and Lloyd relaxation.generateLIDARFromImplicit: Simulates a LiDAR scanner using ray marching.
The core algorithms used to compute differential quantities (normals, principal curvatures, mean/Gaussian curvatures).
compute_ponca_estimators: Utilizes the Ponca library to estimate surfaces using Moving Least Squares (MLS) and various geometric primitives (e.g., APSS, ASO).compute_jetfitting: Estimates quantities by fitting a Monge patch using CGAL's Jet Fitting algorithm.
(Note: Older estimators like VCM and ASO implementations are included but considered deprecated).
A suite of utilities for data manipulation, cleaning, and advanced 3D visualization.
displayPTS2: Advanced Polyscope-based viewers for visualizing point clouds, meshes, and mapping scalar/vector curvature errors to colormaps.rescale_pointCloud: Safely scales and centers point clouds while keeping differential quantities mathematically consistent.CADprocessing&meshCleaner: Tools to align estimated normals with CAD ground truths.comparePTS: Validates deterministic outputs by comparing two point clouds up to a specific epsilon.
This directory contains the automated scripts required to run benchmarks, compute statistics, and generate comparison screenshots.
To improve the development workflow, the following options and optimizations are supported:
ccache: Automatically used if detected on your system to significantly speed up recompilations.Format.cmake: Enabled for automated Clang formatting (use targets format, check-format, and fix-format).CPM Caching: To avoid re-downloading dependencies, enable the CPM cache feature by adding the following to your .bashrc or .zshrc:export CPM_SOURCE_CACHE=$HOME/.cache/CPM