Point Cloud Library (PCL)  1.5.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
correspondence_rejection.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  *
00007  *  All rights reserved.
00008  *
00009  *  Redistribution and use in source and binary forms, with or without
00010  *  modification, are permitted provided that the following conditions
00011  *  are met:
00012  *
00013  *   * Redistributions of source code must retain the above copyright
00014  *     notice, this list of conditions and the following disclaimer.
00015  *   * Redistributions in binary form must reproduce the above
00016  *     copyright notice, this list of conditions and the following
00017  *     disclaimer in the documentation and/or other materials provided
00018  *     with the distribution.
00019  *   * Neither the name of Willow Garage, Inc. nor the names of its
00020  *     contributors may be used to endorse or promote products derived
00021  *     from this software without specific prior written permission.
00022  *
00023  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00024  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00025  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00026  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00027  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00028  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00029  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00030  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00031  *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00032  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00033  *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00034  *  POSSIBILITY OF SUCH DAMAGE.
00035  *
00036  *
00037  */
00038 
00039 #ifndef PCL_REGISTRATION_CORRESPONDENCE_REJECTION_H_
00040 #define PCL_REGISTRATION_CORRESPONDENCE_REJECTION_H_
00041 
00042 #include <pcl/registration/correspondence_types.h>
00043 #include <pcl/registration/correspondence_sorting.h>
00044 #include <pcl/console/print.h>
00045 
00046 namespace pcl
00047 {
00048   namespace registration
00049   {
00054     class CorrespondenceRejector /*: public PCLBase<PointSource> */
00055     {
00056       public:
00057 
00059         CorrespondenceRejector () : input_correspondences_() {};
00060 
00064         virtual inline void 
00065         setInputCorrespondences (const CorrespondencesConstPtr &correspondences) 
00066         { 
00067           input_correspondences_ = correspondences; 
00068         };
00069 
00073         inline CorrespondencesConstPtr 
00074         getInputCorrespondences () { return input_correspondences_; };
00075 
00079         inline void 
00080         getCorrespondences (pcl::Correspondences &correspondences)
00081         {
00082           if (!input_correspondences_ || (input_correspondences_->empty ()))
00083             return;
00084 
00085           applyRejection (correspondences);
00086         }
00087 
00095         virtual inline void 
00096         getRemainingCorrespondences (const pcl::Correspondences& original_correspondences, 
00097                                      pcl::Correspondences& remaining_correspondences) = 0;
00098 
00107         inline void 
00108         getRejectedQueryIndices (const pcl::Correspondences &correspondences, 
00109                                  std::vector<int>& indices)
00110         {
00111           if (!input_correspondences_ || input_correspondences_->empty ())
00112           {
00113             PCL_WARN ("[pcl::%s::getRejectedQueryIndices] Input correspondences not set (lookup of rejected correspondences _not_ possible).\n", getClassName ().c_str ());
00114             return;
00115           }
00116 
00117           pcl::getRejectedQueryIndices(*input_correspondences_, correspondences, indices);
00118         }
00119 
00120       protected:
00121 
00123         std::string rejection_name_;
00124 
00126         CorrespondencesConstPtr input_correspondences_;
00127 
00129         inline const std::string& 
00130         getClassName () const { return (rejection_name_); }
00131 
00133         virtual void 
00134         applyRejection (Correspondences &correspondences) = 0;
00135     };
00136 
00137   }
00138 }
00139 
00140 #endif /* PCL_REGISTRATION_CORRESPONDENCE_REJECTION_H_ */
00141