Ponca  2cfe00173bb12dda99e12b2b48a0e1f683bc5cdd
Point Cloud Analysis library
Loading...
Searching...
No Matches
Fitting Module: Reference Manual

This page provides a detailed list of what the Fitting module has to offers.

Fitting techniques Overview

We provide various approaches to approximate, analyze or characterize the geometric properties of local neighborhoods. In most situations, all these tools are based on the estimation of a geometric Primitive approximating the neighborhood, on top of which we provide more advanced computations. The table below summarizes the Primitives available in the library, as well as the associated fitting techniques:

Computed primitive Required Input Fitting techniques
Line Points only CovarianceLineFitImpl (nD)
Plane Points only CovariancePlaneFitImpl (nD)
Plane Oriented points MeanPlaneFitImpl (nD, co-dimension 1)
MongePatch Points only MongePatchQuadraticFitImpl and MongePatchRestrictedQuadraticFitImpl (both 3D)
AlgebraicSphere Points only SphereFitImpl (nD) [9]
AlgebraicSphere Oriented points OrientedSphereFitImpl (nD) [9]
AlgebraicSphere Non-oriented points UnorientedSphereFitImpl (nD) [6]

Ponca also provide methods to compute objects that are not geometric primitives, but provide other informations such as curvatures:

Computed object Required Input Fitting techniques
Barycenter Points only MeanPosition (nD)
Normal Vector Oriented points MeanNormal (nD, co-dimension 1)
Covariance Matrix Points only CovarianceBase (nD)
Weingarten Map Points only FundamentalFormWeingartenEstimator (3D) via MongePatch
Weingarten Map Oriented points NormalDerivativeWeingartenEstimator (3D)

Capabilities of Fitting tools

As described in fitting_extensions_deps, The tool classes provides different kinds of compute capabilities. To describe what a class requires, we use C++20 concepts. Each module has its own concepts file. For fitting tools and extensions, the requirements are described in this file: Fitting/concepts.h. For each concept, a cast operator is provided (typically first line). All subsequent operation should be valid, with the '->' further describing the return type.

Computing Curvatures

Ponca offers several ways to compute curvatures, most of which are reviewed and compared by Arnal-Anger et al. in [4] and listed in the table below:

Estimator Name Estimated quantities Usage
Distance to PCA plane [8] Mean curvature Method potential()
using FitSmoothNormalCovariance = Basket<Point, WeightSmoothFunc, CovariancePlaneFit>;
Surface Variation [16] Mean curvature Method surfaceVariation()
using FitSmoothNormalCovariance = Basket<Point, WeightSmoothFunc, CovariancePlaneFit>;
Growing Least Squares [14] Mean curvature Basket<P,W,OrientedSphereFit,GLSParam> // method kappa()
Point Set Surfaces (PSS) [3] Curvature Tensor API of CurvatureEstimatorBase :
using EstimatorSmoothNormalCovariance =
Monge Patch fitting (comparable to jets fitting[5] ) Curvature Tensor API of CurvatureEstimatorBase using a QuadraticHeightField:
Monge Patch fitting (comparable to jets fitting[5] ) Curvature Tensor API of CurvatureEstimatorBase using a RestrictedQuadraticHeightField:
Algebraic Point Set Surfaces (APSS) [9] Curvature Tensor API of CurvatureEstimatorBase:
Algebraic Shape Operator (ASO) [12] Curvature Tensor API of CurvatureEstimatorBase:
Figure 3. Example of mean curvature (GLSParam::kappa) computed at a fine (left) and a coarse (right) scale, and rendered with a simple color map (orange for concavities, blue for convexities).

Available filters

Class nameParametersDocumentation
DistWeightFilterEval location: p, Radius: tFilter points further than t, and weigh them according to kernel (Available Weighting kernel)
NoWeightFilterEval location: pConstant kernel for every point. Does not check for radius unlike DistWeightFilter with contant kernel. Transform neighbors to local frame.
NoWeightFilterGlobalEval location: pConstant kernel for every point. Does not check for radius unlike DistWeightFilter with contant kernel. Keep neighbors coordinates in global frame
NeighborFilterStoreNormalEval location: p, Radius: t, Normal: nStores normal. It extends another filter as template param

Available Weighting kernel

During any computation, each neighbor can be weighted by an amount defined by \(w(x) = \phi\left(\frac{||x - p||}{r}\right)\), where \(p\) is the evaluation location and \(r\) is the radius. This sections list the different function \(\phi\) available in Ponca.

ClassExpression
ConstantWeightKernel<_Scalar>\(\phi(x) = 1\)
SmoothWeightKernel<_Scalar>\(\phi(x) = (x^2 - 1)^2\)
PolynomialSmoothWeightKernel<_Scalar, m, n>\(\phi(x) = (x^n - 1)^m\)
WendlandWeightKernel<_Scalar>\(\phi(x) = (1 - x)^4(4x + 1)\)
SingularWeightKernel<_Scalar>\(\phi(x) = \frac{1}{x^2}\)
CompactExpWeightKernel<_Scalar>\(\phi(x) = \exp\left(\frac{-x^2}{1 - x^2}\right)\)
GaussianWeightKernel<_Scalar>\(\phi(x) = \exp\left(-\frac{1}{2}x^2\right)\)