参考
4,KITTI数据集
5,KITTI数据集的使用——雷达与相机的数据融合(讲解了坐标系转换的公式)
image_00:左侧灰度相机图像序列
image_01:右侧灰度相机图像序列
image_02:左侧彩色相机图像序列
image_03:右侧彩色相机图像序列
oxts:GPS/IMU位姿相关信息序列
velodyne_points:激光雷达数据序列
image_00 _01 ... 文件夹下:
data 图片文件
timestamps时间戳文件
oxts文件夹下:
数据文件
数据介绍
时间戳文件
velodyne_points文件夹
data: 包含有雷达扫描到的数据,点云形式,每个点以 (x,y,z,i) 格式存储,i为反射值
时间戳文件:start+end/2中心时间文件 start文件 end文件
calib文件:
calib_cam_to_cam.txt
,包含各相机的标定参数
- S_xx: 1x2 矫正前xx号相机的图片尺寸
- K_xx: 3x3 矫正前xx号相机的标定参数
- D_xx: 1x5 矫正前xx号相机的畸变系数
- R_xx: 3x3 外参,xx号相机的旋转矩阵
- T_xx: 3x1 外参,xx号相机的平移矩阵
- S_rect_xx: 1x2 矫正后XX号相机的图片尺寸
- R_rect_xx: 3x3 旋转矩阵,用于矫正xx号相机,使得图像平面共面(原话是make image planes co-planar)。
- P_rect_0x: 3x4 投影矩阵,用于从矫正后的0号相机坐标系 投影到 X号相机的图像平面。
这里只用到最后两个矩阵R_rect和P_rect
calib_velo_to_cam.txt
,从雷达坐标系到0号相机坐标系的转换
- R: 3x3 旋转矩阵
- T: 3x1 平移矩阵
- delta_f 和delta_c 已被弃用
由此可以得出从雷达坐标系变换到xx号相机的图像坐标系的公式:
设X为雷达坐标系中的齐次坐标,Y为对应在xx号相机的图像坐标系的齐次坐标,则
- (R|T) : 雷达坐标系 -> 0号相机坐标系
- R_rect_00: 0号相机坐标系 -> 矫正后的0号相机坐标系
- P_rect_0x: 矫正后的0号相机坐标系 -> x号相机的图像平面
解读devkit
官网提供的样例代码中 run_demoVelodyne.m 实现了将雷达点云投影到相机图像
代码流程
- 从所给路径中读取标定文件,获取具体矩阵数值
- 根据上述公式,计算投影矩阵 P_velo_to_img,即 Y = P_velo_to_img * X
- 从所给路径中读取相机图片,并加载雷达的点云数据。由于只做展示用,为了加快运行速度,对于雷达点云,每隔5个点只保留1个点
- 移除那些距离雷达5米之内(雷达的x方向)的点 (猜测这些点落在相机和雷达之间,故不会出现在图像平面上)
- 作投影计算,得到投影到二维图像上的点
6.在图像上画出投影后的点,按照深度(雷达点的x方向值)确定颜色,彩色则是暖色越近,冷色越远;灰度则是深色越近,浅色越远。