单目3D检测-坐标系、数据集

2023-11-06

0.单目3D检测任务

( c , x , y , z , w , l , h , θ ) (c,x,y,z,w,l,h,\theta) (c,x,y,z,w,l,h,θ)
θ \theta θ: 目标在三维空间中相对于水平方向的航向信息

图1 3D物体的观察角和方位角

1.坐标系转换关系:

在这里插入图片描述

1.1.像素坐标系

o − u , v o-u,v ou,v:

描述物体在数字图像中的位置,单位为像素(pixel),该坐标系以图像顶点作为坐标原点,u、v 轴分别平行于图像坐标系的 x、y 轴。

1.2图象坐标系

O − x , y O-x,y Ox,y:

反映了成像过程中二维-三维的投影关系,通过连续的实际物理量描述物体在图像平面中的位置,单位为毫米,以垂直于图像平面的相机光轴和图像平面的交点作为坐标原点,由于相机光心往往存在偏移,因此该原点通常并不是图像中心

1.3相机坐标系:

O c − X c , Y c , Z c O_c-X_c,Y_c,Z_c OcXc,Yc,Zc: 主要是和其他传感器、物体的位置做区分。

描述空间中目标物体相对于相机的位置而引入的坐标系,单位为米(m),坐标系原点在相机光心,规定垂直于图像平面的相机光轴为Zc轴正方向,垂直向下为Yc正方向,按右手坐标系来建立坐标系.

kitti数据集中相机坐标系如图所示:
在这里插入图片描述

1.4.世界坐标系

O w − X w , Y w , Z w O_w-X_w,Y_w,Z_w OwXw,Yw,Zw:

描述物体在客观世界中的绝对位置,单位为米(m),坐标系原点可以由人自由选取以方便计算,很多论文都将世界坐标系的原点选择为自车坐标系的原点

1.5激光雷达坐标系

    激光雷达坐标系通常定义如下**左图**所示,其中x指向前方,y指向左方,z指向上方。    
    相机坐标系右图,和激光雷达不一样

激光雷达坐标系和相机坐标系

1.6世界坐标系转为相机坐标系

世界坐标系和相机坐标系之间的转换其实是旋转和平移的过程,即先旋转到目标坐标系的方向,然后再平移过去。

设目标坐标系下某一点为 [ x , y , z ] [x,y,z] [x,y,z],该点在当前坐标系下的坐标为 [ x ’ , y ’ , z ’ ] [x’,y’,z’] [x,y,z],变化方式如下:

[ x y z ] \begin{bmatrix}x \\y\\z\end{bmatrix} xyz = R [ x ⋅ y ⋅ z ⋅ ] + T R\begin{bmatrix}x^ ·\\y^·\\z^·\end{bmatrix}+T R xyz +T

其中R为旋转矩阵,T为平移矩阵。在3D目标检测中,一般会写成齐次方程的形式,即
[ x y z 1 ] \begin{bmatrix}x \\y\\z\\1\end{bmatrix} xyz1 = [ R 3 ∗ 3 ) y ⋅ z ⋅ ] [ x ⋅ y ⋅ z ⋅ ] + T \begin{bmatrix}R_3*3)\\y^·\\z^·\end{bmatrix}\begin{bmatrix}x^ ·\\y^·\\z^·\end{bmatrix}+T R33)yz xyz +T

1.7图像坐标和像素坐标之间的转换

在这里插入图片描述

在图像坐标系中坐标(x, y)表示其在图像平面的实际二维物理位置,单位为毫米,而像素坐标系中坐标(u,v) 表示其相对于像素坐标原点平移的像素个数,因此在转换过程中涉及尺度变换和原点平移两个步骤,可得到图像坐标系到像素坐标系的坐标转换关系如下所示

$$

d x dx dx d y dy dy表示单位像素在 x y xy xy轴上的物理长度,写成齐次公式即为
在这里插入图片描述

1.8像素坐标系和世界坐标系之间的转换

在这里插入图片描述

K i n t : K_{int}: Kint: 相机内参矩阵,其值只和相机的结构有关。 f x = f / d x , f y = f / d y f_x = f/d_x ,f_y = f/d_y fx=f/dxfy=f/dy
K e x t : K_{ext}: Kext: 相机外参矩阵,也叫刚体运动中的变换矩阵。其中 R 为旋转矩阵 ( R − 1 = R T ) (R^{-1}= R^T) R1=RT,T为平移向量。 R 、 T R、T RT 则由相机在世界、相机坐标系中的位置姿态决定。

2.Kitti数据集解析

检测物体坐标系

文件结构:

calib文件:

calib文件是相机、雷达、Imu等传感器的矫正数据

P0: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 0.000000000000e+00 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
P1: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 -3.875744000000e+02 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 0.000000000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 0.000000000000e+00
P2: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 4.485728000000e+01 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 2.163791000000e-01 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 2.745884000000e-03
P3: 7.215377000000e+02 0.000000000000e+00 6.095593000000e+02 -3.395242000000e+02 0.000000000000e+00 7.215377000000e+02 1.728540000000e+02 2.199936000000e+00 0.000000000000e+00 0.000000000000e+00 1.000000000000e+00 2.729905000000e-03
R0_rect: 9.999239000000e-01 9.837760000000e-03 -7.445048000000e-03 -9.869795000000e-03 9.999421000000e-01 -4.278459000000e-03 7.402527000000e-03 4.351614000000e-03 9.999631000000e-01
Tr_velo_to_cam: 7.533745000000e-03 -9.999714000000e-01 -6.166020000000e-04 -4.069766000000e-03 1.480249000000e-02 7.280733000000e-04 -9.998902000000e-01 -7.631618000000e-02 9.998621000000e-01 7.523790000000e-03 1.480755000000e-02 -2.717806000000e-01
Tr_imu_to_velo: 9.999976000000e-01 7.553071000000e-04 -2.035826000000e-03 -8.086759000000e-01 -7.854027000000e-04 9.998898000000e-01 -1.482298000000e-02 3.195559000000e-01 2.024406000000e-03 1.482454000000e-02 9.998881000000e-01 -7.997231000000e-01

在这里插入图片描述
其中 b x ( i ) b^{(i)}_ x bx(i)表示相对于参考摄像机0的基准值(以米为单位)。

在这里插入图片描述

Tr_velo_to_cam:( T v e l o c a m T_{velo}^{cam} Tvelocam):从雷达到相机的旋转平移矩阵( R 3 ∗ 4 R^{3*4} R34):
在这里插入图片描述

在这里插入图片描述

label文件

label文件是KITTI中object的标签和评估数据,以“000001.txt”文件为例,包含样式如下:

Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56
Car 0.00 0 1.85 387.63 181.54 423.81 203.12 1.67 1.87 3.69 -16.53 2.39 58.49 1.57
Cyclist 0.00 3 -1.65 676.60 163.95 688.98 193.93 1.86 0.60 2.02 4.59 1.32 45.84 -1.55
DontCare -1 -1 -10 503.89 169.71 590.61 190.13 -1 -1 -1 -1000 -1000 -1000 -10
DontCare -1 -1 -10 511.35 174.96 527.81 187.45 -1 -1 -1 -1000 -1000 -1000 -10
DontCare -1 -1 -10 532.37 176.35 542.68 185.27 -1 -1 -1 -1000 -1000 -1000 -10
DontCare -1 -1 -10 559.62 175.83 575.40 183.15 -1 -1 -1 -1000 -1000 -1000 -10

Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56
第1列(字符串):代表物体类别(type)
总共有9类,分别是:Car、Van、Truck、Pedestrian、Person_sitting、Cyclist、Tram、Misc、DontCare。其中DontCare标签表示该区域没有被标注,比如由于目标物体距离激光雷达太远。为了防止在评估过程中(主要是计算precision),将本来是目标物体但是因为某些原因而没有标注的区域统计为假阳性(false positives),评估脚本会自动忽略DontCare区域的预测结果。

Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56
第2列(浮点数):代表物体是否被截断(truncated)
数值在0(非截断)到1(截断)之间浮动,数字表示指离开图像边界对象的程度。

Truck 0.00 0 -1. -1.57 57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56
第3列(整数):代表物体是否被遮挡(occluded)
整数0、1、2、3分别表示被遮挡的程度

Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56
第4列(弧度数):物体的观察角度(alpha)
取值范围为:-pi ~ pi(单位:rad),它表示在相机坐标系下,以相机原点为中心,相机原点到物体中心的连线为半径,将物体绕相机y轴旋转至相机z轴,此时物体方向与相机x轴的夹角,如图1所示。

Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56
第5~8列(浮点数):物体的2D边界框大小(bbox)
四个数分别是xmin、ymin、xmax、ymax(单位:pixel),表示2维边界框的左上角和右下角的坐标

Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56
第9~11列(浮点数):3D物体的尺寸(dimensions)
分别是高、宽、长(单位:米)

Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56
第12-14列(浮点数):3D物体的位置(location)
分别是x、y、z(单位:米),特别注意的是,这里的xyz是在相机坐标系下3D物体的中心点位置

Truck 0.00 0 -1.57 599.41 156.40 629.75 189.25 2.85 2.63 12.34 0.47 1.49 69.44 -1.56
第15列(弧度数):3D物体的空间方向(rotation_y)
取值范围为:-pi ~ pi(单位:rad),它表示,在照相机坐标系下,物体的全局方向角(物体前进方向与相机坐标系x轴的夹角),如图1所示。

第16列(浮点数):检测的置信度(score)
要特别注意的是,这个数据只在测试集的数据中有(待确认)。

里面的rotation_y和alpha容易让人弄错,下面详细介绍一下
摄像机坐标系和物体坐标系如下:

在这里插入图片描述

rotation_y表示物体的全局方向角,是对物体朝向的一个表示,描述的是目标在现实世界中的朝向,不随目标位置的变化而变化,数值上为车头方向和相机X轴正方向的夹角(顺时针方向为正),路面上的物体肯定都在X_Z上,所以物体的朝向只有Y轴的变化。

alpha表示物体的观察角度,描述的是目标相对于相机视角的朝向,且会随着方位角theta变化而变化,求取方法为在相机坐标系下,以相机原点为中心,相机原点到物体中心的连线为半径,将物体绕相机y轴旋转至相机z轴,此时物体方向与相机x轴的夹角。

																									r_y + pi/2 -theta = alpha +pi/2(即图中紫色的角是相等的)
																										alpha  +  theta  = rotation_y

在这里插入图片描述

参考文献:

[kitti参数](https://zhuanlan.zhihu.com/p/403188378)
3d目标检测中的旋转角/航向角θ应该如何理解?
Rope3D数据集

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单目3D检测-坐标系、数据集 的相关文章

  • 无法加速像素修改的 BufferedImages

    很长一段时间 1 2个月 我一直在试图找到这个特定问题的答案 我无法让我的图像硬件加速 我一直在网上搜索 创建了自己的方法 用键盘敲击我的头 仍然感到疼痛 但没有成功 尽管我讨厌 Java SDK 以外的库 但我尝试了 LWJGL 和 JO
  • 生成球体的顶点

    在 DirectX 移动照明示例中 圆柱体是按以下方式生成的 for DWORD i 0 i lt 50 i FLOAT theta 2 D3DMX PI i 50 1 pVertices 2 i 0 position D3DMXVECTO
  • 网格三角剖分和简化 C++ 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 C 库来三角测量和简化 3D 网格 我的 3D 网格可能很大 大约 300 万个顶点
  • 如何使用 OpenCV Viz 和 ARUCO 转换增强现实应用的 3D 模型

    我正在开发一个简单的基于标记的增强现实应用程序OpenCV 可视化 and ARUCO 我只想在标记上可视化 3D 对象 PLY 格式 我可以使用 ARUCO 毫无问题地运行标记检测和姿态估计 返回旋转和平移向量 我可以在 Viz 窗口中可
  • 如何在 Android 上将 2D 图像转换为 3D? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要将 2D 图像显示为 3D 图
  • 从绘图 3d 图中抓取相机位置

    我正在绘制 3D 图形并想要调整相机位置 对我来说最好的方法是使用查看器 根据需要缩放和旋转场景 然后以 JSON 形式获取相机位置并将其放入我的脚本中 该脚本生成图片以默认实现相同的位置 根据这条推文 https twitter com
  • 受约束景观的程序生成

    我想实现地形的程序生成 经过彻底的研究后 我得出的结论是 应该使用梯度 相干 噪声生成算法之一来实现 例如 Perlin 噪声算法 然而 我不希望生成是完全随机的 我想应用一些限制 例如哪里应该是山脉 或者哪里应该是低地等 问题 例如 我有
  • WP7 XNA 显示 3D FBX 模型

    我只是初学者 很抱歉我的愚蠢问题 我的模型看起来像这样 http img265 imageshack us img265 8291 clipboard01ap jpg http img265 imageshack us img265 829
  • 使用 3d 变换矩阵

    在人工智能课程中 我们有一个机器人 它的手臂有 7 个关节 每个关节可以向不同的方向旋转 我需要知道最后的结局在哪里 我一直在尝试进行 3d 矩阵乘法 它适用于一个关节 但一旦我添加另一个关节 它就与我使用 Java3D api 制作的模型
  • SceneKit 修改 3D 对象并导出文件

    在我的应用程序中 我使用 SceneKit Framework 在 SCNView 中显示 3D 对象 并导出修改后的文件 并进行一些小的更改 如颜色 温度等 但在将其导出到文档文件夹后 我得到了原始文件 在这里我可以显示 3D 对象并对其
  • 3d 表面的凸包算法 z = f(x, y)

    我有一个以一组三元组 x i y i z i 形式给出的 3D 表面 其中 x i 和 y i 大致位于网格上 并且每个 x i y i 都有一个关联的 z i 值 典型的网格是20x20 我需要在给定的公差范围内找到哪些点属于曲面的凸包
  • 将球体上的 3d 点转换为 UV 坐标

    我在球体上有一个 3d 点 想要将其转换为球体纹理上的 UV 点 有人可以指出正确的方向吗 我可以采用纯数学解决方案 Edit 我目前有这个 它不会返回正确的 UV 坐标 p 是球体上的 3d 点 mesh position 是球体的位置
  • 编写每个三角形/面具有纯色的 GLSL 片段着色器的方法

    我有顶点和三角形数据 其中包含每个数据的颜色triangle 面 不是每个顶点 即单个顶点由多个面共享 每个面可能具有不同的颜色 我应该如何在 GLSL 中解决这个问题以获得每个的纯色分配face正在渲染 通过平均顶点相邻多边形的颜色来计算
  • 3D 游戏的 Libgdx 渲染层

    在我的第一个 3D 游戏中 我现在想要渲染地板 它实际上是一个平面 不是 libgdxPlane on y 0 我想添加一个Texture到它 这样我就可以在每个级别有不同的楼层 现在我的问题是 创建和渲染这种纹理地板的最佳方法是什么 我考
  • Direct3D 中的矩阵多阶

    关于在 Direct3D 中乘法矩阵以获得结果 我收到了两个相互矛盾的答案 教程确实规定从左到右相乘 这很好 但这不是我想象的方式 这是一个例子 OpenGL 从上到下阅读 GLRotatef 90 0f GLTranslatef 20 0
  • 可点击的精灵标签?

    我一直在玩精灵文本标签 更具体地说是这个例子 http stemkoski github io Three js Sprite Text Labels html http stemkoski github io Three js Sprit
  • 在 Three.js 中将贝塞尔曲线转换为平面道路

    我试图根据之前计算得到的一些贝塞尔曲线在 Three js 中绘制一条弯曲的道路 问题是我找不到转换曲线序列的方法 一条从上一条曲线的末尾开始 到一个曲面 我有一个 3D 场景 其中有一些汽车 一条用飞机创建的道路 并且绘制了即将到来的道路
  • 一次性渲染阴影

    考虑到阴影投射的成本 我想知道对于动态定位的静态对象 例如 程序城市 是否有一个功能或可能 实验性的方法可以在 Three js 中仅渲染一次阴影贴图 甚至在 webgl 中 因此 结果可以在静态对象的下一帧中免费使用 仅当物体移动时才会进
  • 如何创建热图来说明控制发散调色板中心颜色位置的网格差异?

    我有两个人脸 3D 网格 我希望使用热图来说明差异 我想使用红蓝发散色阶 我的数据可以查到here https github com Patricklv How to create heatmap illustraing 3D mesh d
  • 如何在 GTX 560 及更高版本上使用 OpenGL 进行立体 3D?

    我正在使用在 Windows 7 上运行的开源触觉和 3D 图形库 Chai3D 我重写了该库以使用 Nvidia nvision 执行立体 3D 我将 OpenGL 与 GLUT 一起使用 并使用 glutInitDisplayMode

随机推荐

  • 可重复读输入流的问题

    为了统一签名 需要在controller之前读json输入流数据 controller的参数绑定是直接读inputStream 但一般httpServletRequest只能读一次 解决方法是 在filter中直接读一次inputStrea
  • 【7-4 h0018.金币 (20 分)】思路清晰,c++实现,分分钟解决

    7 4 h0018 金币 20 分 国王以金币支付给他忠诚的骑士 在他服役的第一天 骑士会得到一枚金币 在接下来的每两天 服务的第二和第三天 骑士会收到两枚金币 在 在接下来的三天里 第四 第五和第六天 骑士每一天都会得到三枚金币 在接下来
  • HTML中怎么设置图片的位置和大小

    其他的也不多废话了直接上代码 img src fan jpg width 800 height 800
  • python批量爬取公众号文章

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 版权归原作者所有 如有问题请及时联系我们以作处理 作者 舴艋的舟 PS 如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群
  • js逆向:rpc远程调用

    websocket python代码 服务端 先开启这个 import asyncio import websockets connected set async def server websocket connected add web
  • Linux系统连接华为oceanstor数据存储

    Linux系统连接华为oceanstor数据存储 一 登录检查oceanstor数据存储 二 配置linux使用的数据储存 1 创建LUN 2 创建Lun组 3 创建主机 4 创建主机组 5 创建映射关系 三 Linux客户端操作 1 查看
  • 「建议收藏」Pycharm使用教程(非常详细,非常实用)

    Pycharm使用教程 1 Jetbrains家族和Pycharm版本划分 pycharm是Jetbrains家族中的一个明星产品 Jetbrains开发了许多好用的编辑器 包括Java编辑器 IntelliJ IDEA JavaScrip
  • Atcoder Beginner Contest 300

    A N choice question AC代码 include
  • 【Java基础11】面向对象、面向过程、类、对象、封装

    一 面向对象和面向过程 面向对象 以对象为单位 通过调度组合不同的对象来完成某一个功能 面向过程 以步骤为单位 一步一步完成某一个具体的功能 二 类 1 类的定义 class 类名 在类中定义属性 方法 class student Stri
  • pytorch 多个模型 求平均

    from collections import OrderedDict import torch from models faceland d import FaceLanndInference d if name main model F
  • Vite 打包体积分析,性能提升不再困扰

    其实这个问题最好改成 rollup 打包体积分析 但是为什么我会取这个名字呢 其实这主要是由于我的习惯性引起的 因为太久没用一个东西 如果遇到问题 肯定会去围绕它自身去进行搜索 例如遇到 vite 打包分析相关问题 就会在 google 搜
  • MinIO从信息泄漏到RCE

    文章目录 信息泄露 漏洞利用 漏洞分析 漏洞修复 RCE 漏洞分析 参考文章 信息泄露 漏洞利用 如果MinIO以集群方式部署 存在信息泄露漏洞 攻击者可以通过HTTP请求获取目标进程的所有环境变量 包括MINIO SECRET KEY和M
  • 计算机网络——分层的体系结构(OSI模型/五层协议栈)

    一 基础知识 计算机网络 计算机网络是一个非常复杂的系统 涉及许多组成部分 主机 hosts 路由器 routers 各种链路 links 应用 applications 协议 protocols 硬件 软件 网络体系结构的特点 1 网络体
  • [高级数据结构C++] 树状数组进阶(求逆序对的个数)

    算法竞赛 file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大二在读 brief 一直在算法竞赛学习的路上 copyright 2023 9 COPYRIGHT 原创技术
  • ROS模型构建、定位导航

    利用URDF或者Xacro文件 以XML的方式描述小车底盘 camera laser Kinect等基本机器人结构 通过Gazebo或Rviz将文件解析为图形化的机器人模型 其中很多代码可以从网络上找到 主要注意参数和坐标系的设置 例如在K
  • CSS之美化网页 span标签 与 div标签

    CSS高级特性 我们大家在学习CSS之前 肯定已经接触过了HTML了吧 那么我们为什么还要学习CSS呢 首先哈 CSS可以有效的传递页面信息 使用CSS美化过的页面文本 非常漂亮 美观 并且可以突出重点 使用户看到页面的主要内容 具有良好的
  • UE4笔记-进程/线程/网络/IO模块的相关问题记录

    吐槽 如果有Qt的开发经验 会发现其实在比较底层编程理念UE4和Qt极其相识 很多类名和用法甚至都是相同的 Q 创建线程类 UE4文档没有特别介绍关于线程模块的文章 这里自己简单记录一下 备查 目前来说UE4的线程模块还是比较简陋的 命名风
  • 如果一个节点重新安装了,处理办法

    1 安装操作系统 如果可以最好所有的包都安装上 创建用户 组 更改核心参数 bash profile 2 配制ssh 保证新的结点和原有的节点互信 3 安装asmlib 然后用 etc init d oracleasm scandisks
  • Mybatis中的动态SQL

    Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能 它存在的意义是为了解决拼接SQL语句字符串时的痛点问题 一 if 单独使用较少 if标签可通过test属性 即传递过来的数据 的表达式进行判断 若表达式的结果为t
  • 单目3D检测-坐标系、数据集

    0 单目3D检测任务 c x y z w