41 #ifndef PCL_REGISTRATION_CORRESPONDENCE_REJECTION_H_
42 #define PCL_REGISTRATION_CORRESPONDENCE_REJECTION_H_
44 #include <pcl/registration/correspondence_types.h>
45 #include <pcl/registration/correspondence_sorting.h>
46 #include <pcl/console/print.h>
47 #include <pcl/common/transforms.h>
48 #include <pcl/point_cloud.h>
49 #include <pcl/search/kdtree.h>
53 namespace registration
62 typedef boost::shared_ptr<CorrespondenceRejector>
Ptr;
63 typedef boost::shared_ptr<const CorrespondenceRejector>
ConstPtr;
122 std::vector<int>& indices)
126 PCL_WARN (
"[pcl::registration::%s::getRejectedQueryIndices] Input correspondences not set (lookup of rejected correspondences _not_ possible).\n",
getClassName ().c_str ());
134 inline const std::string&
147 PCL_WARN (
"[pcl::registration::%s::setSourcePoints] This class does not require an input source cloud",
getClassName ().c_str ());
159 PCL_WARN (
"[pcl::registration::%s::setSourceNormals] This class does not require input source normals",
getClassName ().c_str ());
170 PCL_WARN (
"[pcl::registration::%s::setTargetPoints] This class does not require an input target cloud",
getClassName ().c_str ());
182 PCL_WARN (
"[pcl::registration::%s::setTargetNormals] This class does not require input target normals",
getClassName ().c_str ());
214 template <
typename Po
intT,
typename NormalT = pcl::Po
intNormal>
232 , input_transformed_ ()
235 , input_normals_transformed_ ()
238 , class_name_ (
"DataContainer")
239 , needs_normals_ (needs_normals)
240 , target_cloud_updated_ (true)
241 , force_no_recompute_ (false)
252 PCL_DEPRECATED (
"[pcl::registration::DataContainer::setInputCloud] setInputCloud is deprecated. Please use setInputSource instead.")
258 PointCloudConstPtr const
272 inline PointCloudConstPtr
const
283 target_cloud_updated_ =
true;
287 inline PointCloudConstPtr
const
299 bool force_no_recompute =
false)
302 if (force_no_recompute)
304 force_no_recompute_ =
true;
306 target_cloud_updated_ =
true;
316 inline NormalsConstPtr
326 inline NormalsConstPtr
335 if ( target_cloud_updated_ && !force_no_recompute_ )
337 tree_->setInputCloud (target_);
339 std::vector<int> indices (1);
340 std::vector<float> distances (1);
341 if (tree_->nearestKSearch (input_->points[index], 1, indices, distances))
342 return (distances[0]);
344 return (std::numeric_limits<double>::max ());
357 return ((src.getVector4fMap () - tgt.getVector4fMap ()).squaredNorm ());
369 assert (input_normals_ && target_normals_ &&
"Normals are not set for the input and target point clouds");
372 return (
double ((src.normal[0] * tgt.normal[0]) + (src.normal[1] * tgt.normal[1]) + (src.normal[2] * tgt.normal[2])));
377 PointCloudConstPtr input_;
380 PointCloudPtr input_transformed_;
383 PointCloudConstPtr target_;
386 NormalsConstPtr input_normals_;
389 NormalsPtr input_normals_transformed_;
392 NormalsConstPtr target_normals_;
398 std::string class_name_;
405 bool target_cloud_updated_;
409 bool force_no_recompute_;
414 inline const std::string&
415 getClassName ()
const {
return (class_name_); }
420 #include <pcl/registration/impl/correspondence_rejection.hpp>
A point structure representing normal coordinates and the surface curvature estimate.
DataContainer is a container for the input and target point clouds and implements the interface to co...
virtual bool requiresSourcePoints() const
See if this rejector requires source points.
boost::shared_ptr< const PointCloud< PointT > > ConstPtr
virtual bool requiresTargetPoints() const
See if this rejector requires a target cloud.
void setSearchMethodTarget(const KdTreePtr &tree, bool force_no_recompute=false)
Provide a pointer to the search object used to find correspondences in the target cloud...
int index_match
Index of the matching (target) point.
DataContainerInterface provides a generic interface for computing correspondence scores between corre...
PointCloudConstPtr const getInputCloud()
Get a pointer to the input point cloud dataset target.
boost::shared_ptr< const CorrespondenceRejector > ConstPtr
virtual void setInputCorrespondences(const CorrespondencesConstPtr &correspondences)
Provide a pointer to the vector of the input correspondences.
boost::shared_ptr< PointCloud< PointT > > Ptr
CorrespondenceRejector represents the base class for correspondence rejection methods ...
double getCorrespondenceScoreFromNormals(const pcl::Correspondence &corr)
Get the correspondence score for a given pair of correspondent points based on the angle betweeen the...
void setInputCloud(const PointCloudConstPtr &cloud)
Provide a source point cloud dataset (must contain XYZ data!), used to compute the correspondence dis...
virtual void getRemainingCorrespondences(const pcl::Correspondences &original_correspondences, pcl::Correspondences &remaining_correspondences)=0
Get a list of valid correspondences after rejection from the original set of correspondences.
void getCorrespondences(pcl::Correspondences &correspondences)
Run correspondence rejection.
Correspondence represents a match between two entities (e.g., points, descriptors, etc).
DataContainer(bool needs_normals=false)
Empty constructor.
PointCloudConstPtr const getInputSource()
Get a pointer to the input point cloud dataset target.
virtual double getCorrespondenceScore(int index)=0
const std::string & getClassName() const
Get a string representation of the name of this class.
int index_query
Index of the query (source) point.
virtual void setTargetPoints(pcl::PCLPointCloud2::ConstPtr)
Abstract method for setting the target cloud.
CorrespondencesConstPtr getInputCorrespondences()
Get a pointer to the vector of the input correspondences.
void setInputNormals(const NormalsConstPtr &normals)
Set the normals computed on the input point cloud.
boost::shared_ptr< const Correspondences > CorrespondencesConstPtr
boost::shared_ptr< KdTree< PointT, Tree > > Ptr
virtual bool requiresTargetNormals() const
See if this rejector requires target normals.
void setInputSource(const PointCloudConstPtr &cloud)
Provide a source point cloud dataset (must contain XYZ data!), used to compute the correspondence dis...
std::vector< pcl::Correspondence, Eigen::aligned_allocator< pcl::Correspondence > > Correspondences
CorrespondenceRejector()
Empty constructor.
boost::shared_ptr< ::pcl::PCLPointCloud2 const > ConstPtr
virtual ~DataContainerInterface()
virtual ~CorrespondenceRejector()
Empty destructor.
void getRejectedQueryIndices(const pcl::Correspondences &correspondences_before, const pcl::Correspondences &correspondences_after, std::vector< int > &indices, bool presorting_required=true)
Get the query points of correspondences that are present in one correspondence vector but not in the ...
NormalsConstPtr getInputNormals()
Get the normals computed on the input point cloud.
virtual void setSourcePoints(pcl::PCLPointCloud2::ConstPtr)
Abstract method for setting the source cloud.
CorrespondencesConstPtr input_correspondences_
The input correspondences.
void setInputTarget(const PointCloudConstPtr &target)
Provide a target point cloud dataset (must contain XYZ data!), used to compute the correspondence dis...
double getCorrespondenceScore(const pcl::Correspondence &corr)
Get the correspondence score for a given pair of correspondent points.
virtual bool requiresSourceNormals() const
See if this rejector requires source normals.
virtual void setSourceNormals(pcl::PCLPointCloud2::ConstPtr)
Abstract method for setting the source normals.
std::string rejection_name_
The name of the rejection method.
void getRejectedQueryIndices(const pcl::Correspondences &correspondences, std::vector< int > &indices)
Determine the indices of query points of correspondences that have been rejected, i...
virtual void applyRejection(Correspondences &correspondences)=0
Abstract rejection method.
void setTargetNormals(const NormalsConstPtr &normals)
Set the normals computed on the target point cloud.
A point structure representing Euclidean xyz coordinates, and the RGB color.
double getCorrespondenceScore(int index)
Get the correspondence score for a point in the input cloud.
boost::shared_ptr< CorrespondenceRejector > Ptr
NormalsConstPtr getTargetNormals()
Get the normals computed on the target point cloud.
virtual void setTargetNormals(pcl::PCLPointCloud2::ConstPtr)
Abstract method for setting the target normals.
virtual ~DataContainer()
Empty destructor.
KdTree represents the base spatial locator class for kd-tree implementations.
PointCloudConstPtr const getInputTarget()
Get a pointer to the input point cloud dataset target.