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
00036
00037
00038
00039 #ifndef PCL_OBJECT_MODEL_LIST_H
00040 #define PCL_OBJECT_MODEL_LIST_H
00041
00042 #include <vector>
00043 #include "object_model.h"
00044 #include <pcl/kdtree/impl/kdtree_flann.hpp>
00045 #include <pcl/common/point_correspondence.h>
00046
00047
00048 namespace pcl
00049 {
00050
00054 class ObjectModelList : public std::vector<ObjectModel*>
00055 {
00056 public:
00057
00058 std::vector<ObjectModel*> BaseClass;
00059
00060
00061 struct FeatureSource
00062 {
00063 FeatureSource (int model_index, int view_index, int feature_index) :
00064 model_index (model_index), view_index (view_index), feature_index (feature_index) {}
00065 int model_index, view_index, feature_index;
00066 };
00067
00068
00070 ObjectModelList ();
00072 ~ObjectModelList ();
00073
00074
00075 template <typename FeatureType>
00076 inline static void freeFeatureListMemory (std::vector<std::vector<std::vector<FeatureType*>*>*>& feature_list);
00077 template <typename FeatureType>
00078 inline static void getMergedFeatureList (const std::vector<std::vector<std::vector<FeatureType*>*>*>& feature_list,
00079 std::vector<FeatureType*>& merged_feature_list, std::vector<FeatureSource>& feature_sources);
00080 template <typename FeatureType>
00081 static void buildKdTree (const std::vector<FeatureType*>& merged_feature_list, KdTree<FeatureType*>& kdtree);
00082
00083
00085 void extractNARFsForCompleteSurface (unsigned int descriptor_size, float size_in_world, bool rotation_invariant,
00086 std::vector<std::vector<std::vector<Narf*>*>*>& features) const;
00087
00089 void extractNARFsForInterestPoints (unsigned int descriptor_size, float size_in_world, bool rotation_invariant,
00090 NarfKeypoint& interest_point_detector, std::vector<std::vector<std::vector<Narf*>*>*>& features) const;
00091
00093 template <typename FeatureType>
00094 void getFeatureMatches (const std::vector<FeatureType*>& scene_features, const std::vector<FeatureType*>& model_database_features,
00095 const std::vector<ObjectModelList::FeatureSource>& model_database_feature_sources,
00096 float max_descriptor_distance, float min_distance_to_same_scene_feature,
00097 std::vector<std::vector<PointCorrespondences6DVector> >& feature_matches,
00098 const KdTree<FeatureType*>* kdtree=NULL, float max_descriptor_distance_kdtree=-1) const;
00099
00101 float getAverageModelRadius () const;
00102
00104 float getMaximumPlaneSize (float initial_max_plane_error) const;
00105
00106 protected:
00107
00108 template <typename FeatureType>
00109 inline static void integrateIntoMatchList (int scene_feature_idx, int database_feature_idx, float score,
00110 const std::vector<FeatureType*>& scene_features,
00111 const std::vector<FeatureType*>& model_database_features,
00112 const std::vector<ObjectModelList::FeatureSource>& model_database_feature_sources,
00113 float min_distance_to_same_scene_feature_squared,
00114 std::vector<std::vector<PointCorrespondences6DVector> >& feature_matches);
00115 };
00116
00117 }
00118
00119 #include "object_model_list.hpp"
00120
00121 #endif
00122