|
Ponca
7d8ac87a7de01d881c9fde3c42e397b44bffb901
Point Cloud Analysis library
|
This page provides a detailed list of what the Fitting module has to offers.
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) |
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() |
| 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() |
| PROVIDES_PRIMITIVE_DERIVATIVE Provides base API for primitive derivatives | PrimitiveDer | GLSDer CovarianceFitDer MeanPositionDer MeanNormalDer MlsSphereFitDer OrientedSphereDerImpl UnorientedSphereDerImpl | isScaleDer() |
| PROVIDES_GLS_PARAMETRIZATION Growing Least Squares reparametrization of the OrientedSphereFit | GLSParam | GLSDer | tau() |
| PROVIDES_GLS_DERIVATIVE Differentiation of GLSParam | GLSDer | - | dtau() |
| 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() |
| 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() |
| PROVIDES_TANGENT_PLANE_BASIS Turns a point in ambient 3D space to the tangent plane. | CovariancePlaneFitImpl | MongePatch | worldToTangentPlane() tangentPlaneToWorld() |
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. Definition covariancePlaneFit.h:143 |
| 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. Definition orientedSphereFit.h:138 |
| Algebraic Shape Operator (ASO) [9] | Curvature Tensor | API of CurvatureEstimatorBase: using ASOSmooth =
BasketDiff<FitSmoothOriented, FitSpaceDer, OrientedSphereDer, MlsSphereFitDer, CurvatureEstimatorDer,
NormalDerivativeWeingartenEstimator, WeingartenCurvatureEstimatorDer>;
|
| 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 |
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)\) |