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&
166 template <
typename Po
intT,
typename NormalT = pcl::Po
intNormal>
184 , input_transformed_ ()
187 , input_normals_transformed_ ()
190 , class_name_ (
"DataContainer")
191 , needs_normals_ (needs_normals)
192 , target_cloud_updated_ (true)
193 , force_no_recompute_ (false)
204 PCL_DEPRECATED (
void setInputCloud (
const PointCloudConstPtr &cloud),
"[pcl::registration::DataContainer::setInputCloud] setInputCloud is deprecated. Please use setInputSource instead.");
207 PCL_DEPRECATED (PointCloudConstPtr
const getInputCloud (),
"[pcl::registration::DataContainer::getInputCloud] getInputCloud is deprecated. Please use getInputSource instead.");
220 inline PointCloudConstPtr
const
231 target_cloud_updated_ =
true;
235 inline PointCloudConstPtr
const
247 bool force_no_recompute =
false)
250 if (force_no_recompute)
252 force_no_recompute_ =
true;
254 target_cloud_updated_ =
true;
264 inline NormalsConstPtr
274 inline NormalsConstPtr
283 if ( target_cloud_updated_ && !force_no_recompute_ )
285 tree_->setInputCloud (target_);
287 std::vector<int> indices (1);
288 std::vector<float> distances (1);
289 if (tree_->nearestKSearch (input_->points[index], 1, indices, distances))
290 return (distances[0]);
292 return (std::numeric_limits<double>::max ());
305 return ((src.getVector4fMap () - tgt.getVector4fMap ()).squaredNorm ());
317 assert (input_normals_ && target_normals_ &&
"Normals are not set for the input and target point clouds");
320 return (
double ((src.normal[0] * tgt.normal[0]) + (src.normal[1] * tgt.normal[1]) + (src.normal[2] * tgt.normal[2])));
325 PointCloudConstPtr input_;
328 PointCloudPtr input_transformed_;
331 PointCloudConstPtr target_;
334 NormalsConstPtr input_normals_;
337 NormalsPtr input_normals_transformed_;
340 NormalsConstPtr target_normals_;
346 std::string class_name_;
353 bool target_cloud_updated_;
357 bool force_no_recompute_;
362 inline const std::string&
363 getClassName ()
const {
return (class_name_); }
368 #include <pcl/registration/impl/correspondence_rejection.hpp>
boost::shared_ptr< const CorrespondenceRejector > ConstPtr
boost::shared_ptr< KdTree< PointT > > Ptr
std::vector< pcl::Correspondence, Eigen::aligned_allocator< pcl::Correspondence > > Correspondences
CorrespondencesConstPtr getInputCorrespondences()
Get a pointer to the vector of the input correspondences.
void getCorrespondences(pcl::Correspondences &correspondences)
Run correspondence rejection.
boost::shared_ptr< const PointCloud< PointT > > ConstPtr
PointCloudConstPtr const getInputTarget()
Get a pointer to the input point cloud dataset target.
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.
double getCorrespondenceScoreFromNormals(const pcl::Correspondence &corr)
Get the correspondence score for a given pair of correspondent points based on the angle betweeen the...
DataContainer(bool needs_normals=false)
Empty constructor.
boost::shared_ptr< PointCloud< PointT > > Ptr
CorrespondenceRejector()
Empty constructor.
DataContainerInterface provides a generic interface for computing correspondence scores between corre...
void getRejectedQueryIndices(const pcl::Correspondences &correspondences, std::vector< int > &indices)
Determine the indices of query points of correspondences that have been rejected, i...
PointCloudConstPtr const getInputSource()
Get a pointer to the input point cloud dataset target.
boost::shared_ptr< const Correspondences > CorrespondencesConstPtr
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...
virtual void applyRejection(Correspondences &correspondences)=0
Abstract rejection method.
void setTargetNormals(const NormalsConstPtr &normals)
Set the normals computed on the target point cloud.
CorrespondenceRejector represents the base class for correspondence rejection methods ...
void setInputTarget(const PointCloudConstPtr &target)
Provide a target point cloud dataset (must contain XYZ data!), used to compute the correspondence dis...
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 ...
A point structure representing normal coordinates and the surface curvature estimate.
PCL_DEPRECATED(void setInputCloud(const PointCloudConstPtr &cloud),"[pcl::registration::DataContainer::setInputCloud] setInputCloud is deprecated. Please use setInputSource instead.")
Provide a source point cloud dataset (must contain XYZ data!), used to compute the correspondence dis...
DataContainer is a container for the input and target point clouds and implements the interface to co...
NormalsConstPtr getTargetNormals()
Get the normals computed on the target point cloud.
std::string rejection_name_
The name of the rejection method.
double getCorrespondenceScore(int index)
Get the correspondence score for a point in the input cloud.
virtual ~CorrespondenceRejector()
Empty destructor.
int index_match
Index of the matching (target) point.
void setInputNormals(const NormalsConstPtr &normals)
Set the normals computed on the input point cloud.
virtual ~DataContainer()
Empty destructor.
void setInputSource(const PointCloudConstPtr &cloud)
Provide a source point cloud dataset (must contain XYZ data!), used to compute the correspondence dis...
boost::shared_ptr< CorrespondenceRejector > Ptr
int index_query
Index of the query (source) point.
virtual ~DataContainerInterface()
KdTree represents the base spatial locator class for kd-tree implementations.
A point structure representing Euclidean xyz coordinates, and the RGB color.
CorrespondencesConstPtr input_correspondences_
The input correspondences.
NormalsConstPtr getInputNormals()
Get the normals computed on the input point cloud.
const std::string & getClassName() const
Get a string representation of the name of this class.
Correspondence represents a match between two entities (e.g., points, descriptors, etc).
virtual void setInputCorrespondences(const CorrespondencesConstPtr &correspondences)
Provide a pointer to the vector of the input correspondences.
virtual double getCorrespondenceScore(int index)=0
double getCorrespondenceScore(const pcl::Correspondence &corr)
Get the correspondence score for a given pair of correspondent points.