#include "../../cpp_utils/cloud/cloud.h" #include #include using namespace std; class SampledData { public: // Elements // ******** int count; PointXYZ point; vector features; vector> labels; // Methods // ******* // Constructor SampledData() { count = 0; point = PointXYZ(); } SampledData(const size_t fdim, const size_t ldim) { count = 0; point = PointXYZ(); features = vector(fdim); labels = vector>(ldim); } // Method Update void update_all(const PointXYZ p, vector::iterator f_begin, vector::iterator l_begin) { count += 1; point += p; transform (features.begin(), features.end(), f_begin, features.begin(), plus()); int i = 0; for(vector::iterator it = l_begin; it != l_begin + labels.size(); ++it) { labels[i][*it] += 1; i++; } return; } void update_features(const PointXYZ p, vector::iterator f_begin) { count += 1; point += p; transform (features.begin(), features.end(), f_begin, features.begin(), plus()); return; } void update_classes(const PointXYZ p, vector::iterator l_begin) { count += 1; point += p; int i = 0; for(vector::iterator it = l_begin; it != l_begin + labels.size(); ++it) { labels[i][*it] += 1; i++; } return; } void update_points(const PointXYZ p) { count += 1; point += p; return; } }; void grid_subsampling(vector& original_points, vector& subsampled_points, vector& original_features, vector& subsampled_features, vector& original_classes, vector& subsampled_classes, float sampleDl, int verbose); void batch_grid_subsampling(vector& original_points, vector& subsampled_points, vector& original_features, vector& subsampled_features, vector& original_classes, vector& subsampled_classes, vector& original_batches, vector& subsampled_batches, float sampleDl, int max_p);