本文的主要内容,是讨论如何将KITTI激光雷达的点云数据,映射到图像中去。

KITTI数据集是怎么采集的

下面这幅图是车的俯视图,可以看到,用到了2个彩色相机,2个灰度相机,1个激光雷达。1个GPS/IMU。

图1 KITTI车俯视图

KITTI标系是怎么定义的

比较值得注意的是,蓝字部分标注的Velodyne激光雷达的坐标系中, X坐标是向前的。也就意味着激光雷达数据中的X数据,给的是物体的距离信息。这点在我的代码中的时候会有体现。

KITTI车传感器坐标定义

KITTI怎么从点云映射到图像?

我看了Kitti官方论文《Vision meets Robotics: The KITTI Dataset》,要想把点云映射到图像,核心的公式就是

图2 点云坐标x映射到图像坐标y

先说说映射流程流程。

  • 首先经过

    矩阵映射。经过这一步,点云坐标被映射到了0号相机坐标系里。
  • 然后经过
    矩阵映射。这一步我也没太搞懂。比较奇怪的是,不管像映射到哪个编号的相机,似乎都需要左乘
    矩阵。而且这个
    矩阵看上去仅仅是一个内参矩阵……
  • 最后经过
    矩阵映射,被变换到了i号相机所在的图像坐标系。

再说说各部分长什么样。

  • 是点云数据的齐次坐标形式,一个4行1列的列向量,
  • 是4*4的矩阵。它并非是平移矩阵,而是标定得到的激光雷达和相机的外参矩阵。包括了旋转矩阵
    和平移矩阵
    两部分, 如下
= |
|

|

|
  • 是4*4的矩阵,最后一行为
    ,是从3*3矩阵扩展来的。
  • 是3*4的矩阵。
  • 是最终映射得到的图像坐标,是一个3行1列的列向量,
    。为了变换成齐次坐标的形式,需要做一个归一化,除以

KITTI怎么获取上述映射矩阵?

公式中:

为点云数据,使用.bin二进制文件储存,可以使用c++读取。里面包括了三维坐标信息和反射率。

对于几个转换矩阵,KITTI提供了三类标定文件,分别叫

  • calib_cam_to_cam.txt: 相机之间的坐标转换矩阵
  • calib_imu_to_velo.txt: IMU和激光雷达的坐标转换
  • calib_velo_to_cam.txt: 相机和激光雷达之间的坐标转换

本文中要将激光雷达的点云数据,映射到图像中去。因此用到的是calib_cam_to_cam.txt和calib_velo_to_cam.txt。

就是calib_cam_to_cam.txt中的P_rect_0i。
是由calib_cam_to_cam.txt的3*3的R_rect_00矩阵扩展一个维度而来。
由calib_velo_to_cam.txt中的R和T,扩展出来的。

在这些标定txt文件中,所有的数据都是按行存储的,也就是P_rect的1-4个数据,是矩阵

的第一行。

怎么显示出映射后融合效果?

通过上述公式,我们已经可以把3维点云数据映射至图像坐标了。可以直接在图像上标记出这些点。

但是,为了更酷炫的显示这个效果,我们可以根据点云的x坐标给这些点上色。用x坐标的原因,也就是刚刚上面提到的因为激光雷达的坐标系x轴是朝前的,实际上坐标x就是物体距离。

一般使用各大编程语言的colormap里的JET色彩就能实现渐变效果,距离远的点是蓝色的,距离近的点是红色的。

映射后的效果图如下:

Kitti官方提供了 MATLAB代码run_demoVelodyne.m。这份代码里,为了显示融合效果,用到了几个tricks:

  1. 把x<5的点去掉了。物理意义就是,距离小于5的范围可能处于相机的盲区,拍不到。去掉这些点可以提高速度。
  2. 点云中,每5个点取一个点。也是为了提高计算速度。
  3. 在实现远距离是蓝色,近距离是红色时,kitti官方代码将距离映射成0-63的整数,每个整数对应一个颜色,实现方式很有趣。
col_idx = round(64*5/velo(i,1));

这里velo(i,1)就是距离。由于他把x<5的点去掉了,所以5/velo(i,1)范围在(0,1]之间。64*5/velo(i,1)就到了(0,64]之间。取整之后,就变成了0-63的整数。

c++代码

依据官方代码,我实现了c++版本的。

https://gitee.com/cuiry/learn3D/tree/master/learnKitti​gitee.com

里面有1张kitti彩色图像,和对应的点云bin文件、标定txt文件。

代码实现了bin文件和标定txt数据的读取、从点云坐标转换成图像坐标、以及融合效果的显示。

代码运行在Ubuntu18.04,需要opencv4.4.0和PCL库。

参考资料

kitti数据集坐标转换_冯子材的博客-CSDN博客​blog.csdn.net

https://github.com/ZouCheng321/fusion_kitti/blob/master/run_demoVelodyne.m​github.com

多相机坐标转换_使用KITTI数据集实现坐标转换相关推荐

  1. c++七参数坐标转换_深度 | 扒一扒坐标转换之七参数

    坐标转换永远是测绘工作离不开的一个话题.坐标转换的方法很多,有的方法可以用相应的参数来描述,其中使用较广的一个是七参数.七参数大多用于不同坐标系统间的基准变换. 七参数的由来 对于非测绘的专业人士可能 ...

  2. KITTI数据集的使用——雷达与相机的数据融合

    目录 目的 如何实现 kitti数据集简介 kitti数据集的raw_data 利用kitti提供的devkit以及相应数据集的calib文件 解读calib文件夹 解读devkit 目的 使用雷达点 ...

  3. kitti数据集_超全的3D视觉数据集汇总

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

  4. 多相机坐标转换_自动驾驶视觉融合 | 相机校准与激光点云投影

    点击上方"AI算法修炼营",选择"星标"公众号 精选作品,第一时间送达 作者:william链接:https://zhuanlan.zhihu.com/p/13 ...

  5. KITTI数据集-label解析

    参考:KITTI数据集--label解析与传感器间坐标转换参数解析_苏源流的博客-CSDN博客 KITTI数据集是自动驾驶领域最知名的数据集之一. 一.kitti数据集,label解析 16个数代表的 ...

  6. 【MMDetection3D】环境搭建,使用PointPillers训练测试可视化KITTI数据集

    文章目录 前言 3D目标检测概述 KITTI数据集简介 MMDetection3D 环境搭建 数据集准备 训练 测试及可视化 绘制损失函数曲线 参考资料 前言 2D卷不动了,来卷3D,之后更多地工作会 ...

  7. 【KITTI】KITTI数据集简介(三) — 图像数据image_2

    KITTI数据集种共包含了4相机数据,2个灰度相机和2个彩色相机,其中image_2存储了左侧彩色相机采集的RGB图像数据(RGB).其他图像数据本次暂时不介绍,后续算法研究如果用到再进行补充. 相机 ...

  8. 使用PCL库将KITTI数据集可视化

    PCL点云可视化 KITTI数据集浅析 KITTI数据集简介 KITTI基本结构 Calib Velodyne 标签数据解析 点云数据可视化 创建点云对象 创建视窗对象 添加点云到视窗 相机参数的设置 ...

  9. Aloam+deeplabv3+ 构建语义地图+行人车辆检测(kitti数据集)

    代码和数据网盘链接 链接: https://pan.baidu.com/s/11e1ICOxjYAZxdM4Gx0zlJg 提取码: inp1 --来自百度网盘超级会员v4的分享 若在我给出的代码之上 ...

最新文章

  1. 前端面试题 微信小程序
  2. Web框架——Flask系列之宏、继承、包含(十八)
  3. 项目分层思路——管家婆
  4. python脚本批量登录crt_Python实现批量新建SecureCRT Session
  5. cocos2dx对于强大的RichText控制
  6. 初识设计模式之--简单工厂
  7. 手把手教你学单片机--51单片机C语言开发
  8. 快速实现APP混合开发(Hybrid App开发)攻略
  9. Unity 2D打地鼠小游戏
  10. Vue实现生成二维码
  11. android和手环教程,智能手环怎么连接手机_智能手环连接手机教程
  12. 巨头环伺下,青云QingCloud的云计算之路危机重重
  13. 用python写一个纪念日计算工具!有对象的特别注意了!
  14. Android-Task execution finished ‘signingReport‘
  15. ChatGpt接入Word文档,让你秒变职场达人!
  16. 千峰课程网安笔记(1)
  17. 监控平台设计 之 Graphite、Prometheus 竞对
  18. ipconfig ipconfig /all
  19. Java给图片添加文字,水印,文件或者http图片地址,可消除文字锯齿
  20. 中医蜂疗新起点,新思路,新未来

热门文章

  1. html5图片剪切板,JavaScript 网页端复制图片到剪切板
  2. html风车相册代码,Css Html 大风车(示例代码)
  3. python安装rarfile模块_python windows下安装pip及rarfile
  4. 操作系统hpf算法事例_操作系统中常见算法汇总
  5. 罗斯蒙特电磁流量计8723说明书_罗斯蒙特8732E电磁流量计对环境和温度的限制
  6. @data注解不生效_你说啥什么?注解你还不会?
  7. 谷歌浏览器怎么设置字体 chrome默认字体设置方法
  8. 风林火山最新系统win11 32位旗舰版v2021.07
  9. Java基础篇3——流程控制
  10. java servlet是单例吗_关于java:为什么apache servlet是单例?