如何将一个向量投影到一个平面上_CameraLidar投影:2D3D导航

点击上方“AI小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达913345a01d408e94119743499cc8659d.png

e59c77725d3457ecde6dd9ef55546def.png

图1.图像上的激光雷达点

激光雷达和照相机是用于感知和理解场景的两个基本传感器。他们建立周边环境模型、提供检测和确定其他对象位置的方法,从而为机器人提供了安全导航所需的丰富语义信息。许多研究人员已开始探索用于精确3D对象检测的多模式深度学习模型。Aptiv开发的PointPainting [1]算法是一个非常有趣的例子。

那么为什么要将这2个传感器进行融合?

在捕获更密集和更丰富的表现方面,相机的性能优于LIDAR。从图2中,仅看稀疏点云,就很难正确地将黑匣子识别为行人。但是注意RGB图像,即使人朝后,我们也可以很容易地看出物体看起来像行人。除此之外,其他的想通信号灯和道路标志都是激光雷达很难解决的问题,但是可以很简单的通过视觉图像进行处理。

882be423c6b32d7c7f04d32c3ccd2963.png

图2.行人检测的RGB和点云表示

相反,激光雷达可以很好提取距离信息,但是使用相机以标准透视图进行测量距离则非常困难。

通过融合来自两个传感器的信息,利用两个传感器的优势,克服各自的局限性。搭载多个传感器还可以实现冗余,这是是在传感器发生故障时的重要保障。

目的

在本文中,我们将进一步探讨如何同时利用LIDAR和相机数据,以创建更加丰富和准确的环境3D场景。

我们将使用Kitti 3D对象检测数据集 作为参考。请参阅Kitti Dataset网站或文件夹下Github 上的代码 以了解数据格式。

剩下的部分,我们首先需要讨论传感器安装相关的问题,通过Kitti对象检测数据集来了解数据结构,并通过如何进行校准以了解校准矩阵。接下来,将详细介绍3D-2D和2D-3D投影映射,最后以可视化的方式显示激光雷达与摄像机的数据。所有inline文本格式都是函数,变量或代码中的文件 。

传感器设置,校准和坐标系(KITTI)

1510983f9ff75848f560c26cc6817cf3.png

图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的基线。

c8973868c8db9779456fbd11be98d30c.png

• 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坐标进行归一化即可。

df8ec5a99d815d8196b45a60f2215e58.png

图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模型和分段蒙版。

e4ba15e0805b23218820961a13209c79.png

图5.在图像平面上显示框

我们可以得到盒子的位置(t),盒子在摄像机坐标系中的偏航角(R)(假设没有俯仰和滚动)以及尺寸:高度(h),宽度(w)和长度(l)。请注意,在相机坐标中标注了对象的3D框!有了这些信息,我们可以轻松地将盒子模型转换为相机空间中的确切位置。

考虑上面的图5,每个盒子实例的原点都设置在底部和中央,对应于与自我车辆和地面相同的高度。要将3D框投影到图像:

• 首先,我们得到在照相机的方块经由坐标[R | T],其中R = roty和t = (tx, ty, tz)从注释中label.txt

• 接下来,将透视投影应用于图像平面 P_rect2cam2

图片中的PointCloud [3D-2D]

0dbc19b4ea2b25bebb562b931b014e42.png

图6.图像上激光雷达点的颜色编码范围值

如果我们想以2D方式处理数据,则可以通过将点云投影到图像上以使用相应的激光雷达范围值(z)构造稀疏深度图表示来收集更多信息。稀疏性取决于映射到像素的激光雷达光束的数量。

与从摄像机预测深度图相比,稀疏深度图是方便且准确的范围数据。在伪Lidar ++中 描述了使用稀疏深度图来增强基于单眼的检测的工作。

要将点映射到像素,这是从激光雷达到像平面的投影变换。

• 计算投影矩阵project_velo_to_cam2。

• 投影指向图像平面。

• 删除图像边界之外的点。

PointCloud [2D-3D]中的框

激光雷达空间的可视化和工作在空间推理方面提供了最全面的理解。此外,如果需要,我们可以轻松地更改相机视角以从不同角度观察环境。

73a028e09b6d3aa861e5f71d99052b0e.png

图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年

如果本文对小伙伴有帮助,希望可以在文末来个“一键三连”。

252fbbd94713953dbf7b4cb5b4ed627c.png

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

31d94f420cd11b573c71fb5c4251fb20.png

69b71a6900eb8d871f6c59fffb759a59.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA中和、||和|的区别?

问题一:JAVA中&&和&、||和|(短路与和逻辑与、短路或和逻辑或)的区别? 首先名称是不同的 逻辑运算符:&&逻辑与  ||逻辑或  它们都是逻辑运算符 位运算…

pppoe拨号的外网ip无法ping通_【思唯网络学院】 五大网络概念:IP地址、子网掩码、网关、DHCP服务和PPPoE拨号...

5G技术的更新,推动了新一代的网络通信发展,家庭宽带上网也从最初的十几K的速度,提升到了现在动则上百上千兆的速度,很多有部署了家庭NAS的用户,甚至都已经更新到了10G级别的内部局域网了。在这个信息互联的时代&#x…

MySQL数据库的数据类型以及取值范围详解

主要包括以下五大类: 整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT 浮点数类型:FLOAT、DOUBLE、DECIMAL 字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDI…

flex布局_flex布局的 flex(felx-grow、flex-shrink、flex-basis)详解

flex布局中的flex-grow,flex-shrink,flex-basis接上篇文章,1. flex-grow属性flex-grow定义剩余空间的分成。默认为0,即如果存在剩余空间,也不放大。如何理解这里的剩余空间呢,用例子来说明吧。默认的情况(flex-grow:0)在浏览器下是…

Mina网络通信框架

认识 Mina Apache Mina Server 是一个网络通信应用框架,与 Netty 出自同一作者,Netty 借鉴了部分 Mina 的设计思路。 Mina 主要是对基于 TCP/IP、UDP/IP 协议栈的通信框架,Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用&#x…

每个tabpage中都有一个dategridview_每个女人,都有一个礼服梦

●今天,我要带着大家跟随几部经典电影,来开启一场关于礼服的时空穿越。01. 《爱玛》//关键词:19世纪初英国乡村经历了巴洛克风格的洗礼,服饰的整体风格变得柔和了不少,蕾丝、细纱、蝴蝶结这些浪漫元素,是这…

ssm框架sql换成MySQL_搭建ssm框架,可实现登录和数据展示以及增删改查

需求:后台使用ssm(spring-springMVC-mybatis)进行整合前台使用bootstrap框架前后台交互使用Ajax进行发送表结构:登录页面后显示所有用户信息,可对每条进行增删改查登录时也使用本表的user_name和user_pwd进行校验项目目录结构步骤一&#xff…

巧妙mybatis避免Where 空条件的尴尬

我就废话不多说了&#xff0c;大家还是直接看代码吧~ <select id"findActiveBlogLike" resultType"Blog">SELECT * FROM BLOGWHERE<if test"state ! null">state #{state}</if> </select>如果state参数为空时&#x…

numpy 矩阵与向量相乘_高能!8段代码演示Numpy数据运算的神操作

作者&#xff5c;王天庆来源&#xff5c;大数据(ID&#xff1a;hzdashuju)导读&#xff1a;本文介绍一下在Python科学计算中非常重要的一个库——Numpy。Numpy是Numerical Python extensions 的缩写&#xff0c;字面意思是Python数值计算扩展。Numpy是Python中众多机器学习库的…

Spring Boot——日志配置

日志&#xff0c;通常不会在需求阶段作为一个功能单独提出来&#xff0c;也不会在产品方案中看到它的细节。但是&#xff0c;这丝毫不影响它在任何一个系统中的重要的地位。 为了保证服务的高可用&#xff0c;发现问题一定要即使&#xff0c;解决问题一定要迅速&#xff0c;所…

python2转python3代码_Python2代码转成Python3代码

1.利用anaconda软件自带的功能: 1.找2to3.py文件 我的anaconda装在了D盘下的Anaconda文件夹下 你需要找到anaconda下的script文件夹里面的2to3-script.py文件(由于版本不同,可能名字不太一样,但是一定是2to3开头,而且是py文件)打开2to3-script.py文件后(内容肯定都是一样的):2.…

haproxy keepalived_Haproxy+KeepAlived+Mycat实现高可用集群

1.什么是HaproxyHAProxy是一个使用C语言编写的自由及开放源代码软件[1]&#xff0c;其提供高可用性、负载均衡&#xff0c;以及基于TCP和HTTP的应用程序代理。HAProxy特别适用于那些负载特大的web站点&#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬…

IO与NIO

1、阻塞与非阻塞 阻塞与非阻塞是描述进程在访问某个资源时&#xff0c;数据是否准备就绪的的一种处理方式。当数据没有准备就绪时&#xff1a; 阻塞&#xff1a;线程持续等待资源中数据准备完成&#xff0c;直到返回响应结果。非阻塞&#xff1a;线程直接返回结果&#xff0c…

java spark wordcount_提交任务到spark(以wordcount为例)

1、首先需要搭建好hadoopspark环境&#xff0c;并保证服务正常。本文以wordcount为例。2、创建源文件&#xff0c;即输入源。hello.txt文件&#xff0c;内容如下&#xff1a;tom jerryhenry jimsuse lusy注&#xff1a;以空格为分隔符3、然后执行如下命令&#xff1a;hadoop fs…

redis的四大特性和原理

一、redis的过期 A.应用场景 cookie自动过期&#xff0c;限时优惠价格&#xff0c;限制每分钟的访问次数 B.实现方式 setex(String key, int seconds, String value) expire key time #秒 pexpire key time #毫秒 expireat key time #秒 pexpireat key time #毫秒 C.实…

默认文献工具_工具分享??超好用的SCI外文文献下载工具

第一步&#xff1a;打开工具第二步&#xff1a;查找目标文献的DOI号&#xff08;知网、谷歌学术等等...&#xff09;&#xff0c;然后复制。第三步&#xff1a;粘贴到工具里面&#xff0c;然后点击「立即下载」第四步&#xff1a;点击立即下载之后&#xff0c;会自动打开默认浏…

Redis之Redis的事务

1.Redis的事务是什么 Redis 事务的本质是一组命令的集合,事务支持一次执行多个命令&#xff0c;一个事务中所有命令都会被序列化。(redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令). 1.1reids事务的特点 事务同命令一样都是Redis最小的执行单位&#xff0…

idea 设置内存_IDEA新特性:提前知道代码怎么走!

作者&#xff1a;简简单单OnlineZuozuo原文链接&#xff1a;https://blog.csdn.net/qq_15071263/article/details/104186309新特性IDEA - 2020.1 版本针对调试器和代码分析器的改进&#xff0c;值得期待1、对于调试器的加强&#xff1a;数据流分析辅助2、调试加强&#xff1a;属…

Redis的内部运作机制——Redis详解

本文将分五个部分来分析和总结Redis的内部机制&#xff0c;分别是&#xff1a;Redis数据库、Redis客户端、Redis事件、Redis服务器的初始化步骤、Redis命令的执行过程。 首先介绍一下Redis服务器的状态结构。Redis使用一个类型为“redisServer”的数据结构来保存整个Redis服务…

selenium之 chromedriver与chrome版本映射表_NLP实战篇之tf2训练与评估

本文是基于tensorflow2.2.0版本&#xff0c;介绍了模型的训练与评估。主要介绍了tf.keras的内置训练过程&#xff0c;包括compile、fit&#xff0c;其中compile中包含优化器、loss与metrics的使用&#xff0c;内置api中还包含了很多辅助工具&#xff0c;在Callback中进行介绍&a…