点击上方“AI算法修炼营”,选择“星标”公众号
精选作品,第一时间送达
作者:william 链接:https://zhuanlan.zhihu.com/p/136263753 作者是一名热爱自动驾驶,喜欢学习和分享的小青年。知乎专栏"自动驾驶全栈工程师"专注于分享自动驾驶感知,定位,规划,决策,控制和系统安全等各方面的理论知识及项目实践。专栏号:自动驾驶全栈工程师 本文转载自知乎,作者已授权,未经许可请勿二次转载。
Camera Calibration and LIDAR Cloud Projection
多传感器融合一直是自动驾驶领域非常火的名词, 但是如何融合不同传感器的原始数据, 很多人对此都没有清晰的思路. 本文的目标是在KITTI数据集上实现激光雷达和相机的数据融合. 然而激光雷达得到的是3D点云, 而单目相机得到的是2D图像, 如何将3D空间中的点投影到图像平面上, 从而获得激光雷达与图像平面相交的区域, 是本文研究的重点. 其次本文会介绍相机这个大家常见的传感器, 以及讲解如何对相机进行畸变校准.
Github: github.com/williamhyin/
Email: williamhyin@outlook.com
![dd7668abef6e9f435fa2f946daf1cc3d.png](https://img-blog.csdnimg.cn/img_convert/dd7668abef6e9f435fa2f946daf1cc3d.png)
Camera Technology
针孔相机与透镜
人类最早的相机是针孔相机. 通过在目标物体之间放置一个带有微小开口(针孔)的光栅可以设计一个非常简单的相机. 物体发出的光穿过针孔并落在感光表面上, 该感光表面将光信息存储为图像. 之所以将针孔做得如此之小, 是为了避免由于叠加来自感兴趣对象各个部分的光线而导致图像模糊.
![099859f49c468d67b7a3ecde106241ad.png](https://img-blog.csdnimg.cn/img_convert/099859f49c468d67b7a3ecde106241ad.png)
基于上述方程, 只需要知道该物体在空间中的3D位置以及相机的焦距, 我们就可以计算出物体在图像平面上的2D位置. (请注意, 生成的坐标x'和y'是公制坐标(m), 而不是像素位置)
但是针孔相机存在透光量很小的问题, 而增大针孔又会导致成像模糊. 解决该问题的一种方法是使用透镜, 透镜能够捕获从感兴趣对象的同一点发出的多束光线. 因此现代相机几乎都使用透镜.
一般情况尺寸适当且位置合适的镜头可折射从空间中的物体上的点P1发出的所有光线, 使它们会聚到在图像平面中单个点p1'. 穿过镜头中心的光线不会发生折射, 它们会一直沿直线直到与像平面相交.
而物体上较近或较远的点却不会聚在图像平面上, 因为它们发出的光线不是会聚在一个点上, 而是会聚在一个半径有限的圆上. 这种模糊的圈子通常称为 circle of confusion (COF). 为了减少模糊, 可以使用光圈, 该光圈是通常可调大小的同心开口, 直接位于镜头后面. 下图说明了原理:
![a054726945ea4119ce1e249410011ec4.png](https://img-blog.csdnimg.cn/img_convert/a054726945ea4119ce1e249410011ec4.png)
通过减小光圈的直径, 可以阻挡通过外边缘镜头的光线, 从而减小了像平面上COF的大小. 从上图中可以看使用较小的光圈可减少模糊, 但以降低光敏度为代价. 光圈越大, 越多的光线聚焦在图像区域上, 从而使图像更明亮, 信噪比更好.
像平面坐标系到像素坐标系的转换
3D空间中的点在图像平面上的投影与我们在实际的数字图像中看到的并不直接对应, 实际的数字图像由数千个图片像素组成. 因此我们需要实现从图像平面到数字图像上的投影.
在下图中相机中心是O
点, 伴随着坐标系i,j,k
. 其中k
指向图像平面. 与k
轴位置相交的C
点被称为主点, 代表着图像平面的中心. 以主点为原点的右手平面坐标系o-xy
为像平面坐标系.
因此, 在空间上将点P投影到图像平面上之后的第一步是减去主点坐标, 以使离散图像具有其自身的坐标系, 例如该坐标系的中心为图像平面的左下角.
![e6ca067e164a4b3b50cc692a4fbf397d.png](https://img-blog.csdnimg.cn/img_convert/e6ca067e164a4b3b50cc692a4fbf397d.png)
转换过程的第二步是从公制坐标(m)转换为像素坐标. 为此, 我们可以使用校准程序提供的参数k
和l
, 这些参数将将米转换为像素, 并且可以轻松地将其集成到投影方程式中, 如下所示. 请注意, 在像素坐标系中, y轴的原点位于左上角, 并指向下方.
fk一般在转换矩阵中称为alpha
, fl称为beta
.
相机校准(camera calibration)
使用镜头虽然可以像针孔相机一样计算空间中的3D点通过镜头后在图像平面上的2D位置, 但是大部分镜头会将失真引入图像. 最常见的是变形称为“radial distortion”, 这是由于镜头的焦距在其直径上不一致. 一般情况镜头的放大效果根据相机中心(光轴)和通过镜头的光线之间的距离而变化. 如果放大倍数增加, 则产生的失真效果称为“pin cushion distortion”. 如果减小, 则称为“barrel distortion”. 使用广角镜如GOPRO时, 通常会发生” Barrel distortions“.
![dc58568c40de200c10d23b24445982ee.png](https://img-blog.csdnimg.cn/img_convert/dc58568c40de200c10d23b24445982ee.png)
请记住, 如果我们需要通过图像得出关于目标物体(例如车辆)的空间位置, 一定要对相机进行畸变校准(calibrat