Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #pragma once
00036
00037 #include "PointMatcher.h"
00038
00039 template<typename T>
00040 struct CovarianceSamplingDataPointsFilter : public PointMatcher<T>::DataPointsFilter
00041 {
00042
00043 typedef PointMatcher<T> PM;
00044 typedef typename PM::DataPoints DataPoints;
00045 typedef typename PM::DataPointsFilter DataPointsFilter;
00046
00047 typedef PointMatcherSupport::Parametrizable Parametrizable;
00048 typedef PointMatcherSupport::Parametrizable P;
00049 typedef Parametrizable::Parameters Parameters;
00050 typedef Parametrizable::ParameterDoc ParameterDoc;
00051 typedef Parametrizable::ParametersDoc ParametersDoc;
00052 typedef Parametrizable::InvalidParameter InvalidParameter;
00053
00054 typedef typename DataPoints::Index Index;
00055
00056 typedef typename PointMatcher<T>::DataPoints::InvalidField InvalidField;
00057
00058 typedef typename PointMatcher<T>::Vector Vector;
00059 typedef typename PointMatcher<T>::Matrix Matrix;
00060
00061 using Matrix66 = Eigen::Matrix<T, 6, 6>;
00062 using Vector6 = Eigen::Matrix<T, 6, 1>;
00063 using Vector3 = Eigen::Matrix<T, 3, 1>;
00064
00065 inline static const std::string description()
00066 {
00067 return "Covariance Sampling (CovS) \\cite{Gelfand2003}. Performs stability analysis to select geometrically stable points that can bind the rotational components as well as the translational. Uses an estimate of the covariance matrix to detect pair of points which will not be constrained.";
00068 }
00069
00070 inline static const ParametersDoc availableParameters()
00071 {
00072 return {
00073 {"nbSample", "Number of point to select.", "5000", "1", "4294967295", &P::Comp<std::size_t>},
00074 {"torqueNorm", "Method for torque normalization: (0) L=1 (no normalization, more t-normals), (1) L=Lavg (average distance, torque is scale-independent), (2) L=Lmax (scale in unit ball, more r-normals)", "1", "0", "2", &P::Comp<std::uint8_t>}
00075 };
00076 }
00077
00078 enum TorqueNormMethod : std::uint8_t { L1=0, Lavg=1, Lmax=2 };
00079
00080 std::size_t nbSample;
00081 TorqueNormMethod normalizationMethod;
00082
00083
00084 CovarianceSamplingDataPointsFilter(const Parameters& params = Parameters());
00085
00086
00087
00088 virtual ~CovarianceSamplingDataPointsFilter() {};
00089
00090 virtual DataPoints filter(const DataPoints& input);
00091 virtual void inPlaceFilter(DataPoints& cloud);
00092
00093 static T computeConditionNumber(const Matrix66 &cov);
00094 };
00095
00096