ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
GridSubsampling.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #include <cstdint>
9 #include <set>
10 
11 #include "ml/contrib/Cloud.h"
12 
13 namespace cloudViewer {
14 namespace ml {
15 namespace contrib {
16 
17 class SampledData {
18 public:
19  // Elements
20  // ********
21 
22  int count;
24  std::vector<float> features;
25  std::vector<std::unordered_map<int, int>> labels;
26 
27  // Methods
28  // *******
29 
30  // Constructor
32  count = 0;
33  point = PointXYZ();
34  }
35 
36  SampledData(const size_t fdim, const size_t ldim) {
37  count = 0;
38  point = PointXYZ();
39  features = std::vector<float>(fdim);
40  labels = std::vector<std::unordered_map<int, int>>(ldim);
41  }
42 
43  // Method Update
44  void update_all(const PointXYZ p,
45  std::vector<float>::iterator f_begin,
46  std::vector<int>::iterator l_begin) {
47  count += 1;
48  point += p;
49  transform(features.begin(), features.end(), f_begin, features.begin(),
50  std::plus<float>());
51  int i = 0;
52  for (std::vector<int>::iterator it = l_begin;
53  it != l_begin + labels.size(); ++it) {
54  labels[i][*it] += 1;
55  i++;
56  }
57  return;
58  }
59 
60  void update_features(const PointXYZ p,
61  std::vector<float>::iterator f_begin) {
62  count += 1;
63  point += p;
64  transform(features.begin(), features.end(), f_begin, features.begin(),
65  std::plus<float>());
66  return;
67  }
68 
69  void update_classes(const PointXYZ p, std::vector<int>::iterator l_begin) {
70  count += 1;
71  point += p;
72  int i = 0;
73  for (std::vector<int>::iterator it = l_begin;
74  it != l_begin + labels.size(); ++it) {
75  labels[i][*it] += 1;
76  i++;
77  }
78  return;
79  }
80 
81  void update_points(const PointXYZ p) {
82  count += 1;
83  point += p;
84  return;
85  }
86 };
87 
88 void grid_subsampling(std::vector<PointXYZ>& original_points,
89  std::vector<PointXYZ>& subsampled_points,
90  std::vector<float>& original_features,
91  std::vector<float>& subsampled_features,
92  std::vector<int>& original_classes,
93  std::vector<int>& subsampled_classes,
94  float sampleDl,
95  int verbose);
96 
97 void batch_grid_subsampling(std::vector<PointXYZ>& original_points,
98  std::vector<PointXYZ>& subsampled_points,
99  std::vector<float>& original_features,
100  std::vector<float>& subsampled_features,
101  std::vector<int>& original_classes,
102  std::vector<int>& subsampled_classes,
103  std::vector<int>& original_batches,
104  std::vector<int>& subsampled_batches,
105  float sampleDl,
106  int max_p);
107 
108 } // namespace contrib
109 } // namespace ml
110 } // namespace cloudViewer
void update_all(const PointXYZ p, std::vector< float >::iterator f_begin, std::vector< int >::iterator l_begin)
void update_points(const PointXYZ p)
void update_classes(const PointXYZ p, std::vector< int >::iterator l_begin)
SampledData(const size_t fdim, const size_t ldim)
std::vector< std::unordered_map< int, int > > labels
void update_features(const PointXYZ p, std::vector< float >::iterator f_begin)
void batch_grid_subsampling(std::vector< PointXYZ > &original_points, std::vector< PointXYZ > &subsampled_points, std::vector< float > &original_features, std::vector< float > &subsampled_features, std::vector< int > &original_classes, std::vector< int > &subsampled_classes, std::vector< int > &original_batches, std::vector< int > &subsampled_batches, float sampleDl, int max_p)
void grid_subsampling(std::vector< PointXYZ > &original_points, std::vector< PointXYZ > &subsampled_points, std::vector< float > &original_features, std::vector< float > &subsampled_features, std::vector< int > &original_classes, std::vector< int > &subsampled_classes, float sampleDl, int verbose)
Generic file read and write utility for python interface.
Definition: lsd.c:149