Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef PCL_REGISTRATION_CORRESPONDENCE_REJECTION_SURFACE_NORMAL_H_
00039 #define PCL_REGISTRATION_CORRESPONDENCE_REJECTION_SURFACE_NORMAL_H_
00040
00041 #include <pcl/registration/correspondence_rejection.h>
00042 #include <pcl/point_cloud.h>
00043
00044 namespace pcl
00045 {
00046 namespace registration
00047 {
00059 class CorrespondenceRejectorSurfaceNormal : public CorrespondenceRejector
00060 {
00061 using CorrespondenceRejector::input_correspondences_;
00062 using CorrespondenceRejector::rejection_name_;
00063 using CorrespondenceRejector::getClassName;
00064
00065 public:
00066
00068 CorrespondenceRejectorSurfaceNormal () : threshold_ (1.0),
00069 data_container_ ()
00070 {
00071 rejection_name_ = "CorrespondenceRejectorSurfaceNormal";
00072 }
00073
00078 inline void
00079 getRemainingCorrespondences (const pcl::Correspondences& original_correspondences,
00080 pcl::Correspondences& remaining_correspondences);
00081
00085 inline void
00086 setThreshold (double threshold) { threshold_ = threshold; };
00087
00089 inline double
00090 getThreshold () const { return threshold_; };
00091
00094 template <typename PointT, typename NormalT> inline void
00095 initializeDataContainer ()
00096 {
00097 data_container_.reset (new DataContainer<PointT, NormalT>);
00098 }
00103 template <typename PointT> inline void
00104 setInputCloud (const typename pcl::PointCloud<PointT>::ConstPtr &input)
00105 {
00106 assert (data_container_ && "Initilize the data container object by calling intializeDataContainer () before using this function");
00107 boost::static_pointer_cast<DataContainer<PointT> > (data_container_)->setInputCloud (input);
00108 }
00109
00114 template <typename PointT> inline void
00115 setInputTarget (const typename pcl::PointCloud<PointT>::ConstPtr &target)
00116 {
00117 assert (data_container_ && "Initilize the data container object by calling intializeDataContainer () before using this function");
00118 boost::static_pointer_cast<DataContainer<PointT> > (data_container_)->setInputTarget (target);
00119 }
00120
00124 template <typename PointT, typename NormalT> inline void
00125 setInputNormals (const typename pcl::PointCloud<NormalT>::ConstPtr &normals)
00126 {
00127 assert (data_container_ && "Initilize the data container object by calling intializeDataContainer () before using this function");
00128 boost::static_pointer_cast<DataContainer<PointT, NormalT> > (data_container_)->setInputNormals (normals);
00129 }
00130
00134 template <typename PointT, typename NormalT> inline void
00135 setTargetNormals (const typename pcl::PointCloud<NormalT>::ConstPtr &normals)
00136 {
00137 assert (data_container_ && "Initilize the data container object by calling intializeDataContainer () before using this function");
00138 boost::static_pointer_cast<DataContainer<PointT, NormalT> > (data_container_)->setTargetNormals (normals);
00139 }
00140
00142 template <typename NormalT> inline typename pcl::PointCloud<NormalT>::Ptr
00143 getInputNormals () const { return boost::static_pointer_cast<DataContainer<pcl::PointXYZ, NormalT> > (data_container_)->getInputNormals (); }
00144
00146 template <typename NormalT> inline typename pcl::PointCloud<NormalT>::Ptr
00147 getTargetNormals () const { return boost::static_pointer_cast<DataContainer<pcl::PointXYZ, NormalT> > (data_container_)->getTargetNormals (); }
00148
00149 protected:
00150
00154 inline void
00155 applyRejection (pcl::Correspondences &correspondences)
00156 {
00157 getRemainingCorrespondences (*input_correspondences_, correspondences);
00158 }
00159
00162 double threshold_;
00163
00164 typedef boost::shared_ptr<DataContainerInterface> DataContainerPtr;
00165
00167 DataContainerPtr data_container_;
00168 };
00169 }
00170 }
00171
00172 #include <pcl/registration/impl/correspondence_rejection_surface_normal.hpp>
00173
00174 #endif