Ponca  4a9354998d048bf882a3ee9bac8105216fa08d13
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 =
BasketDiff<FitSmoothNormalCovariance, FitSpaceDer, CovariancePlaneDer, NormalDerivativeWeingartenEstimator,
WeingartenCurvatureEstimatorDer>;
@ FitSpaceDer
Flag indicating a space differentiation.
Definition enums.h:36
CovariancePlaneDerImpl< DataPoint, _NFilter, DiffType, CovarianceDer< DataPoint, _NFilter, DiffType, MeanPositionDer< DataPoint, _NFilter, DiffType, T > > > CovariancePlaneDer
Helper alias for Plane fitting on 3D points using CovariancePlaneFitImpl.
Monge Patch fitting (comparable to jets fitting[5] ) Curvature Tensor API of CurvatureEstimatorBase using a QuadraticHeightField:
using FitMongeSmooth = Basket<Point, WeightSmoothFunc, MongePatchQuadraticFit>;
Monge Patch fitting (comparable to jets fitting[5] ) Curvature Tensor API of CurvatureEstimatorBase using a RestrictedQuadraticHeightField:
using FitMongeRestrictedSmooth = Basket<Point, WeightSmoothFunc, MongePatchRestrictedQuadraticFit>;
Algebraic Point Set Surfaces (APSS) [9] Curvature Tensor API of CurvatureEstimatorBase:
using FitSmoothOrientedSpatial = BasketDiff<FitSmoothOriented, FitSpaceDer, OrientedSphereDer,
NormalDerivativeWeingartenEstimator, WeingartenCurvatureEstimatorDer>;
OrientedSphereDerImpl< DataPoint, _NFilter, DiffType, MeanPositionDer< DataPoint, _NFilter, DiffType, T > > OrientedSphereDer
Helper alias for Oriented Sphere fitting on 3D points using OrientedSphereDerImpl.
Algebraic Shape Operator (ASO) [12] Curvature Tensor API of CurvatureEstimatorBase:
using ASOSmooth = BasketDiff<FitSmoothOriented, FitSpaceDer, OrientedSphereDer, MlsSphereFitDer,
NormalDerivativeWeingartenEstimator, WeingartenCurvatureEstimatorDer>;
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 name Parameters Documentation
DistWeightFilter Eval location: p, Radius: t Filter points further than t, and weigh them according to kernel (Available Weighting kernel)
NoWeightFilter Eval location: p Constant kernel for every point. Does not check for radius unlike DistWeightFilter with contant kernel. Transform neighbors to local frame.
NoWeightFilterGlobal Eval location: p Constant kernel for every point. Does not check for radius unlike DistWeightFilter with contant kernel. Keep neighbors coordinates in global frame
NeighborFilterStoreNormal Eval location: p, Radius: t, Normal: n Stores 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.

Class

Expression

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)\)