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 #ifndef PCL_FEATURES_SGF8_H_
00039 #define PCL_FEATURES_SGF8_H_
00040
00041 #include <pcl17/features/feature.h>
00042 #include <pcl17/features/sgf5.h>
00043 #include <pcl17/features/sgf7.h>
00044
00045 namespace pcl17
00046 {
00047 const int SGF8_SIZE = 3;
00048
00049 template <typename PointInT, typename PointOutT>
00050 class SGF8Estimation : public Feature<PointInT, PointOutT>
00051 {
00052
00053 public:
00054
00055 using Feature<PointInT, PointOutT>::feature_name_;
00056 using Feature<PointInT, PointOutT>::input_;
00057 using Feature<PointInT, PointOutT>::indices_;
00058 using Feature<PointInT, PointOutT>::k_;
00059
00060 typedef typename Feature<PointInT, PointOutT>::PointCloudOut PointCloudOut;
00061 typedef typename Feature<PointInT, PointOutT>::PointCloudIn PointCloudIn;
00062
00064 SGF8Estimation ()
00065 {
00066 feature_name_ = "SGF8Estimation";
00067 k_ = 1;
00068 };
00069
00070
00072 void
00073 computeFeature (PointCloudOut &output)
00074 {
00075
00076 typename PointCloud<PointInT>::Ptr cloud (new PointCloud<PointInT> ());
00077 cloud->width = indices_->size ();
00078 cloud->height = 1;
00079 cloud->points.resize (cloud->width * cloud->height);
00080 for (size_t idx = 0; idx < indices_->size (); ++idx)
00081 {
00082 cloud->points[idx] = input_->points[(*indices_)[idx]];
00083 }
00084
00085
00086
00087 const int sgf5_size = 3;
00088 pcl17::PointCloud<pcl17::Histogram<sgf5_size> >::Ptr sgf5s (new pcl17::PointCloud<pcl17::Histogram<sgf5_size> > ());
00089 pcl17::SGF5Estimation<PointInT, pcl17::Histogram<sgf5_size> > sgf5;
00090 sgf5.setInputCloud (cloud);
00091 sgf5.compute (*sgf5s);
00092
00093
00094
00095 const int sgf7_size = 7;
00096 pcl17::PointCloud<pcl17::Histogram<sgf7_size> >::Ptr sgf7s (new pcl17::PointCloud<pcl17::Histogram<sgf7_size> > ());
00097 pcl17::SGF7Estimation<PointInT, pcl17::Histogram<sgf7_size> > sgf7;
00098 sgf7.setInputCloud (cloud);
00099 sgf7.compute (*sgf7s);
00100
00101
00102
00103 output.points[0].histogram[0] = sgf7s->points[0].histogram[0] != 0 ? sgf5s->points[0].histogram[0] / sgf7s->points[0].histogram[0] : 0;
00104 output.points[0].histogram[1] = sgf7s->points[0].histogram[1] != 0 ? sgf5s->points[0].histogram[1] / sgf7s->points[0].histogram[1] : 0;
00105 output.points[0].histogram[2] = sgf7s->points[0].histogram[2] != 0 ? sgf5s->points[0].histogram[2] / sgf7s->points[0].histogram[2] : 0;
00106 }
00108
00109
00110 private:
00111
00115 void
00116 computeFeatureEigen (pcl17::PointCloud<Eigen::MatrixXf> &) {}
00117 };
00118 }
00119
00120 #endif //#ifndef PCL_FEATURES_SGF8_H_