目前本人,计算机科班出身以至于研究生依旧走在这条路上,但是自己总感觉自己是计算机小白。编程吧,水平low到爆,搞学术吧,数学基础真的是差。也就想法还多一点,可想归想,做起来就没那么容易了。而且好在读论文不讨厌,就尝试着多读读论文吧。
这是一篇硕士毕业论文,论文题目是《Fusion of LiDAR 3D Points Cloud with 2DDigital Camera Image》,论文很长共80页,但是吧,毕业论文嘛,都要为了凑字数,所以有些话比较啰嗦。写这篇博文的目的并不是为了翻译这篇论文,而是理清其中的思路。废话不多说啦,直接进入正题。
论文主要从3个部分来阐述,分别是:
(1)RANGE SENSOR AND CAMERA
(2)EXTRINSIC CALIBRATION OF LIDAR AND CAMERA
(3)3D MAP GENERATION
第一部分:距离传感器和照相机
1. 现在卫星、军事上所用雷达传3D lidar sensor,可是价格昂贵啊。相比之下,2D lidar sensor就便宜多了。他们两个的区别就是2D扫描出来只能是一个断面一个平面,3D扫描可以直接生成3D点云数据。该篇论文的作者首先做的就是采集数据,采集数据的实验设备既没用3D Lidar Sensor也没用omnidirectional camera(全景相机),所用的是2D Lidar Sensor 和Nikon照相机,外加一个moving machine ,形成一个muli-sensor system。(如图一)备注,因为用的是Nikon普通相机,为了采集更广泛的全景数据,所以只能左、中、右三个方向采集数据并且运用Panorama Maker 6 software生成一副全景图。[后续会持续关注并学习全景图的方法]
题外话:想玩3D或者SLAM,设备很贵啊,老板如果不是高端玩家,项目又不是很多的,肯定不会给买这么贵的设备的。只能浪费比较多的时间,放在采集和整理数据上。但又能怎么样呢?
图一 muli-sensor lidar
2.在构成一个多尺度传感器雷达系统之后,别忘了我们最终的目的是为了实现3D雷达点云数据与2D图像之间的融合,当听到这个融合的词的时候,第一反应是需要有一个共同的目标,如果有了共同目标,那首先需要做的就是转化坐标。把spherical coordinates(球面坐标系)转为cartesian coordinates(笛卡尔坐标系),遵从右手定则,X代表height,Z代表width,Y代表distance。
3.刚才说到要有一个共同的目标,作者呢用的就是最常见的方法“棋盘标定法”。棋盘标定法中,需要我们知道内外参数以及畸变系数。假设我们知道了内部参数,那么外部参数和校准就会变得容易很多。所以作者估计也是为了省事并且校正camera所采集的数据。运用Camera Calibration App,找到内部参数、径向畸变和切向畸变。
第二部分:雷达和相机的外部校准(技术的关键所在)
将雷达数据和图像融合成3D模型的方法有很多,这篇文章中,作者考虑到方便性和两种数据融合的速度以及数据的存储量,采取了外部刚体校准的方法来匹配雷达和相机参数。
1.为了找到Lidar和Camera的关系,主要是计算出transformation matrix -变换矩阵
补充说明:可能从一开始,有些人看到这个论文题目就会想问为什么要把3D和2D之间的融合。因为获取的3D点云中又距离和强度信息,相机获取的数据中,能获得颜色和纹理信息。
2.作者所想的方法是:首先先把3D点数据转化到一个2D点的平面中。说到这,肯定会问用的什么方法呢?作者用了Camera Projection Model
在转化到2D点平面之后,提取棋盘的边缘和角点信息。提取完之后这些共同目标的边缘和角点信息之后,2D点和相机数据之间采用point-to-point(点对点)的方式。
(1)LiDAR Data的2D表示
3D点云转化为2D平面上,运用的是pinhole camera model(小孔成像模型)。
例如,通过向现有坐标x和y添加虚拟的第三坐标w,从3D坐标(x,y,z)到2D坐标(u,v)表示的点,公式(如图二)。我们应用用于将3D激光雷达点云投射到定义的平面上的共线性方程。一旦我们画一条线将摄像机坐标的原始点与世界坐标中的点连接,可以在焦距平面中找到一个连接点。Z是光轴中心,投影到平面上的点就为图像中的坐标原点。(如图三),图四表示投影到2D平面的结果。
如图二 转化公式
如图三 相机投影方法
如图四 运用相机模型将3D点投影到2D点
(2)Interpolationto an intensity image-强度值插入到2D平面中
因为3D点云转化为2D图像后呢,Lidar中的强度信息还没有放入其中。所用方法是 The nearest neighbor interpolation(最近邻插值法),这也是图像放大的一种最基础的方法。我们需要将2D世界坐标中的点的强度值内插到2D图像坐标中的图像。定义网格后,我们使用LiDAR2D点的位置和强度值,并定位最近的数据值并分配相同的强度值。2D激光雷达点在其相对位置之间没有结构或顺序,我们也可以使用三角测量来内插散射数据。当使用均匀网格进行内插而不是使用三角测量时,将很容易找到世界坐标。
最后,获得LiDAR之间的灰度级强度图像,得到不同查询点的数据插值时,会产生不同的结果。
(3)运用外部校准的方法找到Lidar 3D 点云和Camera 2D 图像之间的关系。与此同时,作者运用RANSAC算法找到LiDAR强度图与全景图之间的关系。
题外话:为什么要用RANSAC算法,我还没有用明白。如果有伙伴明白的话,欢迎讨论、留言哦~
下面就这两种方法在文中的运用,具体来说说。
假设一对对应点,是雷达强度图中的点,是全景图中的点,需要计算这对点之间的距离。只有当和基于变换矩阵的的投影之间的距离落在指定的阈值内时,一对点和才是一对对应点。
总结一下,如图五所示,表示的是Lidar和camera之间的转换矩阵 T ,至少要选取4对点才能找到转换矩阵。所用公式为,这样就找到了转换矩阵T。
(如果这里有不明白的小伙伴们,可以查看另一外朋友写的 “张正友的棋盘标定法”)
图五 计算转换矩阵T
图六所示,表示的是为了将全景图拼接到强度图像,几何变换全景图是一个输入图像,并且通过将变换矩阵应用于全景图来生成。LiDAR强度图像是第二个输入图像。我们使用MATLAB