目的

使用雷达点云提供的深度信息

如何实现

将雷达的三维点云投影到相机的二维图像上

kitti数据集简介

kitti的数据采集平台,配置有四个摄像机和一个激光雷达,四个摄像机中有两个灰度摄像机,两个彩色摄像机。

从图中可看出,关于相机坐标系(camera)的方向与雷达坐标系(velodyne)的方向规定:

camera:  x = right, y = down, z = forward

velodyne: x = forward, y = left, z = up

那么velodyne所采集到的点云数据中,各点的x轴坐标,即为所需的深度信息。

更多详细的简介网络上都能搜索到,这里只列举了与当前目的相关的必要信息。

kitti数据集的raw_data

raw_data对于每个序列都提供了同步且校准后的数据、标定数据。

同步且校准后的数据:

./imageXX 包含有各个摄像机采集到的图像序列

./velodyne_points 包含有雷达扫描到的数据,点云形式,每个点以 (x,y,z,i) 格式存储,i为反射值

(雷达采集数据时,是绕着竖直轴旋转扫描,只有当雷达旋转到与相机的朝向一致时会触发相机采集图像。不过在这里无需关注这一点,直接使用给出的同步且校准后的数据即可,它已将雷达数据与相机数据对齐,也就是可以认为同一文件名对应的图像数据与雷达点云数据属于同一个场景。)

标定数据:

./cam_to_cam 包含有各个摄像机的标定参数

./velo_to_cam 包含有雷达到摄像机的变换参数

对于raw_data,kitti还提供了样例工具,方便读取各种数据文件并输出,参见官网raw_data下载页的development kit

利用kitti提供的devkit以及相应数据集的calib文件

解读calib文件夹

cam_to_cam,包含各相机的标定参数

  - S_xx: 1x2 矫正前xx号相机的图片尺寸
  - K_xx: 3x3 矫正前xx号相机的标定参数
  - D_xx: 1x5 矫正前xx号相机的畸变系数
  - R_xx: 3x3 外参,xx号相机的旋转矩阵
  - T_xx: 3x1 外参,xx号相机的平移矩阵
  - S_rect_xx: 1x2 矫正后XX号相机的图片尺寸
  - R_rect_xx: 3x3 旋转矩阵,用于矫正xx号相机,使得图像平面共面(原话是make image planes co-planar)。
  - P_rect_0x: 3x4 投影矩阵,用于从矫正后的0号相机坐标系 投影到 X号相机的图像平面。

这里只用到最后两个矩阵R_rect和P_rect

velo_to_cam,从雷达坐标系到0号相机坐标系的转换

  - R: 3x3 旋转矩阵
  - T:  3x1 平移矩阵
  - delta_f 和delta_c 已被弃用

由此可以得出从雷达坐标系变换到xx号相机的图像坐标系的公式:

设X为雷达坐标系中的齐次坐标 X = [x y z 1]',对应于xx号相机的图像坐标系的齐次坐标Y = [u v 1]',则:

其中 

(R|T) :        雷达坐标系  ->  0号相机坐标系
R_rect_00: 0号相机坐标系 -> 矫正后的0号相机坐标系
P_rect_0x: 矫正后的0号相机坐标系  ->  x号相机的图像平面
更详细完整的解读参见devkit中的readme.txt

解读devkit

官网提供的样例代码中 run_demoVelodyne.m 实现了将雷达点云投影到相机图像

代码流程

  1. 从所给路径中读取标定文件,获取具体矩阵数值
  2. 根据上述公式,计算投影矩阵 P_velo_to_img,即 Y = P_velo_to_img * X
  3. 从所给路径中读取相机图片,并加载雷达的点云数据。由于只做展示用,为了加快运行速度,对于雷达点云,每隔5个点只保留1个点
  4. 移除那些距离雷达5米之内(雷达的x方向)的点 (猜测这些点落在相机和雷达之间,故不会出现在图像平面上)
  5. 作投影计算,得到投影到二维图像上的点
    6.在图像上画出投影后的点,按照深度(雷达点的x方向值)确定颜色,彩色则是暖色越近,冷色越远;灰度则是深色越近,浅色越远。

若需要从深度图获取深度值,应按照画投影点时深度值到颜色(灰度)值的转换。

KITTI数据集的使用——雷达与相机的数据融合的更多相关文章

  1. 激光相机数据融合(3)--KITTI数据集

    KITTI数据集提供了双目图像,激光数据,和imu/gps位置信息,其中还包括了大量的算法.下载地址为:http://www.cvlibs.net/datasets/kitti/raw_data.ph ...

  2. KITTI数据集

    目的 使用雷达点云提供的深度信息 如何实现 将雷达的三维点云投影到相机的二维图像上 kitti数据集简介 kitti的数据采集平台,配置有四个摄像机和一个激光雷达,四个摄像机中有两个灰度摄像机,两个彩 ...

  3. kitti数据集标定文件解析

    1.kitti数据采集平台 KITTI数据集的数据采集平台装配有2个灰度摄像机,2个彩色摄像机,一个Velodyne64线3D激光雷达,4个光学镜头,以及1个GPS导航系统.图示为传感器的配置平面图, ...

  4. kitti 数据集解析

    1.KITTI数据集采集平台: KITTI数据采集平台包括2个灰度摄像机,2个彩色摄像机,一个Velodyne 3D激光雷达,4个光学镜头,以及1个GPS导航系统.坐标系转换原理参见click.KIT ...

  5. KITTI数据集格式说明

    由于上一篇博客所提到的论文中的训练数据是KITTI的数据集,因此如果我想要用自己的数据集进行训练的话,就需要先弄清楚KITTI数据集的格式,在以下的网址找到了说明: 首先,数据描述中是这样的: 在以下 ...

  6. KITTI数据集上MaskRCNN检测效果示例

    KITTI数据集上MaskRCNN检测效果示例 在Semantic Instance Segmentation Evaluation中,MaskRCNN性能效果排名第一. Test Image 0 I ...

  7. 激光相机数据融合(4)--KITTI数据集中matlab接口说明及扩展

    KITTI数据集接口已经提供了matlab接口,本篇将说明详细说明其应用并与PCL进行对接.PCL为C++点云处理语言库,详情可见:http://pointclouds.org/ 程序可以从官网下载, ...

  8. stixel-world跑在kitti数据集

    kitti数据集中每一帧的Calibration不同,每一帧都存储了4个相机的Calibration http://ww.cvlibs.net/publications/Geiger2013IJRR. ...

  9. 下载Kitti 数据集(dataset) data_road.zip

    官网下载http://www.cvlibs.net/download.php?file=data_road.zip,耗时近3小时,虽然只有几百兆. 但是,我坚持下来了. 保存到了百度网盘,以供国内用户 ...

随机推荐

  1. Auzone AT60 TPMS Tool Update & Authorization Service: FREE

    This is a tutorial with step-of-step explanation of Auzone AT60 TPMS Tool Update & Authorization ...

  2. JSON中的parse和Stringify方法

    JSON.parse(str)  将字符串解析成对象 var str = '{"name":"huangxiaojian","age":&q ...

  3. 阿里云-CentOS如何挂载硬盘

    阿里云CentOS挂载硬盘 查看当前未挂载的硬盘 # fdisk -l 创建硬盘分区 # fdisk /dev/vdb 根据提示,依次输入"n","p" &qu ...

  4. css3+html5特效-向上滑动

    css+html5特效-向上滑动 效果描述:切换的下拉和上拉状态 鼠标悬浮:下拉鼠标离开:上拉 /*外容器设置*/ .box1{position:relative;top:100px;left:100 ...

  5. 第一次博客作业 <西北师范大学| 周安伟>

     1.助教博客链接:https://home.cnblogs.com/u/zaw-315/ 2.本周点评的作业数:3份,有留言互动. 3.本周点评有困难的地方: https://www.cnblogs ...

  6. 关于fftshift----将零频率的分量移到频谱的中心

    fftshift 作用:将零频点移到频谱的中间 用法: Y=fftshift(X) Y=fftshift(X,dim) 描述:fftshift移动零频点到频谱中间,重新排列fft,fft2和fftn的 ...

  7. Spring 事物Transaction

    日常开发中Spring 为我们提供了两种事物的定义方式 XML 配置 方式 :这种方式配置起来比较麻烦,但后期比较好进行维护 注解方式:配置起来比较方便,也是日常开发常用的: 我们这里进行第二种注解的 ...

  8. 控制台 console.write 中文为问号

    原因: 因为你当前环境代码页是437,是美国英语的字符编码 解决方式: 你把你环境设置成936就是简体中文字符编码环境了 Console.OutputEncoding = Encoding.GetEn ...

  9. 把多个字符串里面的项写到不同的对象中,然后在push到一个数组中

    otherUserNames: "甲,乙,丙,丁"otherUserIds: "10008750,10008711,10003348,10008747" oth ...

  10. H5端密码控件自动化测试

    最近在做H5端UI自动化测试,其中遇到了一个棘手问题就是密码控件,因为密码控件的按钮每次都是随机不一样的,没法固定去点击输入密码.密码的输入框是div不是input,所以没法用send_keys()这 ...