如何将一个向量投影到一个平面上_CameraLidar投影:2D3D导航
图1.图像上的激光雷达点
激光雷达和照相机是用于感知和理解场景的两个基本传感器。他们建立周边环境模型、提供检测和确定其他对象位置的方法,从而为机器人提供了安全导航所需的丰富语义信息。许多研究人员已开始探索用于精确3D对象检测的多模式深度学习模型。Aptiv开发的PointPainting [1]算法是一个非常有趣的例子。
那么为什么要将这2个传感器进行融合?
在捕获更密集和更丰富的表现方面,相机的性能优于LIDAR。从图2中,仅看稀疏点云,就很难正确地将黑匣子识别为行人。但是注意RGB图像,即使人朝后,我们也可以很容易地看出物体看起来像行人。除此之外,其他的想通信号灯和道路标志都是激光雷达很难解决的问题,但是可以很简单的通过视觉图像进行处理。
图2.行人检测的RGB和点云表示
相反,激光雷达可以很好提取距离信息,但是使用相机以标准透视图进行测量距离则非常困难。
通过融合来自两个传感器的信息,利用两个传感器的优势,克服各自的局限性。搭载多个传感器还可以实现冗余,这是是在传感器发生故障时的重要保障。
目的
在本文中,我们将进一步探讨如何同时利用LIDAR和相机数据,以创建更加丰富和准确的环境3D场景。
我们将使用Kitti 3D对象检测数据集 作为参考。请参阅Kitti Dataset网站或文件夹下Github 上的代码 以了解数据格式。
剩下的部分,我们首先需要讨论传感器安装相关的问题,通过Kitti对象检测数据集来了解数据结构,并通过如何进行校准以了解校准矩阵。接下来,将详细介绍3D-2D和2D-3D投影映射,最后以可视化的方式显示激光雷达与摄像机的数据。所有inline文本格式都是函数,变量或代码中的文件 。
传感器设置,校准和坐标系(KITTI)
图3. Kitti ego车辆和传感器位置
在开始分析之前,需要了解数据采集过程中传感器的相对位置。这是在一个坐标系到另一个坐标系之间执行任何转换的必要信息。请注意,每个传感器都有其自己的坐标框架,如图3所示。
硬件规格
Kitti车辆上的几个传感器包括激光雷达,灰度相机,彩色相机和IMU。但是,我们只关注:
• 凸轮0:灰度摄像机,立体声装备的左摄像机。这也是参考相机
• 摄像头2:RGB彩色摄像头,立体声装备的左摄像头
• Velo:64光束Velodyne激光扫描仪
坐标系:车辆面向左,左坐标系(图3)
我们有什么数据?
请参阅以data/readme.txt获取更多详细信息。
激光雷达点云fileid.bin:2D数组[num_points, 4]。
对象实例fileid_label.txt:对于每一行,每个对象的注释都有15列,代表相机坐标中的某些元数据和3D框属性:
type | truncation | visibility | observation angle | xmin | ymin |xmax | ymax | height | width | length | tx | ty | tz | roty
一些实例type被标记为“ DontCare”,表明它们没有被标记。
RGB图像fileid_image.png:来自摄像机2的图像
校正参数
fileid_calib.txt
校准参数以行优先顺序存储。包含3x4投影矩阵参数,这些参数描述了世界坐标系上3D点到图像中2D点的映射。
校准过程在[2]中说明。需要注意的是将校准cam0用作参考传感器。激光扫描仪相对于参考相机坐标系进行配准。R_ref2rect在校准过程中也已经被考虑,以校正摄像机之间的平面。
它包含以下信息:
• P_rect[i]:从校正参考相机框架到投影的投影变换cam[i]。注意,bx [i]表示相对于参考摄像机0的基线。
• R0_rect :旋转以说明参考摄像机中点的校正。
• Tr_velo_to_cam:从激光雷达到参考相机的欧几里德变换cam0。
框间投影
从线性代数的角度,投影矩阵在以均匀的坐标中表示为一个线性变换,它通过从一个向量空间到另一个向量空间x'= Px的乘法来改变点。可以对其进行合成以遍历不同的坐标系。
在这种情况下,转换矩阵主要表示传感器之间的刚体转换以及从3D到2D点的透视投影。
从激光雷达到摄像机2的投影project_velo_to_cam2:假设我们要将Velodyne点转换为摄像机坐标则:
proj_mat = P_rect2cam2 *R_ref2rect *P_velo2cam_ref
注意,乘法应在同构坐标中执行以简化计算。要转换为像素坐标,只需通过z坐标进行归一化即可。
图4.转换步骤
从摄像机到激光雷达坐标的投影:3D框的注释在摄像机坐标中给出。如果要将相机框架中的框形顶点转换为激光雷达,则project_cam2_to_velo需要计算逆刚性变换并向后变换。
R_ref2rect_inv = np.linalg.inv(R_ref2rect)P_cam_ref2velo = np.linalg.inv(velo2cam_ref)
proj_mat = R_ref2rect_inv * P_cam_ref2velo
图片框
方框通常用于代表其他特工和行人。通过定义8个顶点将对象完全定位为盒模型,以便获取和注释。框框可能不是最好的代表行人,因为行人不拘泥。
还有其他一些表示对象的方法,其中包括值得考虑的关键点,cad模型和分段蒙版。
图5.在图像平面上显示框
我们可以得到盒子的位置(t),盒子在摄像机坐标系中的偏航角(R)(假设没有俯仰和滚动)以及尺寸:高度(h),宽度(w)和长度(l)。请注意,在相机坐标中标注了对象的3D框!有了这些信息,我们可以轻松地将盒子模型转换为相机空间中的确切位置。
考虑上面的图5,每个盒子实例的原点都设置在底部和中央,对应于与自我车辆和地面相同的高度。要将3D框投影到图像:
• 首先,我们得到在照相机的方块经由坐标[R | T],其中R = roty和t = (tx, ty, tz)从注释中label.txt
• 接下来,将透视投影应用于图像平面 P_rect2cam2
图片中的PointCloud [3D-2D]
图6.图像上激光雷达点的颜色编码范围值
如果我们想以2D方式处理数据,则可以通过将点云投影到图像上以使用相应的激光雷达范围值(z)构造稀疏深度图表示来收集更多信息。稀疏性取决于映射到像素的激光雷达光束的数量。
与从摄像机预测深度图相比,稀疏深度图是方便且准确的范围数据。在伪Lidar ++中 描述了使用稀疏深度图来增强基于单眼的检测的工作。
要将点映射到像素,这是从激光雷达到像平面的投影变换。
• 计算投影矩阵project_velo_to_cam2。
• 投影指向图像平面。
• 删除图像边界之外的点。
PointCloud [2D-3D]中的框
激光雷达空间的可视化和工作在空间推理方面提供了最全面的理解。此外,如果需要,我们可以轻松地更改相机视角以从不同角度观察环境。
图7. 3D盒子投影到点云上
在此示例中,我们不考虑从360度旋转的LIDAR扫描仪绘制所有扫描点,而是仅考虑位于摄像机视场内的点云,如图4所示。接下来,我们只需要应用逆变换来使用投影将相机坐标系中的3D框投影到LIDAR 。
步骤如下:
• 计算投影矩阵project_velo_to_cam2。
• 投影指向图像平面。
• 删除图像边界之外的点。
• 将3D盒子投影到LIDAR坐标
结束
了解如何将数据从一个传感器转换到另一个传感器对于开发我们算法的性能至关重要。例如,假设我们正在研究基于单眼的3D检测器,则在将3D框注册到激光雷达点时,激光雷达点可以对检测器的精度进行完整性检查。
但是,当涉及传感器融合本身时,该任务仍然是一个挑战,因为多模式传感器在数据存储和处理方式上有一些差异,如前所述。这使得在运行时很难在几何上和时间上对齐。
参考
[1] Sourabh Vora,Alex H. Lang,Bassam Helou和Oscar Beijbom。点画:用于3D对象检测的顺序融合,2019年
[2] A. Geiger,F。Moosmann,O。Car和B. Schuster,“使用单发自动校准距离和摄像机传感器的工具箱”,ICRA,2012年
如果本文对小伙伴有帮助,希望可以在文末来个“一键三连”。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
如何将一个向量投影到一个平面上_CameraLidar投影:2D3D导航相关推荐
- 如何将一个向量投影到一个平面上_MIT—线性代数笔记15 子空间投影
第15讲 子空间投影 Projections onto subspaces 网易公开课open.163.com 投影(射影)Projections 投影问题的几何解释就是:如何在向量a的方向上寻找与 ...
- 如何将一个向量投影到一个平面上_Normal Equation的向量投影解法与几何和直觉解释...
在线性回归的正交方程(Normal Equation)推导一文中提到使用向量投影的方法也可以推导出正交方程,该方法简单到只需1步,并能从向量投影的角度体现线性回归的本质. 预备知识:向量投影 平面A由 ...
- 如何将一个向量投影到一个平面上_自动驾驶视觉融合相机校准与激光点云投影...
点云PCL免费知识星球,点云论文速读. 标题:自动驾驶视觉融合-相机校准与激光点云投影 作者:williamhyin 来源:https://zhuanlan.zhihu.com/p/136263753 ...
- 如何将一个向量投影到一个平面上_如何在黎曼流形上避开鞍点?本文带你了解优化背后的数学知识...
机器之心原创 作者:Joshua Chou 编辑:Joni Zhong翻译:魔王 在一篇名为<Escaping from saddle points on Riemannian manifold ...
- 如何将一个向量投影到一个平面上_线性代数19——投影矩阵和最小二乘
一维空间的投影矩阵 先来看一维空间内向量的投影: 向量p是b在a上的投影,也称为b在a上的分量,可以用b乘以a方向的单位向量来计算,现在,我们打算尝试用更"贴近"线性代数的方式表达 ...
- 如何将一个向量投影到一个平面上_到标准单纯型集合的投影算法
本文介绍到标准单纯型集(The Standard Simplex Set)的投影算法. 1. 简介 在优化算法当中,我们的目标问题常常带有各种各样的限制条件.例如在某项投资活动中,我们想计算投入为多少 ...
- 三维空间中,向量在另外一个向量或者面上的投影
1. 向量在另外一个向量上的投影 -求向量u在向量v上的投影,定义为u' ,θ 为两向量的夹角. 一个向量有两个属性,大小和方向 首先明确向量点乘的含义u⃗∗v⃗=∣u∣∣v∣cosθ\vec{u}* ...
- 如何将一个向量投影到一个平面上_向量积的种类以及表示方法
向量积 目录: 向量积的定义. 向量积的点乘. 向量积的叉乘. 1.向量积,数学中又称外积.叉积,物理中称矢积.叉乘,是一种在向量空间中二元运算.与点积不同,它的运算结果是一个向量而不是一个标量.并且 ...
- 如何将一个向量投影到一个平面上_向量的各种积
目录 一.点乘(内积) 1.定义 2.举例 3.点乘几何意义 二.叉乘(向量积) 1.定义 2.叉乘几何意义 一.点乘(内积) 1.定义 向量的点乘,也叫向量的内积.数量积,对两个向量执行点乘运算,就 ...
最新文章
- css订单导航栏横线动画,小程序 纯css 实现tab导航栏下划线跟随动画
- cannot import name 'multiarray'
- sklearn学习总结(超全面)
- mysql中的各种join整理
- 如何测试一个财务软件系统,对比测试工具平台让财务测试飞起来
- 两个摄像头合成一路_三星推出全新摄像头光电传感器ISOCELL GN1,性能直奔HM1
- Linux 下的DMA浅析
- windows 如何在Windows命令行下配置IP地址
- unix c线程同步的三种方法:互斥量、读写锁以及条件变-xhb8413-ChinaUnix博客
- ubuntu_soft相关安装
- c++ 调用labview_Namisoft解析基于Labview的自动化精密阻抗分析系统
- HTML+CSS大学生个人网站作业模板~黑色的html5个人博客网站模板整站下载
- 制造行业mes使用说明书_mes系统操作手册完整版
- 学习推荐《零起点Python大数据与量化交易》中文PDF+源代码
- easyui数据表格重置_Easyui 格式化列_EasyUI 教程
- 2021/08/09模拟赛总结
- Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- 论“正义”——什么是正义?
- 医疗器械行业按下“加速键”,华瑭医疗的总代生意却并不好做
- afudos备份bios不动_救命宝典:BIOS刷坏后的恢复方法
热门文章
- html页面foot,HTML tfoot用法及代码示例
- 数据字典简单例子_Python学习100天-Day14(数据分析篇-pandas02)
- 大脑使用书全6册有用吗_常锻炼“人体第二大脑”的孩子,不仅智商高,记忆力也很强...
- JavaScript中带示例的字符串search()方法
- Java新特性:数据类型可以扔掉了?
- Java 邮箱判断 正则表达式
- python3、sqlmap下载与安装教程
- Opencv 深度学习识别性别和检测年龄
- Windows 10 搭建Python3 安装使用 protobuf
- 子网掩码与子网个数、主机地址个数的关系