PointCloudToVoxelGrid.cpp
Go to the documentation of this file.
1 /* -------------------------------------------------------------------------
2  * A repertory of multi primitive-to-primitive (MP2P) ICP algorithms in C++
3  * Copyright (C) 2018-2024 Jose Luis Blanco, University of Almeria
4  * See LICENSE for license information.
5  * ------------------------------------------------------------------------- */
14 
15 // Used in the PIMP:
16 #include <tsl/robin_map.h>
17 
18 using namespace mp2p_icp_filters;
19 
21 {
23 };
24 
26 
27 void PointCloudToVoxelGrid::setResolution(const float voxel_size)
28 {
29  MRPT_START
30 
31  impl_->pts_voxels.clear();
32  resolution_ = voxel_size;
33 
34  MRPT_END
35 }
36 
37 void PointCloudToVoxelGrid::processPointCloud(const mrpt::maps::CPointsMap& p)
38 {
39  using mrpt::max3;
40  using std::abs;
41 
42  const auto& xs = p.getPointsBufferRef_x();
43  const auto& ys = p.getPointsBufferRef_y();
44  const auto& zs = p.getPointsBufferRef_z();
45  const auto npts = xs.size();
46 
47  // Previous point:
48  float x0, y0, z0;
49  x0 = y0 = z0 = std::numeric_limits<float>::max();
50 
51  auto& pts_voxels = impl_->pts_voxels;
52 
53  pts_voxels.reserve(pts_voxels.size() + npts);
54 
55  for (std::size_t i = 0; i < npts; i++)
56  {
57  // Skip this point?
58  if (params_.min_consecutive_distance != .0f &&
59  max3(abs(x0 - xs[i]), abs(y0 - ys[i]), abs(z0 - zs[i])) <
61  continue;
62 
63  // Save for the next point:
64  x0 = xs[i];
65  y0 = ys[i];
66  z0 = zs[i];
67 
68  const indices_t vxl_idx = {coord2idx(x0), coord2idx(y0), coord2idx(z0)};
69 
70  auto& cell = pts_voxels[vxl_idx];
71  cell.indices.push_back(i); // only if not out of grid range
72  }
73 }
74 
76 {
77  //
78  impl_->pts_voxels.clear();
79 }
80 
82  const std::function<void(const indices_t idx, const voxel_t& vxl)>& userCode) const
83 {
84  for (const auto& [idx, vxl] : impl_->pts_voxels) userCode(idx, vxl);
85 }
86 
87 size_t PointCloudToVoxelGrid::size() const { return impl_->pts_voxels.size(); }
mp2p_icp_filters::PointCloudToVoxelGrid::Parameters::min_consecutive_distance
float min_consecutive_distance
Definition: PointCloudToVoxelGrid.h:51
mp2p_icp_filters::PointCloudToVoxelGrid::Impl
Definition: PointCloudToVoxelGrid.cpp:20
robin_map.h
mp2p_icp_filters::PointCloudToVoxelGrid::resolution_
float resolution_
Definition: PointCloudToVoxelGrid.h:115
mrpt
Definition: LogRecord.h:100
mp2p_icp_filters::PointCloudToVoxelGrid::Impl::pts_voxels
tsl::robin_map< indices_t, voxel_t, IndicesHash > pts_voxels
Definition: PointCloudToVoxelGrid.cpp:22
mp2p_icp_filters::PointCloudToVoxelGrid::coord2idx
int32_t coord2idx(float xyz) const
Definition: PointCloudToVoxelGrid.h:105
mp2p_icp_filters::PointCloudToVoxelGrid::indices_t
Definition: PointCloudToVoxelGrid.h:62
PointCloudToVoxelGrid.h
Makes an index of a point cloud using a voxel grid.
mp2p_icp_filters::PointCloudToVoxelGrid::impl_
mrpt::pimpl< Impl > impl_
Definition: PointCloudToVoxelGrid.h:119
mp2p_icp_filters::PointCloudToVoxelGrid::voxel_t
Definition: PointCloudToVoxelGrid.h:57
mp2p_icp_filters::PointCloudToVoxelGrid::params_
Parameters params_
Definition: PointCloudToVoxelGrid.h:54
mp2p_icp_filters::PointCloudToVoxelGrid::clear
void clear()
Definition: PointCloudToVoxelGrid.cpp:75
mp2p_icp_filters::PointCloudToVoxelGrid::processPointCloud
void processPointCloud(const mrpt::maps::CPointsMap &p)
Definition: PointCloudToVoxelGrid.cpp:37
mp2p_icp_filters::PointCloudToVoxelGrid::PointCloudToVoxelGrid
PointCloudToVoxelGrid()
Definition: PointCloudToVoxelGrid.cpp:25
mp2p_icp_filters::PointCloudToVoxelGrid::setResolution
void setResolution(const float voxel_size)
Definition: PointCloudToVoxelGrid.cpp:27
mp2p_icp_filters::PointCloudToVoxelGrid::visit_voxels
void visit_voxels(const std::function< void(const indices_t idx, const voxel_t &vxl)> &userCode) const
Definition: PointCloudToVoxelGrid.cpp:81
tsl::robin_map
Definition: robin_map.h:91
mp2p_icp_filters::PointCloudToVoxelGrid::size
size_t size() const
Returns the number of occupied voxels.
Definition: PointCloudToVoxelGrid.cpp:87
mp2p_icp_filters
Definition: FilterAdjustTimestamps.h:19


mp2p_icp
Author(s):
autogenerated on Mon May 26 2025 02:45:50