Point Cloud Library (PCL)  1.8.1
unary_classifier.h
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Point Cloud Library (PCL) - www.pointclouds.org
5  *
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * * Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above
15  * copyright notice, this list of conditions and the following
16  * disclaimer in the documentation and/or other materials provided
17  * with the distribution.
18  * * Neither the name of the copyright holder(s) nor the names of its
19  * contributors may be used to endorse or promote products derived
20  * from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33  * POSSIBILITY OF SUCH DAMAGE.
34  *
35  * Author : Christian Potthast
36  * Email : potthast@usc.edu
37  *
38  */
39 
40 #ifndef PCL_UNARY_CLASSIFIER_H_
41 #define PCL_UNARY_CLASSIFIER_H_
42 
43 #include <pcl/point_cloud.h>
44 #include <pcl/point_types.h>
45 
46 #include <pcl/features/fpfh.h>
47 #include <pcl/features/normal_3d.h>
48 
49 #include <pcl/filters/filter_indices.h>
50 #include <pcl/segmentation/extract_clusters.h>
51 
52 #include <pcl/ml/kmeans.h>
53 
54 namespace pcl
55 {
56  /** \brief
57  *
58  */
59  template <typename PointT>
60  class PCL_EXPORTS UnaryClassifier
61  {
62  public:
63 
64  /** \brief Constructor that sets default values for member variables. */
65  UnaryClassifier ();
66 
67  /** \brief This destructor destroys the cloud...
68  *
69  */
70  ~UnaryClassifier ();
71 
72  /** \brief This method sets the input cloud.
73  * \param[in] input_cloud input point cloud
74  */
75  void
76  setInputCloud (typename pcl::PointCloud<PointT>::Ptr input_cloud);
77 
78  void
80 
81  void
82  trainWithLabel (std::vector<pcl::PointCloud<pcl::FPFHSignature33>, Eigen::aligned_allocator<pcl::PointCloud<pcl::FPFHSignature33> > > &output);
83 
84  void
86 
87  void
88  queryFeatureDistances (std::vector<pcl::PointCloud<pcl::FPFHSignature33>::Ptr> &trained_features,
90  std::vector<int> &indi,
91  std::vector<float> &dist);
92 
93  void
94  assignLabels (std::vector<int> &indi,
95  std::vector<float> &dist,
96  int n_feature_means,
97  float feature_threshold,
99 
100  void
101  setClusterSize (unsigned int k){cluster_size_ = k;};
102 
103  void
104  setNormalRadiusSearch (float param){normal_radius_search_ = param;};
105 
106  void
107  setFPFHRadiusSearch (float param){fpfh_radius_search_ = param;};
108 
109  void
110  setLabelField (bool l){label_field_ = l;};
111 
112  void
113  setTrainedFeatures (std::vector<pcl::PointCloud<pcl::FPFHSignature33>::Ptr> &features){trained_features_ = features;};
114 
115  void
116  setFeatureThreshold (float threshold){feature_threshold_ = threshold;};
117 
118  protected:
119 
120  void
121  convertCloud (typename pcl::PointCloud<PointT>::Ptr in,
123 
124  void
125  convertCloud (typename pcl::PointCloud<PointT>::Ptr in,
127 
128  void
129  findClusters (typename pcl::PointCloud<PointT>::Ptr in,
130  std::vector<int> &cluster_numbers);
131 
132  void
133  getCloudWithLabel (typename pcl::PointCloud<PointT>::Ptr in,
135  int label_num);
136 
137  void
138  computeFPFH (pcl::PointCloud<pcl::PointXYZ>::Ptr in,
140  float normal_radius_search,
141  float fpfh_radius_search);
142 
143  void
144  kmeansClustering (pcl::PointCloud<pcl::FPFHSignature33>::Ptr in,
146  int k);
147 
148 
149 
150  /** \brief Contains the input cloud */
152 
154 
155  unsigned int cluster_size_;
156 
160 
161 
162  std::vector<pcl::PointCloud<pcl::FPFHSignature33>::Ptr> trained_features_;
163 
164  /** \brief Contains normals of the points that will be segmented. */
165  //typename pcl::PointCloud<pcl::Normal>::Ptr normals_;
166 
167  /** \brief Stores the cloud that will be segmented. */
168  //typename pcl::PointCloud<PointT>::Ptr cloud_for_segmentation_;
169 
170  public:
171  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
172  };
173 }
174 
175 #ifdef PCL_NO_PRECOMPILE
176 #include <pcl/segmentation/impl/unary_classifier.hpp>
177 #endif
178 
179 #endif
void setTrainedFeatures(std::vector< pcl::PointCloud< pcl::FPFHSignature33 >::Ptr > &features)
unsigned int cluster_size_
std::vector< pcl::PointCloud< pcl::FPFHSignature33 >::Ptr > trained_features_
boost::shared_ptr< PointCloud< PointT > > Ptr
Definition: point_cloud.h:428
void setFeatureThreshold(float threshold)
Defines all the PCL implemented PointT point type structures.
pcl::PointCloud< PointT >::Ptr input_cloud_
Contains the input cloud.
PointCloud represents the base class in PCL for storing collections of 3D points.
void setLabelField(bool l)
void setFPFHRadiusSearch(float param)
void setNormalRadiusSearch(float param)
void setClusterSize(unsigned int k)