cpp-toolbox  0.0.1
A toolbox library for C++
Loading...
Searching...
No Matches
kitti_extended.hpp
Go to the documentation of this file.
1#pragma once
2
5
6#include <Eigen/Dense>
7#include <filesystem>
8#include <string>
9#include <vector>
10#include <cstdint>
11#include <optional>
12
13namespace toolbox::io {
14
15// ==================== Label I/O ====================
16
23std::vector<uint32_t> read_kitti_labels(const std::string& file_path);
24
31bool write_kitti_labels(const std::string& file_path,
32 const std::vector<uint32_t>& labels);
33
34// ==================== Pose I/O ====================
35
43template<typename DataType>
44Eigen::Matrix<DataType, 4, 4> parse_kitti_pose_line(const std::string& line);
45
52template<typename DataType>
53std::vector<Eigen::Matrix<DataType, 4, 4>> read_kitti_poses(const std::string& file_path);
54
61template<typename DataType>
62std::string format_kitti_pose(const Eigen::Matrix<DataType, 4, 4>& pose);
63
71template<typename DataType>
72bool write_kitti_poses(const std::string& file_path,
73 const std::vector<Eigen::Matrix<DataType, 4, 4>>& poses);
74
75// ==================== Calibration I/O ====================
76
80template<typename DataType>
83 Eigen::Matrix<DataType, 4, 4> Tr_velo_to_cam;
84
86 Eigen::Matrix<DataType, 3, 4> P0, P1, P2, P3;
87
89 Eigen::Matrix<DataType, 3, 3> R0_rect;
90
92 std::optional<Eigen::Matrix<DataType, 4, 4>> Tr_imu_to_velo;
93};
94
102template<typename DataType>
103kitti_calibration_t<DataType> read_kitti_calibration(const std::string& file_path);
104
112template<typename DataType>
113bool write_kitti_calibration(const std::string& file_path,
114 const kitti_calibration_t<DataType>& calib);
115
116// ==================== Utility Functions ====================
117
125template<typename DataType>
126Eigen::Matrix<DataType, 4, 4> compute_relative_transform(
127 const Eigen::Matrix<DataType, 4, 4>& from_pose,
128 const Eigen::Matrix<DataType, 4, 4>& to_pose);
129
137template<typename DataType>
138std::unique_ptr<point_cloud_t<DataType>> transform_point_cloud(
139 const point_cloud_t<DataType>& cloud,
140 const Eigen::Matrix<DataType, 4, 4>& transform);
141
168template<typename DataType = float>
169std::unique_ptr<point_cloud_t<DataType>> read_kitti_with_labels(
170 const std::string& bin_path,
171 const std::string& label_path,
172 std::vector<uint32_t>& labels);
173
179std::vector<std::string> list_kitti_cloud_files(const std::string& velodyne_path);
180
186std::vector<std::string> list_kitti_label_files(const std::string& labels_path);
187
193int parse_kitti_frame_index(const std::string& filename);
194
201std::string format_kitti_frame_index(std::size_t index, int digits = 6);
202
207 std::size_t num_frames = 0;
208 bool has_labels = false;
209 bool has_calibration = false;
210 std::string sequence_name;
211 std::filesystem::path path;
212};
213
219kitti_sequence_info_t get_kitti_sequence_info(const std::string& sequence_path);
220
226bool validate_kitti_sequence_directory(const std::string& sequence_path);
227
228// ==================== Label Definitions ====================
229
230namespace kitti_semantic_labels {
231 // Static classes
232 constexpr uint16_t UNLABELED = 0;
233 constexpr uint16_t OUTLIER = 1;
234 constexpr uint16_t CAR = 10;
235 constexpr uint16_t BICYCLE = 11;
236 constexpr uint16_t BUS = 13;
237 constexpr uint16_t MOTORCYCLE = 15;
238 constexpr uint16_t TRUCK = 18;
239 constexpr uint16_t OTHER_VEHICLE = 20;
240 constexpr uint16_t PERSON = 30;
241 constexpr uint16_t BICYCLIST = 31;
242 constexpr uint16_t MOTORCYCLIST = 32;
243 constexpr uint16_t ROAD = 40;
244 constexpr uint16_t PARKING = 44;
245 constexpr uint16_t SIDEWALK = 48;
246 constexpr uint16_t OTHER_GROUND = 49;
247 constexpr uint16_t BUILDING = 50;
248 constexpr uint16_t FENCE = 51;
249 constexpr uint16_t OTHER_STRUCTURE = 52;
250 constexpr uint16_t VEGETATION = 70;
251 constexpr uint16_t TRUNK = 71;
252 constexpr uint16_t TERRAIN = 72;
253 constexpr uint16_t POLE = 80;
254 constexpr uint16_t TRAFFIC_SIGN = 81;
255
259 inline bool is_static(uint16_t label) {
260 return label == ROAD || label == PARKING || label == SIDEWALK ||
261 label == OTHER_GROUND || label == BUILDING || label == FENCE ||
262 label == OTHER_STRUCTURE || label == VEGETATION || label == TRUNK ||
263 label == TERRAIN || label == POLE || label == TRAFFIC_SIGN;
264 }
265
269 inline bool is_dynamic(uint16_t label) {
270 return label == CAR || label == BICYCLE || label == BUS ||
271 label == MOTORCYCLE || label == TRUCK || label == OTHER_VEHICLE ||
272 label == PERSON || label == BICYCLIST || label == MOTORCYCLIST;
273 }
274
278 std::string get_label_name(uint16_t label);
279
283 std::map<uint16_t, std::string> get_label_map();
284} // namespace kitti_semantic_labels
285
289inline uint16_t get_kitti_label_id(uint32_t full_label) {
290 return static_cast<uint16_t>(full_label & 0xFFFF);
291}
292
296inline uint16_t get_kitti_instance_id(uint32_t full_label) {
297 return static_cast<uint16_t>(full_label >> 16);
298}
299
303inline uint32_t make_kitti_full_label(uint16_t label_id, uint16_t instance_id) {
304 return (static_cast<uint32_t>(instance_id) << 16) | label_id;
305}
306
307} // namespace toolbox::io
308
309// Include implementation
包含点和相关数据的点云类 / A point cloud class containing points and associated data
Definition point.hpp:268
constexpr uint16_t VEGETATION
Definition kitti_extended.hpp:250
constexpr uint16_t OTHER_GROUND
Definition kitti_extended.hpp:246
constexpr uint16_t CAR
Definition kitti_extended.hpp:234
constexpr uint16_t BICYCLIST
Definition kitti_extended.hpp:241
std::string get_label_name(uint16_t label)
Get human-readable label name.
Definition kitti_extended_impl.hpp:458
constexpr uint16_t TERRAIN
Definition kitti_extended.hpp:252
constexpr uint16_t OTHER_VEHICLE
Definition kitti_extended.hpp:239
constexpr uint16_t TRUCK
Definition kitti_extended.hpp:238
constexpr uint16_t POLE
Definition kitti_extended.hpp:253
constexpr uint16_t MOTORCYCLIST
Definition kitti_extended.hpp:242
constexpr uint16_t BUS
Definition kitti_extended.hpp:236
constexpr uint16_t FENCE
Definition kitti_extended.hpp:248
bool is_dynamic(uint16_t label)
Check if a label is dynamic (moving)
Definition kitti_extended.hpp:269
constexpr uint16_t BUILDING
Definition kitti_extended.hpp:247
constexpr uint16_t TRAFFIC_SIGN
Definition kitti_extended.hpp:254
constexpr uint16_t OTHER_STRUCTURE
Definition kitti_extended.hpp:249
constexpr uint16_t PARKING
Definition kitti_extended.hpp:244
constexpr uint16_t TRUNK
Definition kitti_extended.hpp:251
constexpr uint16_t ROAD
Definition kitti_extended.hpp:243
constexpr uint16_t PERSON
Definition kitti_extended.hpp:240
constexpr uint16_t OUTLIER
Definition kitti_extended.hpp:233
std::map< uint16_t, std::string > get_label_map()
Get all label names mapping.
Definition kitti_extended_impl.hpp:492
bool is_static(uint16_t label)
Check if a label is static (non-moving)
Definition kitti_extended.hpp:259
constexpr uint16_t BICYCLE
Definition kitti_extended.hpp:235
constexpr uint16_t MOTORCYCLE
Definition kitti_extended.hpp:237
constexpr uint16_t SIDEWALK
Definition kitti_extended.hpp:245
constexpr uint16_t UNLABELED
Definition kitti_extended.hpp:232
< 用于列出目录下的文件/For listing files in a directory
Definition dataloader.hpp:15
std::string format_kitti_frame_index(std::size_t index, int digits)
Format frame index as KITTI filename (e.g., 123 -> "000123")
Definition kitti_extended_impl.hpp:405
uint16_t get_kitti_instance_id(uint32_t full_label)
Extract instance ID from full label.
Definition kitti_extended.hpp:296
uint32_t make_kitti_full_label(uint16_t label_id, uint16_t instance_id)
Combine label and instance IDs.
Definition kitti_extended.hpp:303
bool write_kitti_labels(const std::string &file_path, const std::vector< uint32_t > &labels)
Write labels to Semantic KITTI format.
Definition kitti_extended_impl.hpp:46
kitti_calibration_t< DataType > read_kitti_calibration(const std::string &file_path)
Read KITTI calibration file.
Definition kitti_extended_impl.hpp:141
bool write_kitti_calibration(const std::string &file_path, const kitti_calibration_t< DataType > &calib)
Write KITTI calibration file.
Definition kitti_extended_impl.hpp:207
std::unique_ptr< point_cloud_t< DataType > > read_kitti_with_labels(const std::string &bin_path, const std::string &label_path, std::vector< uint32_t > &labels)
Read KITTI point cloud with semantic labels.
Definition kitti_extended_impl.hpp:323
std::vector< uint32_t > read_kitti_labels(const std::string &file_path)
Read Semantic KITTI label file.
Definition kitti_extended_impl.hpp:19
Eigen::Matrix< DataType, 4, 4 > parse_kitti_pose_line(const std::string &line)
Parse a single line from KITTI poses file.
Definition kitti_extended_impl.hpp:62
bool write_kitti_poses(const std::string &file_path, const std::vector< Eigen::Matrix< DataType, 4, 4 > > &poses)
Write poses to KITTI format file.
Definition kitti_extended_impl.hpp:124
std::string format_kitti_pose(const Eigen::Matrix< DataType, 4, 4 > &pose)
Format pose matrix as KITTI string.
Definition kitti_extended_impl.hpp:108
std::vector< std::string > list_kitti_label_files(const std::string &labels_path)
List all KITTI label files in a directory.
Definition kitti_extended_impl.hpp:371
bool validate_kitti_sequence_directory(const std::string &sequence_path)
Validate KITTI sequence directory structure.
Definition kitti_extended_impl.hpp:438
std::unique_ptr< point_cloud_t< DataType > > transform_point_cloud(const point_cloud_t< DataType > &cloud, const Eigen::Matrix< DataType, 4, 4 > &transform)
Transform point cloud using transformation matrix.
Definition kitti_extended_impl.hpp:299
uint16_t get_kitti_label_id(uint32_t full_label)
Extract label ID from full label (ignoring instance ID)
Definition kitti_extended.hpp:289
kitti_sequence_info_t get_kitti_sequence_info(const std::string &sequence_path)
Get information about a KITTI sequence directory.
Definition kitti_extended_impl.hpp:411
Eigen::Matrix< DataType, 4, 4 > compute_relative_transform(const Eigen::Matrix< DataType, 4, 4 > &from_pose, const Eigen::Matrix< DataType, 4, 4 > &to_pose)
Compute relative transformation between two poses.
Definition kitti_extended_impl.hpp:291
std::vector< std::string > list_kitti_cloud_files(const std::string &velodyne_path)
List all KITTI point cloud files in a directory.
Definition kitti_extended_impl.hpp:350
std::vector< Eigen::Matrix< DataType, 4, 4 > > read_kitti_poses(const std::string &file_path)
Read all poses from KITTI poses file.
Definition kitti_extended_impl.hpp:87
int parse_kitti_frame_index(const std::string &filename)
Get frame index from KITTI filename (e.g., "000123.bin" -> 123)
Definition kitti_extended_impl.hpp:392
KITTI calibration data structure.
Definition kitti_extended.hpp:81
std::optional< Eigen::Matrix< DataType, 4, 4 > > Tr_imu_to_velo
Transformation from IMU to Velodyne.
Definition kitti_extended.hpp:92
Eigen::Matrix< DataType, 3, 4 > P3
Definition kitti_extended.hpp:86
Eigen::Matrix< DataType, 3, 4 > P1
Definition kitti_extended.hpp:86
Eigen::Matrix< DataType, 3, 4 > P0
Projection matrices for cameras 0-3 after rectification.
Definition kitti_extended.hpp:86
Eigen::Matrix< DataType, 3, 3 > R0_rect
Rectification rotation matrix for camera 0.
Definition kitti_extended.hpp:89
Eigen::Matrix< DataType, 4, 4 > Tr_velo_to_cam
Transformation from Velodyne to camera 0 rectified coordinates.
Definition kitti_extended.hpp:83
Eigen::Matrix< DataType, 3, 4 > P2
Definition kitti_extended.hpp:86
Information about a KITTI sequence.
Definition kitti_extended.hpp:206
bool has_calibration
Whether calibration file exists.
Definition kitti_extended.hpp:209
std::filesystem::path path
Full path to sequence directory.
Definition kitti_extended.hpp:211
std::size_t num_frames
Number of frames in the sequence.
Definition kitti_extended.hpp:207
bool has_labels
Whether labels directory exists.
Definition kitti_extended.hpp:208
std::string sequence_name
Sequence name (e.g., "00", "01")
Definition kitti_extended.hpp:210