Point Cloud Library (PCL)  1.6.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
correspondence_rejection_surface_normal.h
Go to the documentation of this file.
1 /*
2  * Software License Agreement (BSD License)
3  *
4  * Point Cloud Library (PCL) - www.pointclouds.org
5  * Copyright (c) 2012, Open Perception, Inc.
6  *
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * * Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  * * Redistributions in binary form must reproduce the above
16  * copyright notice, this list of conditions and the following
17  * disclaimer in the documentation and/or other materials provided
18  * with the distribution.
19  * * Neither the name of Open Perception, Inc. nor the names of its
20  * contributors may be used to endorse or promote products derived
21  * from this software without specific prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  * POSSIBILITY OF SUCH DAMAGE.
35  *
36  *
37  */
38 #ifndef PCL_REGISTRATION_CORRESPONDENCE_REJECTION_SURFACE_NORMAL_H_
39 #define PCL_REGISTRATION_CORRESPONDENCE_REJECTION_SURFACE_NORMAL_H_
40 
42 #include <pcl/point_cloud.h>
43 
44 namespace pcl
45 {
46  namespace registration
47  {
60  {
61  using CorrespondenceRejector::input_correspondences_;
62  using CorrespondenceRejector::rejection_name_;
63  using CorrespondenceRejector::getClassName;
64 
65  public:
66 
68  CorrespondenceRejectorSurfaceNormal () : threshold_ (1.0),
69  data_container_ ()
70  {
71  rejection_name_ = "CorrespondenceRejectorSurfaceNormal";
72  }
73 
78  inline void
79  getRemainingCorrespondences (const pcl::Correspondences& original_correspondences,
80  pcl::Correspondences& remaining_correspondences);
81 
85  inline void
86  setThreshold (double threshold) { threshold_ = threshold; };
87 
89  inline double
90  getThreshold () const { return threshold_; };
91 
94  template <typename PointT, typename NormalT> inline void
96  {
97  data_container_.reset (new DataContainer<PointT, NormalT>);
98  }
103  template <typename PointT> inline void
105  {
106  assert (data_container_ && "Initilize the data container object by calling intializeDataContainer () before using this function");
107  boost::static_pointer_cast<DataContainer<PointT> > (data_container_)->setInputCloud (input);
108  }
109 
114  template <typename PointT> inline void
116  {
117  assert (data_container_ && "Initilize the data container object by calling intializeDataContainer () before using this function");
118  boost::static_pointer_cast<DataContainer<PointT> > (data_container_)->setInputTarget (target);
119  }
120 
124  template <typename PointT, typename NormalT> inline void
126  {
127  assert (data_container_ && "Initilize the data container object by calling intializeDataContainer () before using this function");
128  boost::static_pointer_cast<DataContainer<PointT, NormalT> > (data_container_)->setInputNormals (normals);
129  }
130 
134  template <typename PointT, typename NormalT> inline void
136  {
137  assert (data_container_ && "Initilize the data container object by calling intializeDataContainer () before using this function");
138  boost::static_pointer_cast<DataContainer<PointT, NormalT> > (data_container_)->setTargetNormals (normals);
139  }
140 
142  template <typename NormalT> inline typename pcl::PointCloud<NormalT>::Ptr
143  getInputNormals () const { return boost::static_pointer_cast<DataContainer<pcl::PointXYZ, NormalT> > (data_container_)->getInputNormals (); }
144 
146  template <typename NormalT> inline typename pcl::PointCloud<NormalT>::Ptr
147  getTargetNormals () const { return boost::static_pointer_cast<DataContainer<pcl::PointXYZ, NormalT> > (data_container_)->getTargetNormals (); }
148 
149  protected:
150 
154  inline void
155  applyRejection (pcl::Correspondences &correspondences)
156  {
157  getRemainingCorrespondences (*input_correspondences_, correspondences);
158  }
159 
162  double threshold_;
163 
164  typedef boost::shared_ptr<DataContainerInterface> DataContainerPtr;
165 
167  DataContainerPtr data_container_;
168  };
169  }
170 }
171 
173 
174 #endif