5#include "point_cloud/distance_filter.h"
6#include "point_cloud/kdtree.h"
11 namespace point_cloud {
14 distance_filter(points, distance, trivial_indices(static_cast<index_t >(points.rows()))) {
18 distance_filter::distance_filter(
const geometry::points3d &points,
double distance,
19 const std::vector<index_t> &indices) : n_points_(static_cast<index_t >(points.rows())) {
20 if (distance <= 0.0) {
21 throw std::invalid_argument(
"distance_threshold must be greater than 0.0");
24 kdtree tree(points,
true);
26 std::vector<index_t> nn_indices;
27 std::vector<double> nn_distances;
28 std::set<index_t> indices_to_remove;
30 for (
auto i : indices) {
31 if(indices_to_remove.find(i) != indices_to_remove.end())
continue;
33 geometry::points3d p = points.row(i);
34 std::tie(nn_indices, nn_distances) = tree.radius_search(p, distance);
36 for(
auto j : nn_indices) {
38 indices_to_remove.insert(j);
43 for(
auto i : indices) {
44 if(indices_to_remove.find(i) == indices_to_remove.end()) {
45 filtered_indices_.push_back(i);
本系统的主命名空间,包含了common, examples, fmm, geometry, numeric, point_cloud等子命名空间