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 VoxelGridDataPointsFilter : 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 PointMatcher<T>::Matrix Matrix;
00055 typedef typename PointMatcher<T>::Vector Vector;
00056 typedef typename Eigen::Matrix<T,2,1> Vector2;
00057 typedef typename Eigen::Matrix<T,3,1> Vector3;
00058 typedef typename PointMatcher<T>::DataPoints::InvalidField InvalidField;
00059
00060
00061 inline static const std::string description()
00062 {
00063 return "Construct Voxel grid of the point cloud. Down-sample by taking centroid or center of grid cells.";
00064 }
00065
00066 inline static const ParametersDoc availableParameters()
00067 {
00068 return {
00069 {"vSizeX", "Dimension of each voxel cell in x direction", "1.0", "0.001", "+inf", &P::Comp<T>},
00070 {"vSizeY", "Dimension of each voxel cell in y direction", "1.0", "0.001", "+inf", &P::Comp<T>},
00071 {"vSizeZ", "Dimension of each voxel cell in z direction", "1.0", "0.001", "+inf", &P::Comp<T>},
00072 {"useCentroid", "If 1 (true), down-sample by using centroid of voxel cell. If false (0), use center of voxel cell.", "1", "0", "1", P::Comp<bool>},
00073 {"averageExistingDescriptors", "whether the filter keep the existing point descriptors and average them or should it drop them", "1", "0", "1", P::Comp<bool>}
00074 };
00075 }
00076
00077 const T vSizeX;
00078 const T vSizeY;
00079 const T vSizeZ;
00080 const bool useCentroid;
00081 const bool averageExistingDescriptors;
00082
00083 struct Voxel {
00084 unsigned int numPoints;
00085 unsigned int firstPoint;
00086 Voxel() : numPoints(0), firstPoint(0) {}
00087 };
00088
00089
00090 VoxelGridDataPointsFilter(const Parameters& params = Parameters());
00091
00092 VoxelGridDataPointsFilter();
00093
00094 virtual ~VoxelGridDataPointsFilter() {};
00095
00096 virtual DataPoints filter(const DataPoints& input);
00097 virtual void inPlaceFilter(DataPoints& cloud);
00098 };