Point Cloud Library (PCL)  1.9.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
pcl::UnaryClassifier
Definition: unary_classifier.h:60
pcl::UnaryClassifier::normal_radius_search_
float normal_radius_search_
Definition: unary_classifier.h:157
pcl
This file defines compatibility wrappers for low level I/O functions.
Definition: convolution.h:45
point_types.h
pcl::PointCloud::Ptr
boost::shared_ptr< PointCloud< PointT > > Ptr
Definition: point_cloud.h:428
pcl::UnaryClassifier::setFPFHRadiusSearch
void setFPFHRadiusSearch(float param)
Definition: unary_classifier.h:107
pcl::UnaryClassifier::label_field_
bool label_field_
Definition: unary_classifier.h:153
pcl::UnaryClassifier::setClusterSize
void setClusterSize(unsigned int k)
Definition: unary_classifier.h:101
pcl::UnaryClassifier::setTrainedFeatures
void setTrainedFeatures(std::vector< pcl::PointCloud< pcl::FPFHSignature33 >::Ptr > &features)
Definition: unary_classifier.h:113
pcl::PointCloud
PointCloud represents the base class in PCL for storing collections of 3D points.
Definition: projection_matrix.h:53
pcl::UnaryClassifier::feature_threshold_
float feature_threshold_
Definition: unary_classifier.h:159
pcl::UnaryClassifier::setNormalRadiusSearch
void setNormalRadiusSearch(float param)
Definition: unary_classifier.h:104
pcl::UnaryClassifier::setLabelField
void setLabelField(bool l)
Definition: unary_classifier.h:110
pcl::UnaryClassifier::cluster_size_
unsigned int cluster_size_
Definition: unary_classifier.h:155
pcl::UnaryClassifier::trained_features_
std::vector< pcl::PointCloud< pcl::FPFHSignature33 >::Ptr > trained_features_
Definition: unary_classifier.h:162
pcl::UnaryClassifier::input_cloud_
pcl::PointCloud< PointT >::Ptr input_cloud_
Contains the input cloud.
Definition: unary_classifier.h:151
pcl::UnaryClassifier::fpfh_radius_search_
float fpfh_radius_search_
Definition: unary_classifier.h:158
pcl::UnaryClassifier::setFeatureThreshold
void setFeatureThreshold(float threshold)
Definition: unary_classifier.h:116