cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
semantic_kitti_pair_dataset.hpp
Go to the documentation of this file.
1#pragma once
2
6
7#include <memory>
8#include <string>
9#include <optional>
10
11namespace toolbox::io {
12
36template<typename DataType = float>
38 public dataset_t<semantic_kitti_pair_dataset_t<DataType>,
39 semantic_kitti_frame_pair_t<DataType>> {
40public:
43
50 explicit semantic_kitti_pair_dataset_t(const std::string& sequence_path,
51 std::size_t skip = 1);
52
57 void set_skip(std::size_t skip) {
58 skip_ = skip;
59 // Clear cache as pairs have changed
60 pair_cache_.clear();
61 }
62
67 [[nodiscard]] std::size_t get_skip() const { return skip_; }
68
73 void set_cache_size(std::size_t size) {
74 max_cache_size_ = size;
75 base_dataset_.set_cache_size(size * 2); // Cache more frames
76 // Trim cache if needed
77 while (pair_cache_.size() > max_cache_size_) {
78 pair_cache_.erase(pair_cache_.begin());
79 }
80 }
81
86 void enable_motion_filter(bool enable) {
87 filter_by_motion_ = enable;
88 }
89
95 void set_motion_thresholds(DataType min_translation, DataType min_rotation) {
96 min_translation_ = min_translation;
97 min_rotation_ = min_rotation;
98 }
99
100 // ==================== Dataset Interface ====================
101
106 [[nodiscard]] std::size_t size_impl() const {
107 const auto num_frames = base_dataset_.size();
108 return (num_frames > skip_) ? (num_frames - skip_) : 0;
109 }
110
116 [[nodiscard]] std::optional<pair_type> at_impl(std::size_t index) const;
117
118 // ==================== Additional Functionality ====================
119
124 [[nodiscard]] const semantic_kitti_dataset_t<DataType>&
125 get_base_dataset() const { return base_dataset_; }
126
132 [[nodiscard]] std::size_t get_source_frame_index(std::size_t pair_index) const {
133 return pair_index;
134 }
135
141 [[nodiscard]] std::size_t get_target_frame_index(std::size_t pair_index) const {
142 return pair_index + skip_;
143 }
144
148 void clear_cache() const {
149 pair_cache_.clear();
150 base_dataset_.clear_cache();
151 }
152
159 [[nodiscard]] std::vector<std::size_t> get_pairs_with_labels(
160 const std::vector<uint16_t>& require_labels,
161 std::size_t min_points = 100) const;
162
167 [[nodiscard]] std::map<std::string, DataType> compute_motion_statistics() const;
168
169private:
175 bool meets_motion_criteria(
176 const Eigen::Matrix<DataType, 4, 4>& relative_transform) const;
177
178 // ==================== Member Variables ====================
179
181 mutable semantic_kitti_dataset_t<DataType> base_dataset_;
182
184 std::size_t skip_;
185
187 mutable std::map<std::size_t, pair_type> pair_cache_;
188
190 std::size_t max_cache_size_ = 30;
191
193 bool filter_by_motion_ = false;
194 DataType min_translation_ = 0.1; // meters
195 DataType min_rotation_ = 0.01; // radians
196};
197
198} // namespace toolbox::io
199
200// Include implementation
数据集基类/Abstract base class for datasets
Definition dataset.hpp:33
std::size_t size() const
获取数据集大小/Get the size of the dataset
Definition dataset.hpp:49
Semantic KITTI dataset loader.
Definition semantic_kitti_dataset.hpp:48
Semantic KITTI frame pair dataset loader.
Definition semantic_kitti_pair_dataset.hpp:39
std::map< std::string, DataType > compute_motion_statistics() const
Compute motion statistics for the dataset.
Definition semantic_kitti_pair_dataset_impl.hpp:151
void set_cache_size(std::size_t size)
Set maximum pair cache size.
Definition semantic_kitti_pair_dataset.hpp:73
void set_skip(std::size_t skip)
Set skip parameter.
Definition semantic_kitti_pair_dataset.hpp:57
std::size_t get_target_frame_index(std::size_t pair_index) const
Get target frame index for a pair.
Definition semantic_kitti_pair_dataset.hpp:141
std::size_t get_source_frame_index(std::size_t pair_index) const
Get source frame index for a pair.
Definition semantic_kitti_pair_dataset.hpp:132
std::size_t size_impl() const
Get number of frame pairs.
Definition semantic_kitti_pair_dataset.hpp:106
void set_motion_thresholds(DataType min_translation, DataType min_rotation)
Set motion thresholds for filtering.
Definition semantic_kitti_pair_dataset.hpp:95
std::vector< std::size_t > get_pairs_with_labels(const std::vector< uint16_t > &require_labels, std::size_t min_points=100) const
Get pairs with specific semantic constraints.
Definition semantic_kitti_pair_dataset_impl.hpp:101
void clear_cache() const
Clear all caches.
Definition semantic_kitti_pair_dataset.hpp:148
const semantic_kitti_dataset_t< DataType > & get_base_dataset() const
Get the underlying base dataset.
Definition semantic_kitti_pair_dataset.hpp:125
std::optional< pair_type > at_impl(std::size_t index) const
Load frame pair at specific index.
Definition semantic_kitti_pair_dataset_impl.hpp:27
std::size_t get_skip() const
Get current skip value.
Definition semantic_kitti_pair_dataset.hpp:67
void enable_motion_filter(bool enable)
Enable/disable motion filtering.
Definition semantic_kitti_pair_dataset.hpp:86
< 用于列出目录下的文件/For listing files in a directory
Definition dataloader.hpp:15
Frame pair data from Semantic KITTI dataset.
Definition kitti_types.hpp:159