PointCloudToVoxelGridSingle.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 // Used in the PIMP:
15 #include <tsl/robin_map.h>
16 
17 using namespace mp2p_icp_filters;
18 
20 {
22 };
23 
25 
26 void PointCloudToVoxelGridSingle::setResolution(const float voxel_size)
27 {
28  MRPT_START
29 
30  impl_->pts_voxels.clear();
31  resolution_ = voxel_size;
32 
33  MRPT_END
34 }
35 
36 void PointCloudToVoxelGridSingle::processPointCloud(const mrpt::maps::CPointsMap& p)
37 {
38  using mrpt::max3;
39  using std::abs;
40 
41  const auto& xs = p.getPointsBufferRef_x();
42  const auto& ys = p.getPointsBufferRef_y();
43  const auto& zs = p.getPointsBufferRef_z();
44  const auto npts = xs.size();
45 
46  auto& pts_voxels = impl_->pts_voxels;
47 
48  pts_voxels.reserve(pts_voxels.size() + npts);
49 
50  for (std::size_t i = 0; i < npts; i++)
51  {
52  const auto x = xs[i];
53  const auto y = ys[i];
54  const auto z = zs[i];
55 
56  const indices_t vxl_idx = {coord2idx(x), coord2idx(y), coord2idx(z)};
57 
58  auto itVoxel = pts_voxels.find(vxl_idx);
59 
60  if (itVoxel != pts_voxels.end())
61  {
62  // (const cast: required for tsl::robin_map)
63  auto& vx = const_cast<voxel_t&>(itVoxel->second);
64 
65  if (vx.pointCount == 0)
66  vx = {mrpt::math::TPoint3Df(x, y, z), i, &p, 1};
67  else
68  vx.pointCount++;
69  }
70  else
71  {
72  // insert new
73  pts_voxels[vxl_idx] = {mrpt::math::TPoint3Df(x, y, z), i, &p, 1};
74  }
75  }
76 }
77 
79 {
80  //
81  impl_->pts_voxels.min_load_factor(0.01f);
82  impl_->pts_voxels.clear();
83 }
84 
86  const std::function<void(const indices_t idx, const voxel_t& vxl)>& userCode) const
87 {
88  for (const auto& [idx, vxl] : impl_->pts_voxels) userCode(idx, vxl);
89 }
90 
91 size_t PointCloudToVoxelGridSingle::size() const { return impl_->pts_voxels.size(); }
mp2p_icp_filters::PointCloudToVoxelGridSingle::size
size_t size() const
Returns the number of occupied voxels.
Definition: PointCloudToVoxelGridSingle.cpp:91
mp2p_icp_filters::PointCloudToVoxelGridSingle::coord2idx
int32_t coord2idx(float xyz) const
Definition: PointCloudToVoxelGridSingle.h:97
mp2p_icp_filters::PointCloudToVoxelGridSingle::processPointCloud
void processPointCloud(const mrpt::maps::CPointsMap &p)
Definition: PointCloudToVoxelGridSingle.cpp:36
mp2p_icp_filters::PointCloudToVoxelGridSingle::clear
void clear()
Definition: PointCloudToVoxelGridSingle.cpp:78
mp2p_icp_filters::PointCloudToVoxelGridSingle::voxel_t::pointCount
uint32_t pointCount
Definition: PointCloudToVoxelGridSingle.h:51
robin_map.h
kitti-run-seq.f
string f
Definition: kitti-run-seq.py:12
mrpt
Definition: LogRecord.h:100
test.x
x
Definition: test.py:4
mp2p_icp_filters::PointCloudToVoxelGridSingle::visit_voxels
void visit_voxels(const std::function< void(const indices_t idx, const voxel_t &vxl)> &userCode) const
Definition: PointCloudToVoxelGridSingle.cpp:85
mp2p_icp_filters::PointCloudToVoxelGridSingle::voxel_t
Definition: PointCloudToVoxelGridSingle.h:44
mp2p_icp_filters::PointCloudToVoxelGridSingle::Impl::pts_voxels
tsl::robin_map< indices_t, voxel_t, IndicesHash > pts_voxels
Definition: PointCloudToVoxelGridSingle.cpp:21
mp2p_icp_filters::PointCloudToVoxelGridSingle::Impl
Definition: PointCloudToVoxelGridSingle.cpp:19
mp2p_icp_filters::PointCloudToVoxelGridSingle::resolution_
float resolution_
Definition: PointCloudToVoxelGridSingle.h:107
mp2p_icp_filters::PointCloudToVoxelGridSingle::PointCloudToVoxelGridSingle
PointCloudToVoxelGridSingle()
Definition: PointCloudToVoxelGridSingle.cpp:24
mp2p_icp_filters::PointCloudToVoxelGridSingle::setResolution
void setResolution(const float voxel_size)
Definition: PointCloudToVoxelGridSingle.cpp:26
PointCloudToVoxelGridSingle.h
Makes an index of a point cloud using a voxel grid.
mp2p_icp_filters::PointCloudToVoxelGridSingle::indices_t
Definition: PointCloudToVoxelGridSingle.h:54
mp2p_icp_filters::PointCloudToVoxelGridSingle::impl_
mrpt::pimpl< Impl > impl_
Definition: PointCloudToVoxelGridSingle.h:111
tsl::robin_map
Definition: robin_map.h:91
mp2p_icp_filters
Definition: FilterAdjustTimestamps.h:19


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