Point Cloud Library (PCL)
1.9.1
|
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 ());
215 template <
typename Po
intT,
typename NormalT = pcl::Po
intNormal>
233 , input_transformed_ ()
236 , input_normals_transformed_ ()
239 , class_name_ (
"DataContainer")
240 , needs_normals_ (needs_normals)
241 , target_cloud_updated_ (true)
242 , force_no_recompute_ (false)
260 inline PointCloudConstPtr
const
271 target_cloud_updated_ =
true;
275 inline PointCloudConstPtr
const
287 bool force_no_recompute =
false)
290 if (force_no_recompute)
292 force_no_recompute_ =
true;
294 target_cloud_updated_ =
true;
304 inline NormalsConstPtr
314 inline NormalsConstPtr
323 if ( target_cloud_updated_ && !force_no_recompute_ )
325 tree_->setInputCloud (target_);
327 std::vector<int> indices (1);
328 std::vector<float> distances (1);
329 if (tree_->nearestKSearch (input_->points[index], 1, indices, distances))
330 return (distances[0]);
332 return (std::numeric_limits<double>::max ());
345 return ((src.getVector4fMap () - tgt.getVector4fMap ()).squaredNorm ());
357 assert (input_normals_ && target_normals_ &&
"Normals are not set for the input and target point clouds");
360 return (
double ((src.normal[0] * tgt.normal[0]) + (src.normal[1] * tgt.normal[1]) + (src.normal[2] * tgt.normal[2])));
365 PointCloudConstPtr input_;
368 PointCloudPtr input_transformed_;
371 PointCloudConstPtr target_;
374 NormalsConstPtr input_normals_;
377 NormalsPtr input_normals_transformed_;
380 NormalsConstPtr target_normals_;
386 std::string class_name_;
393 bool target_cloud_updated_;
397 bool force_no_recompute_;
402 inline const std::string&
403 getClassName ()
const {
return (class_name_); }
This file defines compatibility wrappers for low level I/O functions.
int index_match
Index of the matching (target) point.
A point structure representing normal coordinates and the surface curvature estimate.
boost::shared_ptr< PointCloud< PointT > > Ptr
virtual void setInputCorrespondences(const CorrespondencesConstPtr &correspondences)
Provide a pointer to the vector of the input correspondences.
boost::shared_ptr< const CorrespondenceRejector > ConstPtr
virtual bool requiresTargetNormals() const
See if this rejector requires target normals.
KdTree represents the base spatial locator class for kd-tree implementations.
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.
const std::string & getClassName() const
Get a string representation of the name of this class.
NormalsConstPtr getInputNormals()
Get the normals computed on the input point cloud.
PointCloud represents the base class in PCL for storing collections of 3D points.
A point structure representing Euclidean xyz coordinates, and the RGB color.
const PointCloudConstPtr getInputTarget()
Get a pointer to the input point cloud dataset target.
double getCorrespondenceScore(const pcl::Correspondence &corr)
Get the correspondence score for a given pair of correspondent points.
void setInputSource(const PointCloudConstPtr &cloud)
Provide a source point cloud dataset (must contain XYZ data!), used to compute the correspondence dis...
DataContainer(bool needs_normals=false)
Empty constructor.
boost::shared_ptr< KdTree< PointT, Tree > > Ptr
virtual bool requiresSourcePoints() const
See if this rejector requires source points.
void getCorrespondences(pcl::Correspondences &correspondences)
Run correspondence rejection.
DataContainerInterface provides a generic interface for computing correspondence scores between corre...
CorrespondencesConstPtr getInputCorrespondences()
Get a pointer to the vector of the input correspondences.
virtual ~DataContainer()
Empty destructor.
DataContainer is a container for the input and target point clouds and implements the interface to co...
virtual void setTargetPoints(pcl::PCLPointCloud2::ConstPtr)
Abstract method for setting the target cloud.
NormalsConstPtr getTargetNormals()
Get the normals computed on the target point cloud.
virtual ~CorrespondenceRejector()
Empty destructor.
void setInputNormals(const NormalsConstPtr &normals)
Set the normals computed on the input point cloud.
virtual double getCorrespondenceScore(int index)=0
virtual double getCorrespondenceScoreFromNormals(const pcl::Correspondence &)=0
int index_query
Index of the query (source) point.
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 ...
virtual void setSourcePoints(pcl::PCLPointCloud2::ConstPtr)
Abstract method for setting the source cloud.
double getCorrespondenceScore(int index)
Get the correspondence score for a point in the input cloud.
boost::shared_ptr< const Correspondences > CorrespondencesConstPtr
void setTargetNormals(const NormalsConstPtr &normals)
Set the normals computed on the target point 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.
const PointCloudConstPtr getInputSource()
Get a pointer to the input point cloud dataset target.
std::vector< pcl::Correspondence, Eigen::aligned_allocator< pcl::Correspondence > > Correspondences
void getRejectedQueryIndices(const pcl::Correspondences &correspondences, std::vector< int > &indices)
Determine the indices of query points of correspondences that have been rejected, i....
virtual ~DataContainerInterface()
boost::shared_ptr< const PointCloud< PointT > > ConstPtr
CorrespondenceRejector()
Empty constructor.
boost::shared_ptr< CorrespondenceRejector > Ptr
virtual void setTargetNormals(pcl::PCLPointCloud2::ConstPtr)
Abstract method for setting the target normals.
boost::shared_ptr< ::pcl::PCLPointCloud2 const > ConstPtr
void setInputTarget(const PointCloudConstPtr &target)
Provide a target point cloud dataset (must contain XYZ data!), used to compute the correspondence dis...
virtual bool requiresSourceNormals() const
See if this rejector requires source normals.
Correspondence represents a match between two entities (e.g., points, descriptors,...
CorrespondencesConstPtr input_correspondences_
The input correspondences.
std::string rejection_name_
The name of the rejection method.
double getCorrespondenceScoreFromNormals(const pcl::Correspondence &corr)
Get the correspondence score for a given pair of correspondent points based on the angle between the ...
virtual void setSourceNormals(pcl::PCLPointCloud2::ConstPtr)
Abstract method for setting the source normals.
virtual bool requiresTargetPoints() const
See if this rejector requires a target cloud.
CorrespondenceRejector represents the base class for correspondence rejection methods
virtual void applyRejection(Correspondences &correspondences)=0
Abstract rejection method.