diff --git a/registration/include/pcl/registration/impl/pyramid_feature_matching.hpp b/registration/include/pcl/registration/impl/pyramid_feature_matching.hpp index 77d8f1d659f..ab09cb30a56 100644 --- a/registration/include/pcl/registration/impl/pyramid_feature_matching.hpp +++ b/registration/include/pcl/registration/impl/pyramid_feature_matching.hpp @@ -197,9 +197,9 @@ pcl::PyramidFeatureHistogram::initializeHistogram () { std::vector bins_per_dimension (nr_dimensions); std::vector bin_step (nr_dimensions); - for (size_t dim_i = 0; dim_i < nr_dimensions; ++dim_i) + for (size_t dim_i = 0; dim_i < nr_dimensions; ++dim_i) { - bins_per_dimension[dim_i] = + bins_per_dimension[dim_i] = static_cast (ceilf ((dimension_range_target_[dim_i].second - dimension_range_target_[dim_i].first) / (powf (2.0f, static_cast (level_i)) * std::sqrt (static_cast (nr_dimensions))))); bin_step[dim_i] = powf (2.0f, static_cast (level_i)) * std::sqrt (static_cast (nr_dimensions)); } @@ -262,7 +262,12 @@ pcl::PyramidFeatureHistogram::at (std::vector &feature, std::vector access; for (size_t dim_i = 0; dim_i < nr_dimensions; ++dim_i) - access.push_back (static_cast (floor ((feature[dim_i] - dimension_range_target_[dim_i].first) / hist_levels[level].bin_step[dim_i]))); + { + if (!pcl_isnan(feature[dim_i])) + access.push_back (static_cast(std::floor((feature[dim_i] - dimension_range_target_[dim_i].first) / hist_levels[level].bin_step[dim_i]))); + else + access.push_back (static_cast(0)); + } return at (access, level); }