57 return "Gestalt descriptors filter.";
62 {
"ratio",
"ratio of points to keep with random subsampling. Matrix (normal, density, etc.) will be associated to all points in the same bin.",
"0.1",
"0.0000001",
"0.9999999", &P::Comp<T>},
63 {
"radius",
"is the radius of the gestalt descriptor, will be divided into 4 circular and 8 radial bins = 32 bins",
"5",
"0.1",
"2147483647", &P::Comp<T>},
64 {
"knn",
"determined how many points are used to compute the normals. Direct link with the rapidity of the computation (large = fast). Technically, limit over which a box is splitted in two",
"7",
"3",
"2147483647", &P::Comp<unsigned>},
65 {
"vSizeX",
"Dimension of each voxel cell in x direction",
"1.0",
"-inf",
"inf", &P::Comp<T>},
66 {
"vSizeY",
"Dimension of each voxel cell in y direction",
"1.0",
"-inf",
"inf", &P::Comp<T>},
67 {
"vSizeZ",
"Dimension of each voxel cell in z direction",
"1.0",
"-inf",
"inf", &P::Comp<T>},
68 {
"keepMeans",
"whether the means should be added as descriptors to the resulting cloud",
"0"},
69 {
"maxBoxDim",
"maximum length of a box above which the box is discarded",
"inf"},
70 {
"averageExistingDescriptors",
"whether the filter keep the existing point descriptors and average them or should it drop them",
"1"},
71 {
"maxTimeWindow",
"maximum spread of times in a surfel",
"inf"},
72 {
"keepNormals",
"whether the normals should be added as descriptors to the resulting cloud",
"1"},
73 {
"keepEigenValues",
"whether the eigen values should be added as descriptors to the resulting cloud",
"0"},
74 {
"keepEigenVectors",
"whether the eigen vectors should be added as descriptors to the resulting cloud",
"0"},
75 {
"keepCovariances",
"whether the covariances should be added as descriptors to the resulting cloud",
"0"},
76 {
"keepGestaltFeatures",
"whether the Gestalt features shall be added to the resulting cloud",
"1"}
100 virtual DataPoints
filter(
const DataPoints& input);
113 typedef typename Eigen::Matrix<std::int64_t, Eigen::Dynamic, Eigen::Dynamic>
Int64Matrix;
114 typedef typename Eigen::Matrix<std::int64_t, 1, Eigen::Dynamic>
Int64Vector;
133 BuildData(Matrix& features, Matrix& descriptors, Int64Matrix& times):
135 descriptors(descriptors),
139 const int pointsCount(features.cols());
140 indices.reserve(pointsCount);
141 for (
int i = 0; i < pointsCount; ++i)
142 indices.push_back(i);
151 bool operator() (
const int& p0,
const int& p1)
153 return buildData.
features(dim, p0) <
159 void buildNew(
BuildData&
data,
const int first,
const int last, Vector&& minValues, Vector&& maxValues)
const;
160 void fuseRange(
BuildData& data, DataPoints& input,
const int first,
const int last)
const;
PointMatcher< T >::Vector Vector
Parametrizable::ParameterDoc ParameterDoc
boost::optional< View > eigenVectors
const bool averageExistingDescriptors
boost::optional< View > warpedXYZ
BuildData(Matrix &features, Matrix &descriptors, Int64Matrix ×)
static const ParametersDoc availableParameters()
const bool keepCovariances
void fuseRange(BuildData &data, DataPoints &input, const int first, const int last) const
GestaltDataPointsFilter(const Parameters ¶ms=Parameters())
PointMatcherSupport::Parametrizable P
CompareDim(const int dim, const BuildData &buildData)
virtual DataPoints filter(const DataPoints &input)
Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > Matrix
A dense matrix over ScalarType.
PointMatcher< T >::Matrix Matrix
const BuildData & buildData
boost::optional< View > eigenValues
boost::optional< View > normals
boost::optional< View > covariance
PointMatcher< T >::DataPoints::InvalidField InvalidField
void buildNew(BuildData &data, const int first, const int last, Vector &&minValues, Vector &&maxValues) const
Parametrizable::ParametersDoc ParametersDoc
std::map< std::string, Parameter > Parameters
Parameters stored as a map of string->string.
Functions and classes that are dependant on scalar type are defined in this templatized class...
const bool keepEigenValues
const bool keepGestaltFeatures
PointMatcher< T >::Vector calculateAngles(const Matrix &points, const Eigen::Matrix< T, 3, 1 > &) const
std::vector< int > Indices
Eigen::Matrix< std::int64_t, 1, Eigen::Dynamic > Int64Vector
Parametrizable::Parameters Parameters
virtual ~GestaltDataPointsFilter()
PointMatcher< T >::Vector serializeGestaltMatrix(const Matrix &gestaltFeatures) const
The documentation of a parameter.
PointMatcher< T >::Vector calculateRadii(const Matrix &points, const Eigen::Matrix< T, 3, 1 > &) const
boost::optional< View > gestaltVariances
static const std::string description()
const bool keepEigenVectors
The superclass of classes that are constructed using generic parameters. This class provides the para...
An exception thrown when one tries to fetch the value of an unexisting parameter. ...
std::vector< ParameterDoc > ParametersDoc
The documentation of all parameters.
Eigen::Matrix< std::int64_t, Eigen::Dynamic, Eigen::Dynamic > Int64Matrix
Gestalt descriptors filter as described in Bosse & Zlot ICRA 2013.
boost::optional< View > gestaltMeans
PointMatcher< T >::DataPoints DataPoints
boost::optional< View > means
Eigen::Block< Matrix > View
A view on a feature or descriptor.
An exception thrown when one tries to access features or descriptors unexisting or of wrong dimension...
boost::optional< View > gestaltShapes
Eigen::Matrix< T, Eigen::Dynamic, 1 > Vector
A vector over ScalarType.
PM::DataPointsFilter DataPointsFilter
virtual void inPlaceFilter(DataPoints &cloud)
Parametrizable::InvalidParameter InvalidParameter
PointMatcherSupport::Parametrizable Parametrizable