Ponca  7d8ac87a7de01d881c9fde3c42e397b44bffb901
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) [6]
AlgebraicSphere Oriented points OrientedSphereFitImpl (nD) [6]
AlgebraicSphere Non-oriented points UnorientedSphereFitImpl (nD) [4]

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 CovarianceFitBase (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 provides, we uses flags that allows us to check for compatibility at compile time.

Here is an in depth description of all the labels of the Fitting tools :

Label Provided by Required by

Outputs

PROVIDES_MEAN_POSITION
Mean of the input points vectors
MeanPosition MeanPositionDer
MeanPlaneFitImpl
OrientedSphereFitImpl
CovarianceFitBase
UnorientedSphereFitImpl

barycenter()
barycenterDistance()
barycenterLocal()

PROVIDES_MEAN_POSITION_DERIVATIVE
Provides derivative of the mean position
MeanPositionDer CovarianceFitDer
OrientedSphereDerImpl
UnorientedSphereDerImpl

barycenterDerivatives()

PROVIDES_MEAN_NORMAL
Mean of the normal vectors
MeanNormal MeanPlaneFitImpl
OrientedSphereFitImpl

meanNormalVector()

PROVIDES_MEAN_NORMAL_DERIVATIVE
Provides derivative of the mean normal
MeanNormalDer -

dMeanNormal()

PROVIDES_PRIMITIVE_BASE
Provides base API for primitives
PrimitiveBase PrimitiveDer
AlgebraicSphere

getWeightSum()
setNeighborFilter()
getNeighborFilter()
getCurrentState()
getNumNeighbors()
isReady()
isStable()

PROVIDES_PRIMITIVE_DERIVATIVE
Provides base API for primitive derivatives
PrimitiveDer GLSDer
CovarianceFitDer
MeanPositionDer
MeanNormalDer
MlsSphereFitDer
OrientedSphereDerImpl
UnorientedSphereDerImpl

isScaleDer()
isSpaceDer()
derDimension()

PROVIDES_GLS_PARAMETRIZATION
Growing Least Squares reparametrization of the OrientedSphereFit
GLSParam GLSDer

tau()
eta()
kappa()
tau_normalized()
eta_normalized()
kappa_normalized()
fitness()
compareTo()

PROVIDES_GLS_DERIVATIVE
Differentiation of GLSParam
GLSDer -

dtau()
deta()
dkappa()
dtau_normalized()
deta_normalized()
dkappa_normalized()

PROVIDES_GLS_GEOM_VAR
Provides Geometric Variation as a weighted sum of the GLS scale-invariant partial derivatives
GLSDer -

geomVar()

PROVIDES_ALGEBRAIC_SPHERE

AlgebraicSphere OrientedSphereFitImpl
OrientedSphereDerImpl
SphereFitImpl
UnorientedSphereFitImpl
UnorientedSphereDerImpl

potential()
project()
primitiveGradient()
isPlane()
isValid()
isApprox()
changeBasis()
prattNorm()
prattNorm2()
applyPrattNorm()
radius()
center()
isNormalized()

PROVIDES_ALGEBRAIC_SPHERE_DERIVATIVE
Provides derivatives for algebraic sphere
OrientedSphereDerImpl
UnorientedSphereDerImpl
GLSDer
MlsSphereFitDer

dPotential()

PROVIDES_COVARIANCE_PLANE_DERIVATIVE
Provides derivatives for hyper-planes
CovariancePlaneDerImpl -

dPotential()

PROVIDES_NORMAL_DERIVATIVE
Provides the derivatives of the primitive normal
CovariancePlaneDerImpl
MlsSphereFitDer
OrientedSphereDerImpl
UnorientedSphereDerImpl
NormalDerivativesCurvatureEstimator

dNormal()

PROVIDES_POSITION_COVARIANCE
Provides the covariance matrix
CovarianceFitBase CovarianceFitDer
CovarianceLineFitImpl
CovariancePlaneFitImpl

solver()

PROVIDES_POSITION_COVARIANCE_DERIVATIVE

CovarianceFitDer CovariancePlaneDerImpl

-

PROVIDES_PLANE

Plane CovariancePlaneFitImpl
CovariancePlaneDerImpl
ProjectedNormalCovarianceCurvatureEstimator
MeanPlaneFitImpl
MongePatch

setPlane()
potential()
project()
primitiveGradient()

PROVIDES_TANGENT_PLANE_BASIS
Turns a point in ambient 3D space to the tangent plane.
CovariancePlaneFitImpl MongePatch worldToTangentPlane()
tangentPlaneToWorld()

Computing Curvatures

Ponca offers several ways to compute curvatures, some of which are reviewed and compared by Lejemble et al. in [9] and listed in the table below:

Estimator Name Estimated quantities Usage
Distance to PCA plane [5] Mean curvature Method potential()
using FitSmoothNormalCovariance = Basket<Point, WeightSmoothFunc, CovariancePlaneFit>;
Surface Variation [12] Mean curvature Method surfaceVariation()
using FitSmoothNormalCovariance = Basket<Point, WeightSmoothFunc, CovariancePlaneFit>;
Growing Least Squares [10] Mean curvature Basket<P,W,OrientedSphereFit,GLSParam> // method kappa()
Point Set Surfaces (PSS) [2] Curvature Tensor API of CurvatureEstimatorBase :
using EstimatorSmoothNormalCovariance = BasketDiff<FitSmoothNormalCovariance, FitSpaceDer, CovariancePlaneDer,
CurvatureEstimatorDer, NormalDerivativeWeingartenEstimator>;
CovariancePlaneDerImpl< DataPoint, _NFilter, DiffType, CovarianceFitDer< DataPoint, _NFilter, DiffType, MeanPositionDer< DataPoint, _NFilter, DiffType, T > > > CovariancePlaneDer
Helper alias for Plane fitting on 3D points using CovariancePlaneFitImpl.
@ FitSpaceDer
Flag indicating a space differentiation.
Definition enums.h:36
Monge Patch fitting (comparable to jets fitting[3] ) Curvature Tensor API of CurvatureEstimatorBase using a QuadraticHeightField:
using FitMongeSmooth = Basket<Point, WeightSmoothFunc, MongePatchQuadraticFit>;
Monge Patch fitting (comparable to jets fitting[3] ) Curvature Tensor API of CurvatureEstimatorBase using a RestrictedQuadraticHeightField:
using FitMongeRestrictedSmooth = Basket<Point, WeightSmoothFunc, MongePatchRestrictedQuadraticFit>;
Algebraic Point Set Surfaces (APSS) [6] Curvature Tensor API of CurvatureEstimatorBase:
using FitSmoothOrientedSpatial =
BasketDiff<FitSmoothOriented, FitSpaceDer, OrientedSphereDer, CurvatureEstimatorDer,
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) [9] Curvature Tensor API of CurvatureEstimatorBase:
using ASOSmooth =
BasketDiff<FitSmoothOriented, FitSpaceDer, OrientedSphereDer, MlsSphereFitDer, CurvatureEstimatorDer,
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
DistWeightFunc Eval location: p, Radius: t Filter points further than t, and weigh them according to kernel (Available Weighting kernel)
NoWeightFunc Eval location: p Constant kernel for every point. Does not check for radius unlike DistWeightFunc with contant kernel. Transform neighbors to local frame.
NoWeightFuncGlobal Eval location: p Constant kernel for every point. Does not check for radius unlike DistWeightFunc 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)\)