38 #ifndef PCL_REGISTRATION_IMPL_CORRESPONDENCE_ESTIMATION_H_
39 #define PCL_REGISTRATION_IMPL_CORRESPONDENCE_ESTIMATION_H_
45 template <
typename Po
intSource,
typename Po
intTarget>
inline void
49 if (cloud->points.empty ())
51 PCL_ERROR (
"[pcl::%s::setInputTarget] Invalid or empty point cloud dataset given!\n", getClassName ().c_str ());
55 tree_->setInputCloud (target_);
59 template <
typename Po
intSource,
typename Po
intTarget>
void
70 PCL_WARN (
"[pcl::%s::compute] No input target dataset was given!\n", getClassName ().c_str ());
74 float max_dist_sqr = max_distance * max_distance;
76 correspondences.resize (indices_->size ());
77 std::vector<int> index (1);
80 for (
size_t i = 0; i < indices_->size (); ++i)
85 input_->points[(*indices_)[i]],
89 if (tree_->nearestKSearch (pt, 1, index, distance))
91 if (distance[0] <= max_dist_sqr)
96 correspondences[i] = corr;
106 template <
typename Po
intSource,
typename Po
intTarget>
void
119 PCL_WARN (
"[pcl::%s::compute] No input target dataset was given!\n", getClassName ().c_str ());
127 correspondences.resize (indices_->size());
128 std::vector<int> index (1);
130 std::vector<int> index_reciprocal (1);
131 std::vector<float> distance_reciprocal (1);
133 unsigned int nr_valid_correspondences = 0;
135 for (
size_t i = 0; i < indices_->size (); ++i)
140 input_->points[(*indices_)[i]],
144 tree_->nearestKSearch (pt_src, 1, index, distance);
149 target_->points[index[0]],
152 tree_reciprocal.
nearestKSearch (pt_tgt, 1, index_reciprocal, distance_reciprocal);
154 if ((*indices_)[i] == index_reciprocal[0])
159 correspondences[nr_valid_correspondences] = corr;
160 ++nr_valid_correspondences;
163 correspondences.resize (nr_valid_correspondences);