sac_model_stick.h
Go to the documentation of this file.
00001 /*
00002  * Software License Agreement (BSD License)
00003  *
00004  *  Point Cloud Library (PCL) - www.pointclouds.org
00005  *  Copyright (c) 2010-2011, Willow Garage, Inc.
00006  *  Copyright (c) 2012-, Open Perception, Inc.
00007  * 
00008  *  All rights reserved.
00009  *
00010  *  Redistribution and use in source and binary forms, with or without
00011  *  modification, are permitted provided that the following conditions
00012  *  are met:
00013  *
00014  *   * Redistributions of source code must retain the above copyright
00015  *     notice, this list of conditions and the following disclaimer.
00016  *   * Redistributions in binary form must reproduce the above
00017  *     copyright notice, this list of conditions and the following
00018  *     disclaimer in the documentation and/or other materials provided
00019  *     with the distribution.
00020  *   * Neither the name of the copyright holder(s) nor the names of its
00021  *     contributors may be used to endorse or promote products derived
00022  *     from this software without specific prior written permission.
00023  *
00024  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00025  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00026  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00027  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00028  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00029  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00030  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00031  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00032  *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00033  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00034  *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00035  *  POSSIBILITY OF SUCH DAMAGE.
00036  *
00037  * $Id: sac_model_line.h 2326 2011-08-31 07:48:25Z rusu $
00038  *
00039  */
00040 
00041 #ifndef PCL_SAMPLE_CONSENSUS_MODEL_STICK_H_
00042 #define PCL_SAMPLE_CONSENSUS_MODEL_STICK_H_
00043 
00044 #include <pcl/sample_consensus/sac_model.h>
00045 #include <pcl/sample_consensus/model_types.h>
00046 #include <pcl/common/eigen.h>
00047 
00048 namespace pcl
00049 {
00063   template <typename PointT>
00064   class SampleConsensusModelStick : public SampleConsensusModel<PointT>
00065   {
00066     public:
00067       using SampleConsensusModel<PointT>::input_;
00068       using SampleConsensusModel<PointT>::indices_;
00069       using SampleConsensusModel<PointT>::radius_min_;
00070       using SampleConsensusModel<PointT>::radius_max_;
00071       using SampleConsensusModel<PointT>::error_sqr_dists_;
00072 
00073       typedef typename SampleConsensusModel<PointT>::PointCloud PointCloud;
00074       typedef typename SampleConsensusModel<PointT>::PointCloudPtr PointCloudPtr;
00075       typedef typename SampleConsensusModel<PointT>::PointCloudConstPtr PointCloudConstPtr;
00076 
00077       typedef boost::shared_ptr<SampleConsensusModelStick> Ptr;
00078 
00083       SampleConsensusModelStick (const PointCloudConstPtr &cloud,
00084                                  bool random = false) 
00085         : SampleConsensusModel<PointT> (cloud, random) {};
00086 
00092       SampleConsensusModelStick (const PointCloudConstPtr &cloud, 
00093                                  const std::vector<int> &indices,
00094                                  bool random = false) 
00095         : SampleConsensusModel<PointT> (cloud, indices, random) {};
00096       
00098       virtual ~SampleConsensusModelStick () {}
00099 
00106       bool 
00107       computeModelCoefficients (const std::vector<int> &samples, 
00108                                 Eigen::VectorXf &model_coefficients);
00109 
00114       void 
00115       getDistancesToModel (const Eigen::VectorXf &model_coefficients, 
00116                            std::vector<double> &distances);
00117 
00123       void 
00124       selectWithinDistance (const Eigen::VectorXf &model_coefficients, 
00125                             const double threshold, 
00126                             std::vector<int> &inliers);
00127 
00134       virtual int
00135       countWithinDistance (const Eigen::VectorXf &model_coefficients, 
00136                            const double threshold);
00137 
00144       void 
00145       optimizeModelCoefficients (const std::vector<int> &inliers, 
00146                                  const Eigen::VectorXf &model_coefficients, 
00147                                  Eigen::VectorXf &optimized_coefficients);
00148 
00155       void 
00156       projectPoints (const std::vector<int> &inliers, 
00157                      const Eigen::VectorXf &model_coefficients, 
00158                      PointCloud &projected_points, 
00159                      bool copy_data_fields = true);
00160 
00166       bool 
00167       doSamplesVerifyModel (const std::set<int> &indices, 
00168                             const Eigen::VectorXf &model_coefficients, 
00169                             const double threshold);
00170 
00172       inline pcl::SacModel 
00173       getModelType () const { return (SACMODEL_STICK); }
00174 
00175     protected:
00179       inline bool 
00180       isModelValid (const Eigen::VectorXf &model_coefficients)
00181       {
00182         if (model_coefficients.size () != 7)
00183         {
00184           PCL_ERROR ("[pcl::SampleConsensusModelStick::selectWithinDistance] Invalid number of model coefficients given (%zu)!\n", model_coefficients.size ());
00185           return (false);
00186         }
00187 
00188         return (true);
00189       }
00190 
00195       bool
00196       isSampleGood (const std::vector<int> &samples) const;
00197   };
00198 }
00199 
00200 #ifdef PCL_NO_PRECOMPILE
00201 #include <pcl/sample_consensus/impl/sac_model_stick.hpp>
00202 #endif
00203 
00204 #endif  //#ifndef PCL_SAMPLE_CONSENSUS_MODEL_STICK_H_


pcl
Author(s): Open Perception
autogenerated on Wed Aug 26 2015 15:32:17