Point Cloud Library (PCL)  1.9.1
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
sac_model_normal_plane.h
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Point Cloud Library (PCL) - www.pointclouds.org
5  * Copyright (c) 2010-2011, Willow Garage, Inc.
6  * Copyright (c) 2012-, Open Perception, Inc.
7  *
8  * All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  *
14  * * Redistributions of source code must retain the above copyright
15  * notice, this list of conditions and the following disclaimer.
16  * * Redistributions in binary form must reproduce the above
17  * copyright notice, this list of conditions and the following
18  * disclaimer in the documentation and/or other materials provided
19  * with the distribution.
20  * * Neither the name of the copyright holder(s) nor the names of its
21  * contributors may be used to endorse or promote products derived
22  * from this software without specific prior written permission.
23  *
24  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
26  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
27  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
28  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
29  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
30  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
32  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
34  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35  * POSSIBILITY OF SUCH DAMAGE.
36  *
37  * $Id$
38  *
39  */
40 
41 #ifndef PCL_SAMPLE_CONSENSUS_MODEL_NORMALPLANE_H_
42 #define PCL_SAMPLE_CONSENSUS_MODEL_NORMALPLANE_H_
43 
44 #include <pcl/sample_consensus/sac_model.h>
45 #include <pcl/sample_consensus/sac_model_plane.h>
46 #include <pcl/sample_consensus/sac_model_perpendicular_plane.h>
47 #include <pcl/sample_consensus/model_types.h>
48 
49 namespace pcl
50 {
51  /** \brief SampleConsensusModelNormalPlane defines a model for 3D plane
52  * segmentation using additional surface normal constraints. Basically this
53  * means that checking for inliers will not only involve a "distance to
54  * model" criterion, but also an additional "maximum angular deviation"
55  * between the plane's normal and the inlier points normals.
56  *
57  * The model coefficients are defined as:
58  * - \b a : the X coordinate of the plane's normal (normalized)
59  * - \b b : the Y coordinate of the plane's normal (normalized)
60  * - \b c : the Z coordinate of the plane's normal (normalized)
61  * - \b d : the fourth <a href="http://mathworld.wolfram.com/HessianNormalForm.html">Hessian component</a> of the plane's equation
62  *
63  * To set the influence of the surface normals in the inlier estimation
64  * process, set the normal weight (0.0-1.0), e.g.:
65  * \code
66  * SampleConsensusModelNormalPlane<pcl::PointXYZ, pcl::Normal> sac_model;
67  * ...
68  * sac_model.setNormalDistanceWeight (0.1);
69  * ...
70  * \endcode
71  *
72  * \author Radu B. Rusu and Jared Glover
73  * \ingroup sample_consensus
74  */
75  template <typename PointT, typename PointNT>
77  {
78  public:
86 
90 
93 
94  typedef boost::shared_ptr<SampleConsensusModelNormalPlane> Ptr;
95 
96  /** \brief Constructor for base SampleConsensusModelNormalPlane.
97  * \param[in] cloud the input point cloud dataset
98  * \param[in] random if true set the random seed to the current time, else set to 12345 (default: false)
99  */
100  SampleConsensusModelNormalPlane (const PointCloudConstPtr &cloud,
101  bool random = false)
102  : SampleConsensusModelPlane<PointT> (cloud, random)
104  {
105  model_name_ = "SampleConsensusModelNormalPlane";
106  sample_size_ = 3;
107  model_size_ = 4;
108  }
109 
110  /** \brief Constructor for base SampleConsensusModelNormalPlane.
111  * \param[in] cloud the input point cloud dataset
112  * \param[in] indices a vector of point indices to be used from \a cloud
113  * \param[in] random if true set the random seed to the current time, else set to 12345 (default: false)
114  */
115  SampleConsensusModelNormalPlane (const PointCloudConstPtr &cloud,
116  const std::vector<int> &indices,
117  bool random = false)
118  : SampleConsensusModelPlane<PointT> (cloud, indices, random)
120  {
121  model_name_ = "SampleConsensusModelNormalPlane";
122  sample_size_ = 3;
123  model_size_ = 4;
124  }
125 
126  /** \brief Empty destructor */
128 
129  /** \brief Select all the points which respect the given model coefficients as inliers.
130  * \param[in] model_coefficients the coefficients of a plane model that we need to compute distances to
131  * \param[in] threshold a maximum admissible distance threshold for determining the inliers from the outliers
132  * \param[out] inliers the resultant model inliers
133  */
134  void
135  selectWithinDistance (const Eigen::VectorXf &model_coefficients,
136  const double threshold,
137  std::vector<int> &inliers);
138 
139  /** \brief Count all the points which respect the given model coefficients as inliers.
140  *
141  * \param[in] model_coefficients the coefficients of a model that we need to compute distances to
142  * \param[in] threshold maximum admissible distance threshold for determining the inliers from the outliers
143  * \return the resultant number of inliers
144  */
145  virtual int
146  countWithinDistance (const Eigen::VectorXf &model_coefficients,
147  const double threshold) const;
148 
149  /** \brief Compute all distances from the cloud data to a given plane model.
150  * \param[in] model_coefficients the coefficients of a plane model that we need to compute distances to
151  * \param[out] distances the resultant estimated distances
152  */
153  void
154  getDistancesToModel (const Eigen::VectorXf &model_coefficients,
155  std::vector<double> &distances) const;
156 
157  /** \brief Return an unique id for this model (SACMODEL_NORMAL_PLANE). */
158  inline pcl::SacModel
159  getModelType () const { return (SACMODEL_NORMAL_PLANE); }
160 
161  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
162 
163  protected:
166  };
167 }
168 
169 #ifdef PCL_NO_PRECOMPILE
170 #include <pcl/sample_consensus/impl/sac_model_normal_plane.hpp>
171 #endif
172 
173 #endif //#ifndef PCL_SAMPLE_CONSENSUS_MODEL_NORMALPLANE_H_
virtual ~SampleConsensusModelNormalPlane()
Empty destructor.
pcl::PointCloud< PointNT >::ConstPtr PointCloudNConstPtr
Definition: sac_model.h:594
SampleConsensusModelNormalPlane(const PointCloudConstPtr &cloud, bool random=false)
Constructor for base SampleConsensusModelNormalPlane.
This file defines compatibility wrappers for low level I/O functions.
Definition: convolution.h:45
unsigned int model_size_
The number of coefficients in the model.
Definition: sac_model.h:575
pcl::PointCloud< PointNT >::Ptr PointCloudNPtr
Definition: sac_model.h:595
SampleConsensusModelFromNormals< PointT, PointNT >::PointCloudNPtr PointCloudNPtr
SampleConsensusModel< PointT >::PointCloudConstPtr PointCloudConstPtr
SampleConsensusModelNormalPlane(const PointCloudConstPtr &cloud, const std::vector< int > &indices, bool random=false)
Constructor for base SampleConsensusModelNormalPlane.
SampleConsensusModelFromNormals< PointT, PointNT >::PointCloudNConstPtr PointCloudNConstPtr
boost::shared_ptr< SampleConsensusModelNormalPlane > Ptr
pcl::SacModel getModelType() const
Return an unique id for this model (SACMODEL_NORMAL_PLANE).
SampleConsensusModel represents the base model class.
Definition: sac_model.h:66
void getDistancesToModel(const Eigen::VectorXf &model_coefficients, std::vector< double > &distances) const
Compute all distances from the cloud data to a given plane model.
std::string model_name_
The model name.
Definition: sac_model.h:534
pcl::PointCloud< PointT >::Ptr PointCloudPtr
Definition: sac_model.h:71
SampleConsensusModel< PointT >::PointCloud PointCloud
virtual int countWithinDistance(const Eigen::VectorXf &model_coefficients, const double threshold) const
Count all the points which respect the given model coefficients as inliers.
SampleConsensusModelFromNormals represents the base model class for models that require the use of su...
Definition: sac_model.h:591
SampleConsensusModelNormalPlane defines a model for 3D plane segmentation using additional surface no...
SacModel
Definition: model_types.h:46
pcl::PointCloud< PointT >::ConstPtr PointCloudConstPtr
Definition: sac_model.h:70
PointCloud represents the base class in PCL for storing collections of 3D points. ...
SampleConsensusModel< PointT >::PointCloudPtr PointCloudPtr
void selectWithinDistance(const Eigen::VectorXf &model_coefficients, const double threshold, std::vector< int > &inliers)
Select all the points which respect the given model coefficients as inliers.
A point structure representing Euclidean xyz coordinates, and the RGB color.
SampleConsensusModelPlane defines a model for 3D plane segmentation.
unsigned int sample_size_
The size of a sample from which the model is computed.
Definition: sac_model.h:572