一、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轴的夹角
r_y + pi/2 -theta = alpha +pi/2(即图中紫色的角是相等的)
所以alpha = r_y - theta
第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个数:检测的置信度
二、kitti数据集,calib解析
要将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投影到编号为2的相机(参考相机)坐标系中
P2 * R0_rect *Tr_velo_to_cam * x :是将Velodyne坐标中的点x投影到编号为2的相机(参考相机)坐标系中,再投影到编号为2的相机(左彩色相机)的照片上
注意:所有矩阵都存储在主行中,即第一个值对应于第一行。 R0_rect包含一个3x3矩阵,需要将其扩展为4x4矩阵,方法是在右下角添加1,在其他位置添加0。 Tr_xxx是一个3x4矩阵(R | t),需要以相同的方式扩展到4x4矩阵!
通过使用校准文件夹中的3x4投影矩阵,可以将相机坐标系中的坐标投影到图像中,对于提供图像的左侧彩色相机,必须使用P2。rotation_y和alpha之间的区别在于rotation_y直接在相机坐标中给出,而alpha也会考虑从相机中心到物体中心的矢量,以计算物体相对于相机的相对方向。 例如,沿着摄像机坐标系的X轴面向的汽车,无论它位于X / Z平面(鸟瞰图)中的哪个位置,它的rotation_y都为 0,而只有当此车位于相机的Z轴上时α才为零,当此车从Z轴移开时,观察角度α将会改变。
三、原文(我不关注的部分就随便翻译了)
摘要 - 我们提出了从大众旅行车捕获的新型数据集,用于移动机器人和自动驾驶研究。总之,我们使用各种传感器模式(如高分辨率彩色和灰度立体相机,Velodyne 3D激光扫描仪和高精度GPS / IMU惯性导航系统),以10-100 Hz记录6小时的交通情景。这些场景是多样的,捕捉真实世界的交通情况,从高速公路到农村到有许多静态和动态物体的城市内景。我们的数据是经过校准,同步和时间戳的,我们提供校正和原始图像序列。我们的数据集还包含3D tracklets形式的对象标签,并提供立体,光学流,物体检测和其他任务的在线基准。本文介绍了我们的录制平台,数据格式和我们提供的实用程序。
KITTI数据集在德国卡尔斯鲁厄市内外驾驶时从一个移动平台(图1)录制(图2)。 它包括来自组合GPS / IMU系统的相机图像,激光扫描,高精度GPS测量和IMU加速。该数据集的主要目的是推动计算机视觉和自动驾驶算法的发展[1] - [7]。虽然我们的介绍性论文[8]主要关注基准,它们的创建和用于评估最先进的计算机视觉方法,但我们通过提供关于原始数据本身的技术细节来补充这些信息。我们给出了关于如何访问数据和评论传感器限制和常见隐患的准确说明。数据集可以从http://www.cvlibs.net/datasets/kitti下载。 对于相关工作的回顾,读[8]
A、数据描述
a) image:
使用8位PNG文件,彩色和灰度图像都以无损压缩进行存储。 发动机罩和天空区域已被裁剪。 为了简化对数据的处理,我们还提供修正的图像(rectifiedimages)。 修正后图像的大小取决于校准参数,平均大约为50万像素。 修正前的原始图像也可以使用。
b) OXTS (GPS/IMU):
对于每一帧,我们将30个不同的GPS /IMU值存储在文本文件中:地理坐标包括高度,全球定位,速度,加速度,角速率,精度和卫星信息。 加速度和角速率都是使用两个坐标系指定的,一个坐标系与车体(x,y,z)相连,另一个坐标系映射到该位置的地表切面(f,l,U)。 我们偶尔会遇到与OXTS设备短时间(约1秒)的通信中断,我们为此线性插入所有值,并将最后3个条目设置为’-1’以指示缺失的信息。 dataformat.txt提供了更多细节。 转换实用程序在开发工具包中提供。
c) Velodyne:
为了提高效率,Velodyne扫描存储为浮点二进制文件,使用提供的C ++或MATLAB代码很容易解析。 每个点以其(x,y,z)坐标和附加反射值(r)存储。 虽然每次扫描的点数并不固定,但平均而言,每个文件/帧的大小为~1.9MB,对应于〜120,000个3D点和反射率值。 请注意,Velodyne激光扫描仪围绕其垂直轴(逆时针)连续旋转,可以使用时间戳文件将其考虑在内。
B. Annotations
对于参考摄像机视野内的每个动态对象,我们以3D Velodyne坐标表示的3D边界框轨迹形式提供注释。 我们定义了类别’车’,‘货车’,‘卡车’,‘行人’,‘人(坐)’,‘骑车者’,‘电车’和’杂项’。 tracklets存储在date_drive_tracklets.xml中每个对象都被分配一个类和它的3D尺寸(高度,宽度,长度)。 对于每一帧,我们都提供了三维物体的平移和旋转,如图7所示。请注意,我们只提供偏航角,而其他两个角度假定接近零。此外,指定了遮挡和截断的级别。 该开发工具包包含用于使用boost ::serialization 1库读取和写入tracklets的C ++ /MATLAB代码。
为了进一步了解我们数据集的属性,我们提供了包含注释对象的所有序列的统计数据。在图8中示出了两个主要类别“汽车”和“行人”的对象的总数和对象方位。对于每个对象类别,每个图像的对象标签的数量和所捕获的序列的长度被显示在 图9.由GPS / IMU系统记录的我们平台的自运动以及有关序列长度和对象数量的统计数据在图10中显示了整个数据集。
C. Development Kit
KITTI网站上提供的原始数据开发工具包2包含带有C ++包装器的MATLA演示代码和一个readme.txt文件,它提供了更多细节。 在这里,我们将简要讨论最重要的特征。在运行脚本之前,需要使用脚本make.m构建用于将tracklets读入MATLAB结构和单元阵列的mex包装器readTrackletsMex.cpp。 它从包含tracklet对象序列化的cpp文件夹中包装文件tracklets.h。 在C ++环境中工作时,该文件也可以直接与之连接。
脚本run_demoTracklets.m演示了如何从XML文件中读取3D边界框tracklets并将其投影到摄像机的图像平面上。 3D Velodyne点云在图像平面中的投影在run_demoVelodyne.m中演示。 参见图6的说明。
脚本run_demoVehiclePath.m显示如何使用GPS / IMU数据读取和显示3D车辆轨迹。 它利用convertOxtsToPose(),它将GPS / IMU测量值作为输入,并输出车辆在欧几里德空间的6D姿态。 对于这种转换,我们利用墨卡托投影[10]
地球半径r≈6378137米,标度s = (见上图),(lat,lon)地理坐标。 lat 0表示第一帧坐标的纬度并唯一确定墨卡托比例。
loadCalibrationCamToCam()函数可用于读取四个视频传感器的内部和外部校准参数。其他3D刚体转换可以使用loadCalibrationRigid()进行分析。
D. Benchmarks
除了原始数据外,我们的KITTI网站还提供了多种计算机视觉和机器人任务(如立体声,光流,视觉测距,SLAM,三维物体检测和三维物体追踪)的评估基准。 有关基准和评估指标的详细信息,请参阅[8]。
IV. 传感器校准
我们注意到所有传感器都经过了仔细的同步和校准。 为了避免随时间漂移,我们在录制后每天都校准传感器。 请注意,即使传感器设置没有在两者之间改变,数字差异也是可能的。坐标系定义如图1和图3所示,即:
符号:在下文中,我们用小写字母(a)编写标量,用粗体小写(a)编写矢量,用粗体首字母(A)编写矩阵。 从坐标系统a到坐标系统b的三维刚体变换将用 表示,T表示“变换”。
A. Synchronization同步
为了同步传感器,我们使用Velodyne 3D激光扫描仪的时间戳作为参考,并将每个旋转视为一个框架。 我们在连续旋转的扫描仪底部安装了一个簧片触点,面向前方时触发相机。这最大限度地减少了由动态对象引起的范围和图像观察的差异。 不幸的是,GPS / IMU系统不能以这种方式同步。 相反,由于它提供100 Hz的更新,因此我们会收集特定帧的激光扫描仪时间戳最接近的时间戳信息,导致GPS / IMU与摄像机/ Velodyne数据包之间的最差时间差为5 ms 。 请注意,所有时间戳都可以通过插值方式随时轻松获得定位信息。所有的时间戳已经使用系统时钟记录在主机上。
B. Camera Calibration相机校准
为了本质上和外在地校准摄像机,我们使用[11]中提出的方法。 请注意,所有相机中心都是对齐的,即它们位于相同的x / y平面上。 这很重要,因为它可以让我们共同纠正所有图像。
每天的校准参数按照主要顺序存储在calib_cam_to_cam.txt中,使用以下标记:
这里,i∈{0,1,2,3}是相机索引,其中0代表左灰度,1代表右灰度,2代表左彩色,3代表右边彩色相机。 请注意,变量定义符合我们用于变形图像的OpenCV库。 在使用同步和纠正的数据集时,只有具有"rect"下标的变量是相关的。 请注意,由于枕形失真效应,图像已被裁剪,使得修整后的图像尺寸小于1392×512像素的原始尺寸。
x是3维空间中的点,x =(x,y,z,1)T
第i个相机图像中的点y =(u,v,1)T
二者投影关系为:
第i个投影矩阵。 这里,(竟然不会插入公式,就是上面这个矩阵右上角的那个"bx(i)")表示相对于参考相机0的基线(??)(以米为单位)。注意,为了将参考相机坐标中的3D点x投影到第i像平面上的点y,旋转矩阵Rrect(0)也必须考虑参考摄像机 的情况:
这里Rrect(0)被扩展成4×4的矩阵,增加了第四个0行和第四个0列,Rrect(0)(4,4)这个元素为1。
C. Velodyne and IMU Calibration
通过使用[11]初始化刚体变换,我们已经注册了Velodyne激光扫描仪相对于参考摄像机坐标系(摄像机0)。 接下来,我们根据50个手动选择的对应关系的欧几里德距离以及KITTI立体基准测试中3个顶级立体方法的视差误差的稳健测量,优化了误差标准[8]。 使用Metropolis-Hastings抽样进行优化。
————————————————
版权声明:本文为CSDN博主「jilijilicao」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cuichuanchen3307/article/details/80596689