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 #ifndef ADAPTIVE_OCT_TREE_HH
00036 #define ADAPTIVE_OCT_TREE_HH
00037
00038 #include <ndt_map/oc_tree.h>
00039 #include <ndt_map/ndt_cell.h>
00040 #include <vector>
00041
00042 namespace lslgeneric
00043 {
00044
00052 template<typename PointT>
00053 class AdaptiveOctTree : public OctTree<PointT>
00054 {
00055 protected:
00056 std::vector<OctTree<PointT>*> splitTree(OctTree<PointT> *leaf);
00057 std::vector<OctTree<PointT>*> myTreeLeafs;
00058 virtual void computeTreeLeafs();
00059
00060 double computeResidualSquare(NDTCell<PointT> *cell);
00061 double computeDornikHansen(NDTCell<PointT> *cell);
00062
00063 bool useDornikHansen;
00064 bool useFlatness;
00065 double RSS_THRESHOLD, DH_SIGNIFICANCE_LVL, FLAT_FACTOR;
00066 bool parametersSet;
00067
00068 public:
00069
00071 AdaptiveOctTree();
00073 AdaptiveOctTree(pcl::PointXYZ center, double xsize, double ysize,
00074 double zsize, NDTCell<PointT>* type, OctTree<PointT> *_parent=NULL, unsigned int _depth=0);
00075 virtual ~AdaptiveOctTree();
00076
00077 virtual void postProcessPoints();
00078 virtual SpatialIndex<PointT>* clone();
00079
00082 void setParameters(bool _useDornikHansen = false,
00083 bool _useFlatness = true,
00084 double _RSS_THRESHOLD = 1000,
00085 double _DH_SIGNIFICANCE_LVL = 0.5,
00086 double _MIN_CELL_SIZE = 1,
00087 double _FLAT_FACTOR = 10,
00088 double _BIG_CELL_SIZE = 5,
00089 double _SMALL_CELL_SIZE = 5
00090 );
00091 double MIN_CELL_SIZE;
00092
00093 };
00094
00095 }
00096
00097 #include<ndt_map/impl/adaptive_oc_tree.hpp>
00098 #endif