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 NormalSpaceDataPointsFilter : 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 inline static const std::string description()
00059 {
00060 return "Normal Space Sampling (NSS) \\cite{Rusinkiewicz2001}. Construct a set of buckets in the normal-space, then put all points of the data into buckets based on their normal direction; Finally, uniformly pick points from all the buckets until the desired number of points is selected. **Required** to compute normals as pre-step.";
00061 }
00062
00063 inline static const ParametersDoc availableParameters()
00064 {
00065 return {
00066 {"nbSample", "Number of point to select.", "5000", "1", "4294967295", &P::Comp<std::size_t>},
00067 {"seed", "Seed for the random generator.", "1", "0", "4294967295", &P::Comp<std::size_t>},
00068 {"epsilon", "Step of discretization for the angle spaces", "0.09817477042" , "0.04908738521" , "3.14159265359" , &P::Comp<T>}
00069 };
00070 }
00071
00072 public:
00073 const std::size_t nbSample;
00074 const std::size_t seed;
00075 const T epsilon;
00076
00077
00078 NormalSpaceDataPointsFilter(const Parameters& params = Parameters());
00079
00080
00081
00082 virtual ~NormalSpaceDataPointsFilter() {};
00083
00084 virtual DataPoints filter(const DataPoints& input);
00085 virtual void inPlaceFilter(DataPoints& cloud);
00086
00087 private:
00088 inline std::size_t bucketIdx(T theta, T phi) const;
00089
00090 const std::size_t nbBucket;
00091 };
00092
00093