什么是 KITTI 数据集?
KITTI 是由卡尔斯鲁厄理工学院和芝加哥丰田技术学院开发的自动驾驶数据集。它是计算机视觉研究中使用的图像和 LIDAR 数据的集合,例如立体视觉、光流、视觉里程计、3D 对象检测和 3D 跟踪。
该数据集可在 http://www.cvlibs.net/datasets/kitti/ 免费下载。
在本文中,我们将探讨 KITTI 里程计数据集的用法。KITTI 数据集是用于评估视觉里程计算法性能的基准数据集。它包含从移动车辆记录的立体图像序列的集合,以及车辆运动的相应地面实况数据。
本文将成为 KITTI 视觉里程计系列的第 1 部分。我们首先回顾执行立体深度估计和视觉里程计任务所需的计算机视觉的一些基础知识,并演示如何在 Python 中使用 OpenCV 实现这些原理。
设置数据集
下载我们打算使用的 velodyne 激光数据(https://www.cvlibs.net/datasets/kitti/user_login.php)和灰度数据(https://www.cvlibs.net/datasets/kitti/user_login.php),你必须注册并登录才能下载数据集。
下载数据集后,请在包含两个数据集的文件夹的同一路径中创建一个 python 文件。
使用 Python 代码探索数据集
导入所需的依赖项——OpenCV、matplotlib.pyplot、numpy、pandas、os。
现在我们将看一下从数据集中加载轨迹序列之一的地面实况姿势。
poses = pd.read_csv('../dataset/poses/00.txt', delimiter=' ', header=None)
print('Size of pose dataframe:', poses.shape)
poses.head()
![82514cec2c45240e9e236934c2445a60.jpeg](https://i-blog.csdnimg.cn/blog_migrate/7d68ef4b9fad63aa669a3a7eba4751ab.jpeg)
该数据集包含 4541 行和 12 列,其中 4541 是图像帧数,12 是展平 3x4 变换矩阵(外部参数)的结果。该矩阵存储左立体相机相对于全局坐标系的 3x3 旋转矩阵和 3x1 平移向量。
![c05a3f7f6bbd3919a7b56e3c1c8ffca7.jpeg](https://i-blog.csdnimg.cn/blog_migrate/eaaf0882bedd20e95a5483ded8b54321.jpeg)
3x4变换矩阵[R|t]存储了相机当前坐标系与相机初始位置坐标系之间的变换。
![ec6678b6a1b61cf4d0a98d9128a044ee.jpeg](https://i-blog.csdnimg.cn/blog_migrate/261c69eac1a5c7dc63fe763e63fb1f37.jpeg)
我们可以通过查看第一个姿势并观察旋转分量是同一的,平移矢量在所有轴上都为零来验证这一点。
first_pose = np.array(poses.iloc[0]).reshape((3,4)).round(2)
second_pose = np.array(poses.iloc[1]).reshape((3,4)).round(2)
print("First pose:\n", first_pose)
print("Second pose:\n",second_pose)
![1e871591092776fe771e7c4a572083df.jpeg](https://i-blog.csdnimg.cn/blog_migrate/d72d2728eb947711cb767ccb880a9a4b.jpeg)
现在我们可以存储所有地面实况姿势,因此我们可以使用它作为姿势序列获得轨迹图,还可以访问这个地面实况数组,其中包含相机相对于全局坐标系的所有位置和方向。
ground_truth = np.zeros((len(poses), 3, 4))
for i in range(len(poses)):
ground_truth[i] = np.array(poses.iloc[i]).reshape((3, 4))
%matplotlib widget
fig = plt.fi