KITTI数据集--label解析与传感器间坐标转换参数解析

KITTI数据集是自动驾驶领域最知名的数据集之一。可以用来从事立体图像、光流估计、三维检测、三维跟踪等方面的研究。

一、kitti数据集,label解析

16个数代表的含义:

第1个字符串:代表物体类别

'Car', 'Van', 'Truck','Pedestrian', 'Person_sitting', 'Cyclist','Tram',  'Misc' or  'DontCare'

注意,’DontCare’ 标签表示该区域没有被标注,比如由于目标物体距离激光雷达太远。为了防止在评估过程中(主要是计算precision),将本来是目标物体但是因为某些原因而没有标注的区域统计为假阳性(false positives),评估脚本会自动忽略’DontCare’ 区域的预测结果。

第2个数:代表物体是否被截断

从0(非截断)到1(截断)浮动,其中truncated指离开图像边界的对象

第3个数:代表物体是否被遮挡

整数0,1,2,3表示被遮挡的程度

0:完全可见  1:小部分遮挡  2:大部分遮挡 3:完全遮挡(unknown)

第4个数:alpha,物体的观察角度,范围:-pi~pi

是在相机坐标系下,以相机原点为中心,相机原点到物体中心的连线为半径,将物体绕相机y轴旋转至相机z轴,此时物体方向与相机x轴的夹角

第5~8这4个数:物体的2维边界框

xmin,ymin,xmax,ymax

第9~11这3个数:3维物体的尺寸

高、宽、长(单位:米)

第12~14这3个数:3维物体的位置

 x,y,z(在照相机坐标系下,单位:米)

第15个数:3维物体的空间方向:rotation_y

在照相机坐标系下,物体的全局方向角(物体前进方向与相机坐标系x轴的夹角),范围:-pi~pi

第16个数:检测的置信度

参考https://blog.csdn.net/cuichuanchen3307/article/details/80596689

上面的主要问题 第4个数与第15个数

第4个数:alpha,物体的观察角度,范围:-pi~pi  (主要疑问--与激光联系)

是在相机坐标系下,以相机原点为中心,相机原点到物体中心的连线为半径,将物体绕相机y轴旋转至相机z轴,此时物体方向与相机x轴的夹角

第15个数:3维物体的空间方向:rotation_y  (见下文)

在照相机坐标系下,物体的全局方向角(物体前进方向与相机坐标系x轴的夹角),范围:-pi~pi

二、kitti数据集,calib解析

下面三个txt文件的说明

p (12=3*4); R0(=3*3);   Tr_velo_to_cam(12=3*4);Tr_velo_to_cam(12=3*4);

要将Velodyne坐标中的点x投影到左侧的彩色图像中y:

使用公式(左乘):y = P2 * R0_rect *Tr_velo_to_cam * x

将Velodyne坐标中的点投影到右侧的彩色图像中:

使用公式(左乘):y = P3 * R0_rect *Tr_velo_to_cam * x

Tr_velo_to_cam * x    :是将Velodyne坐标中的点x投影到编号为0的相机(参考相机)坐标系中

R0_rect *Tr_velo_to_cam * x    :是将Velodyne坐标中的点x投影到编号为0的相机(矫正后的)坐标系中 [此参数怎麽获取]

P2 * R0_rect *Tr_velo_to_cam * x     :是将Velodyne坐标中的点x投影到编号为0的相机(参考相机)坐标系中,再投影到编号为2的相机(左彩色相机)的照片上

注意:所有矩阵都存储在主行中,即第一个值对应于第一行。 R0_rect包含一个3x3矩阵,需要将其扩展为4x4矩阵,方法是在右下角添加1,在其他位置添加0。 Tr_xxx是

### KITTI 数据集解析方法 #### 1. 数据结构理解 KITTI 数据集是一个多模态数据集合,包含了来自摄像头、激光雷达 (LiDAR) 和 GPS/IMU 的多种传感器数据。为了有效解析数据集,需先熟悉其目录结构和文件组成[^1]。 典型的 KITTI 数据集目录如下所示: ```plaintext data_object_2d/training/ ├── calib # 校准文件,用于不同传感器坐标转换 ├── image_2 # 左彩色相机图片 ├── label_2 # 2D标注文件 └── velodyne # LiDAR点云数据 ``` 每种类型的文件都有特定用途,例如 `calib` 文件提供了摄像机内外参以及其他传感器的校准矩阵;`image_2` 存储的是左前视图的 RGB 图像;`label_2` 是对应的 2D 边界框标签;而 `velodyne` 则存储了原始的三维点云数据[^3]。 --- #### 2. 数据读取处理 对于不同的子任务(如 2D 或 3D 目标检测),需要分别加载并解析相应的文件类型: ##### (1)Calibration 文件解析 Calibration 文件定义了各个传感器的变换关系。通过这些信息可以实现图像平面到世界坐标的映射。 ```python import numpy as np def read_calib_file(calib_path): data = {} with open(calib_path, 'r') as f: for line in f.readlines(): key, value = line.split(':', 1) try: data[key] = np.array([float(x) for x in value.split()]) except ValueError: pass return data ``` 上述函数能够提取 Calibration 文件中的数值,并将其转化为 NumPy 数组以便后续计算[^4]。 --- ##### (2)Label 文件解析 Label 文件记录了目标物体的位置、尺寸和其他属性。每一行代表一个对象的信息,字段含义包括类别名称、截断程度、遮挡等级等。 ```python class Object3d(object): def __init__(self, content): self.content = content.strip().split(' ') self.class_name = self.content[0] self.truncation = float(self.content[1]) self.occlusion = int(self.content[2]) def parse_label(label_path): objects = [] with open(label_path, 'r') as f: lines = f.readlines() for line in lines: obj = Object3d(line) objects.append(obj) return objects ``` 此代码片段展示了如何逐行解析 Label 文件的内容,并封装成 Python 对象以供进一步分析。 --- ##### (3)Velodyne 点云数据解析 Velodyne 数据是以二进制形式保存的浮点数数组,表示空中各点的 XYZ 坐标及其反射强度。 ```python import struct def load_velo_scan(velo_filename): scan = [] with open(velo_filename, 'rb') as f: while True: byte = f.read(4 * 4) # 每个点占用四个浮点数 (x,y,z,intensity) if not byte: break xyz_i = struct.unpack('f' * 4, byte[:16]) # 将字节流解码为浮点数 scan.append([xyz_i[0], xyz_i[1], xyz_i[2]]) return np.array(scan) points = load_velo_scan('./path/to/velodyne/file.bin') print(points.shape) # 输出形状应类似于 (N, 3),其中 N 表示点的数量 ``` 以上脚本实现了从 `.bin` 文件中加载 Velodyne 扫描数据的功能。 --- #### 3. 可视化工具推荐 为了更好地理解和验证数据质量,建议使用开源库 PyVista 或 Open3D 来绘制点云及边界框。以下是基于 Open3D 的简单例子: ```python import open3d as o3d pcd = o3d.geometry.PointCloud() pcd.points = o3d.utility.Vector3dVector(points[:, :3]) # 加载点云数据 o3d.visualization.draw_geometries([pcd]) # 显示点云 ``` --- #### 4. 特殊情况考虑 某些情况下可能会遇到额外的数据预处理需求,例如裁剪超出视野范围的点云或将多个帧拼接在一起形成更密集的地图。此外,在训练深度学习模型之前通常还需要完成标准化操作,使输入特征分布更加均匀一致。 ---
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值