cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
kitti_odometry_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
31template<typename DataType = float>
33 public dataset_t<kitti_odometry_pair_dataset_t<DataType>,
34 kitti_odometry_frame_pair_t<DataType>> {
35public:
38
45 explicit kitti_odometry_pair_dataset_t(const std::string& sequence_path,
46 std::size_t skip = 1);
47
52 void set_skip(std::size_t skip) {
53 skip_ = skip;
54 // Clear cache as pairs have changed
55 pair_cache_.clear();
56 }
57
62 [[nodiscard]] std::size_t get_skip() const { return skip_; }
63
68 void enable_overlap_computation(bool enable) {
69 compute_overlap_ = enable;
70 }
71
76 void set_cache_size(std::size_t size) {
77 max_cache_size_ = size;
78 // Trim cache if needed
79 while (pair_cache_.size() > max_cache_size_) {
80 pair_cache_.erase(pair_cache_.begin());
81 }
82 }
83
84 // ==================== Dataset Interface ====================
85
90 [[nodiscard]] std::size_t size_impl() const {
91 const auto num_frames = base_dataset_.size();
92 return (num_frames > skip_) ? (num_frames - skip_) : 0;
93 }
94
100 [[nodiscard]] std::optional<pair_type> at_impl(std::size_t index) const;
101
102 // ==================== Additional Functionality ====================
103
108 [[nodiscard]] const kitti_odometry_dataset_t<DataType>&
109 get_base_dataset() const { return base_dataset_; }
110
116 [[nodiscard]] std::size_t get_source_frame_index(std::size_t pair_index) const {
117 return pair_index;
118 }
119
125 [[nodiscard]] std::size_t get_target_frame_index(std::size_t pair_index) const {
126 return pair_index + skip_;
127 }
128
132 void clear_cache() const {
133 pair_cache_.clear();
134 base_dataset_.clear_cache();
135 }
136
143 [[nodiscard]] std::vector<std::size_t> get_pairs_with_motion(
144 DataType min_translation = 0.1,
145 DataType min_rotation = 0.01) const;
146
147private:
155 DataType compute_overlap_ratio(
156 const point_cloud_t<DataType>& source,
157 const point_cloud_t<DataType>& target,
158 DataType threshold = 0.1) const;
159
160 // ==================== Member Variables ====================
161
163 mutable kitti_odometry_dataset_t<DataType> base_dataset_;
164
166 std::size_t skip_;
167
169 mutable std::map<std::size_t, pair_type> pair_cache_;
170
172 std::size_t max_cache_size_ = 50;
173
175 bool compute_overlap_ = false;
176};
177
178} // namespace toolbox::io
179
180// 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
KITTI Odometry dataset loader.
Definition kitti_odometry_dataset.hpp:45
KITTI Odometry frame pair dataset loader.
Definition kitti_odometry_pair_dataset.hpp:34
std::size_t size_impl() const
Get number of frame pairs.
Definition kitti_odometry_pair_dataset.hpp:90
std::optional< pair_type > at_impl(std::size_t index) const
Load frame pair at specific index.
Definition kitti_odometry_pair_dataset_impl.hpp:26
void clear_cache() const
Clear pair cache.
Definition kitti_odometry_pair_dataset.hpp:132
std::vector< std::size_t > get_pairs_with_motion(DataType min_translation=0.1, DataType min_rotation=0.01) const
Get pairs with specific relative motion threshold.
Definition kitti_odometry_pair_dataset_impl.hpp:85
std::size_t get_source_frame_index(std::size_t pair_index) const
Get source frame index for a pair.
Definition kitti_odometry_pair_dataset.hpp:116
void enable_overlap_computation(bool enable)
Set whether to compute overlap ratio between frames.
Definition kitti_odometry_pair_dataset.hpp:68
std::size_t get_skip() const
Get current skip value.
Definition kitti_odometry_pair_dataset.hpp:62
std::size_t get_target_frame_index(std::size_t pair_index) const
Get target frame index for a pair.
Definition kitti_odometry_pair_dataset.hpp:125
const kitti_odometry_dataset_t< DataType > & get_base_dataset() const
Get the underlying base dataset.
Definition kitti_odometry_pair_dataset.hpp:109
void set_skip(std::size_t skip)
Set skip parameter.
Definition kitti_odometry_pair_dataset.hpp:52
void set_cache_size(std::size_t size)
Set maximum pair cache size.
Definition kitti_odometry_pair_dataset.hpp:76
包含点和相关数据的点云类 / A point cloud class containing points and associated data
Definition point.hpp:268
< 用于列出目录下的文件/For listing files in a directory
Definition dataloader.hpp:15
Frame pair data for registration tasks.
Definition kitti_types.hpp:57