Ponca
aa50bfdf187919869239c5b44b748842569114c1
Point Cloud Analysis library
|
Procedure that compute and decompose the covariance matrix of the neighbors positions in \(3d\). More...
#include <covarianceFit.h>
Public Types | |
using | Scalar = typename DataPoint::Scalar |
Alias to scalar type. | |
using | VectorType = typename Base::VectorType |
Alias to vector type. | |
using | WFunctor = typename Base::WFunctor |
Alias to weight function. | |
using | MatrixType = typename DataPoint::MatrixType |
Alias to matrix type. | |
using | Solver = Eigen::SelfAdjointEigenSolver< MatrixType > |
Solver used to analyse the covariance matrix. | |
Public Member Functions | |
CovarianceFitBase< DataPoint, _WFunctor, T > & | covarianceFit () |
Explicit conversion to CovarianceFitBase , to access methods potentially hidden by heritage. | |
const CovarianceFitBase< DataPoint, _WFunctor, T > & | covarianceFit () const |
Explicit conversion to CovarianceFitBase , to access methods potentially hidden by heritage. | |
void | init (const VectorType &_evalPos) |
Set the evaluation position and reset the internal states. | |
bool | addLocalNeighbor (Scalar w, const VectorType &localQ, const DataPoint &attributes) |
Add a neighbor to perform the fit. | |
FIT_RESULT | finalize () |
Finalize the procedure. | |
Scalar | surfaceVariation () const |
Implements [12] surface variation. | |
const Solver & | solver () const |
Reading access to the Solver used to analyse the covariance matrix. | |
Protected Types | |
enum | { Check = Base::PROVIDES_MEAN_POSITION , PROVIDES_POSITION_COVARIANCE } |
using | Base = T |
Base class of the procedure. | |
Protected Attributes | |
MatrixType | m_cov {MatrixType::Zero()} |
Covariance matrix. | |
Solver | m_solver |
Solver used to analyse the covariance matrix. | |
Procedure that compute and decompose the covariance matrix of the neighbors positions in \(3d\).
This process is commonly used for plane fitting and local variance analysis. It is often called Principal Component Analysis (PCA) of the neighborhood, and used in Geometry Processing and Computer Vision.
Standard PCA algorithm involves a two-steps process where the barycenter \(\mathbf{b}\) is first computed, and then the covariance matrix \(\text{C}\) (in the following, the weights are ignored for clarity but without loss of generality):
\begin{align} \mathbf{b} &= \frac{1}{n}\sum_i\mathbf{p}_i \\ \text{C} &= \frac{1}{n}\sum_i(\mathbf{p}_i-\mathbf{b})(\mathbf{p}_i-\mathbf{b})^T \end{align}
This class implements a single-pass version, where the first formulation is re-expressed as follows:
\begin{align} \text{C} &= \frac{1}{n}\sum_i (\mathbf{p}_i\mathbf{p}_i^T - \mathbf{b}\mathbf{p}_i^T - \mathbf{p}_i\mathbf{b}^T + \mathbf{b}\mathbf{b}^T) \\ &= \frac{1}{n}\sum_i (\mathbf{p}_i\mathbf{p}_i^T) - \frac{1}{n}\sum_i(\mathbf{b}\mathbf{p}_i^T) - \frac{1}{n}\sum_i(\mathbf{p}_i\mathbf{b}^T) + \frac{1}{n}\sum_i (\mathbf{b}\mathbf{b}^T) \\ &= \frac{1}{n}\sum_i (\mathbf{p}_i\mathbf{p}_i^T) - \mathbf{b}\frac{1}{n}\sum_i(\mathbf{p}_i^T) - \frac{1}{n}\sum_i(\mathbf{p}_i)\mathbf{b}^T + \frac{1}{n}\sum_i(1) \mathbf{b}\mathbf{b}^T \\ &= \frac{1}{n}\sum_i (\mathbf{p}_i\mathbf{p}_i^T) - \mathbf{b}\mathbf{b}^T - \mathbf{b}\mathbf{b}^T + \mathbf{b}\mathbf{b}^T \end{align}
Leading to a single pass where \(\text{C}\) is express by substracting two terms that can be computed independently in one run:
\[ \text{C} = \frac{1}{n}\sum_i (\mathbf{p}_i\mathbf{p}_i^T) - \mathbf{b}\mathbf{b}^T \]
Definition at line 50 of file covarianceFit.h.
|
protected |
Base class of the procedure.
Definition at line 52 of file covarianceFit.h.
using Ponca::CovarianceFitBase< DataPoint, _WFunctor, T >::MatrixType = typename DataPoint::MatrixType |
Alias to matrix type.
Definition at line 62 of file covarianceFit.h.
using Ponca::CovarianceFitBase< DataPoint, _WFunctor, T >::Scalar = typename DataPoint::Scalar |
Alias to scalar type.
Definition at line 52 of file covarianceFit.h.
using Ponca::CovarianceFitBase< DataPoint, _WFunctor, T >::Solver = Eigen::SelfAdjointEigenSolver<MatrixType> |
Solver used to analyse the covariance matrix.
Definition at line 64 of file covarianceFit.h.
using Ponca::CovarianceFitBase< DataPoint, _WFunctor, T >::VectorType = typename Base::VectorType |
Alias to vector type.
Definition at line 52 of file covarianceFit.h.
using Ponca::CovarianceFitBase< DataPoint, _WFunctor, T >::WFunctor = typename Base::WFunctor |
Alias to weight function.
Definition at line 52 of file covarianceFit.h.
|
protected |
Definition at line 55 of file covarianceFit.h.
|
inline |
Add a neighbor to perform the fit.
Definition at line 21 of file covarianceFit.hpp.
|
inline |
Explicit conversion to CovarianceFitBase , to access methods potentially hidden by heritage.
Definition at line 72 of file covarianceFit.h.
|
inline |
Explicit conversion to CovarianceFitBase , to access methods potentially hidden by heritage.
Definition at line 72 of file covarianceFit.h.
|
inline |
Finalize the procedure.
Definition at line 35 of file covarianceFit.hpp.
|
inline |
Set the evaluation position and reset the internal states.
Definition at line 13 of file covarianceFit.hpp.
|
inline |
Reading access to the Solver used to analyse the covariance matrix.
Definition at line 82 of file covarianceFit.h.
|
inline |
Implements [12] surface variation.
It computes the ratio \( d \frac{\lambda_0}{\sum_i \lambda_i} \) with d
the dimension of the ambient space.
Definition at line 60 of file covarianceFit.hpp.
|
protected |
Covariance matrix.
Definition at line 68 of file covarianceFit.h.
|
protected |
Solver used to analyse the covariance matrix.
Definition at line 69 of file covarianceFit.h.