38 #ifndef PCL_FILTERS_BILATERAL_IMPL_H_
39 #define PCL_FILTERS_BILATERAL_IMPL_H_
44 template <
typename Po
intT>
double
46 const std::vector<int> &indices,
47 const std::vector<float> &distances)
52 for (
size_t n_id = 0; n_id < indices.size (); ++n_id)
54 int id = indices[n_id];
56 double intensity_dist = fabs (input_->points[pid].intensity - input_->points[
id].intensity);
59 double dist =
std::sqrt (distances[n_id]);
60 double weight = kernel (dist, sigma_s_) * kernel (intensity_dist, sigma_r_);
63 BF += weight * input_->points[id].intensity;
70 template <
typename Po
intT>
void
76 PCL_ERROR (
"[pcl::BilateralFilter::applyFilter] Need a sigma_s value given before continuing.\n");
83 if (input_->isOrganized ())
89 tree_->setInputCloud (input_);
91 std::vector<int> k_indices;
92 std::vector<float> k_distances;
98 for (
size_t i = 0; i < indices_->size (); ++i)
101 tree_->radiusSearch ((*indices_)[i], sigma_s_ * 2, k_indices, k_distances);
104 output.
points[(*indices_)[i]].intensity = computePointWeight ((*indices_)[i], k_indices, k_distances);
108 #define PCL_INSTANTIATE_BilateralFilter(T) template class PCL_EXPORTS pcl::BilateralFilter<T>;
110 #endif // PCL_FILTERS_BILATERAL_H_