本文介绍在3D目标检测中,理解和使用KITTI 数据集,包括KITTI 的基本情况、下载数据集、标签格式解析、点云转图像、点云转BEV。
目录
1、KITTI数据集中3D框可视化的效果
2、先看个视频,了解KITTI 的基本情况
3、来到KITTI官网,下载数据集
4、标签格式
5、标定参数解析
6、点云3D结果-->图像3D结果(坐标系转换)
6、图像3D结果-->点云3D结果(坐标系转换)
8、点云3D结果-->图像BEV鸟瞰图结果(坐标系转换)
1、KITTI数据集中3D框可视化的效果
2、先看个视频,了解KITTI 的基本情况
KITTI 数据集介绍
3、来到KITTI官网,下载数据集
The KITTI Vision Benchmark Suite (cvlibs.net)
下载数据需要注册账号的,获取取百度网盘下载;文件的格式如下所示
图片格式:xxx.jpg
点云格式:xxx.bin(点云是以bin二进制的方式存储的)
标定参数:xxx.txt(一个文件中包括各个相机的内参、畸变校正矩阵、激光雷达坐标转到相机坐标的矩阵、IMU坐标转到激光雷达坐标的矩阵)
标签格式:xxx.txt(包含类别、截断情况、遮挡情况、观测角度、2D框左上角坐标、2D框右下角坐标、3D物体的尺寸-高宽长、3D物体的中心坐标-xyz、置信度)
4、标签格式
这时可以看看这个视频:
Nuscenes、KITTI等多个BEV开源数据集介绍
5、标定参数解析
然后看一下标定参数;P0-P3:是各个相机的内参矩阵;
R0_rect: 是左相机的畸变矫正矩阵;
Tr_velo_to_cam:是激光雷达坐标系 转到 相机坐标系矩阵;
Tr_imu_to_velo: 是IMU坐标转到激光雷达坐标的矩阵
6、点云数据-->投影到图像(坐标系转换)
当有了点云数据信息,如何投影到图像中呢?本质上是一个坐标系转换的问题,流程思路如下:
- 已知点云坐标(x,y,z),当前是处于激光雷达坐标系
- 激光雷达坐标系 转到 相机坐标系,需要用到标定参数中的Tr_velo_to_cam矩阵,此时得到相机坐标(x1,y1,z1)
- 相机坐标系进行畸变矫正,需要用到标定参数中的R0_rect矩阵,此时得到相机坐标(x2,y2,z2)
- 相机坐标系转为图像坐标系,需要用到标定参数中的P0矩阵,即相机内存矩阵,此时得到图像坐标(u,v)
看一下示例效果:
6、图像数据-->投影到点云(坐标系转换)
当有了图像RGB信息,如何投影到点云中呢?本质上是一个坐标系转换的问题,和上面的是逆过程,流程思路如下:
- 已知图像坐标(u,v),当前是处于图像坐标系
- 图像坐标系 转 相机坐标系,需要用到标定参数中的P0逆矩阵,即相机内存矩阵,得到相机坐标(x,y,z)
- 相机坐标系进行畸变矫正,需要用到标定参数中的R0_rect逆矩阵,得到相机坐标(x1,y1,z1)
- 矫正后相机坐标系 转 激光雷达坐标系,需要用到标定参数中的Tr_velo_to_cam逆矩阵,此时得到激光雷达坐标(x2,y2,z2)
7、可视化图像2D结果、3D结果
先看一下2D框的效果:
3D框的效果:
9、点云3D结果-->图像BEV鸟瞰图结果(坐标系转换)
思路流程:
- 读取点云数据,点云得存储格式是n*4,n是指当前文件点云的数量,4分别表示(x,y,z,intensity),即点云的空间三维坐标、反射强度
- 我们只需读取前两行即可,得到坐标点(x,y)
- 然后将坐标点(x,y),画散点图
BEV鸟瞰图效果如下:
程序2:
BEV图像示例效果
在BEV视图中画框,可视化结果:
后面还会介绍Nuscenes、Waymo等3D数据集。