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
00040 #ifndef PCL_KEYPOINTS_UNIFORM_SAMPLING_H_
00041 #define PCL_KEYPOINTS_UNIFORM_SAMPLING_H_
00042
00043 #include <pcl/keypoints/keypoint.h>
00044 #include <boost/unordered_map.hpp>
00045
00046 namespace pcl
00047 {
00060 template <typename PointInT>
00061 class UniformSampling: public Keypoint<PointInT, int>
00062 {
00063 typedef typename Keypoint<PointInT, int>::PointCloudIn PointCloudIn;
00064 typedef typename Keypoint<PointInT, int>::PointCloudOut PointCloudOut;
00065
00066 using Keypoint<PointInT, int>::name_;
00067 using Keypoint<PointInT, int>::input_;
00068 using Keypoint<PointInT, int>::indices_;
00069 using Keypoint<PointInT, int>::search_radius_;
00070 using Keypoint<PointInT, int>::getClassName;
00071
00072 public:
00074 UniformSampling () :
00075 leaves_ (),
00076 leaf_size_ (Eigen::Vector4f::Zero ()),
00077 inverse_leaf_size_ (Eigen::Vector4f::Zero ()),
00078 min_b_ (Eigen::Vector4i::Zero ()),
00079 max_b_ (Eigen::Vector4i::Zero ()),
00080 div_b_ (Eigen::Vector4i::Zero ()),
00081 divb_mul_ (Eigen::Vector4i::Zero ())
00082 {
00083 name_ = "UniformSampling";
00084 }
00085
00087 virtual ~UniformSampling ()
00088 {
00089 leaves_.clear();
00090 }
00091
00095 virtual inline void
00096 setRadiusSearch (double radius)
00097 {
00098 leaf_size_[0] = leaf_size_[1] = leaf_size_[2] = static_cast<float> (radius);
00099
00100 if (leaf_size_[3] == 0)
00101 leaf_size_[3] = 1;
00102
00103 inverse_leaf_size_ = Eigen::Array4f::Ones () / leaf_size_.array ();
00104 search_radius_ = radius;
00105 }
00106
00107 protected:
00109 struct Leaf
00110 {
00111 Leaf () : idx (-1) { }
00112 int idx;
00113 };
00114
00116 boost::unordered_map<size_t, Leaf> leaves_;
00117
00119 Eigen::Vector4f leaf_size_;
00120
00122 Eigen::Array4f inverse_leaf_size_;
00123
00125 Eigen::Vector4i min_b_, max_b_, div_b_, divb_mul_;
00126
00130 void
00131 detectKeypoints (PointCloudOut &output);
00132 };
00133 }
00134
00135 #endif //#ifndef PCL_KEYPOINTS_UNIFORM_SAMPLING_H_
00136