当前位置:   article > 正文

自动驾驶—自动泊车之AVM环视系统算法框架

avm透明底盘技术原理

作者丨中投靓仔@知乎

来源丨https://zhuanlan.zhihu.com/p/534553717

编辑丨3D视觉工坊

AVM(Around View Monitor),中文:全景环视系统。在自动驾驶领域,AVM属于自动泊车系统的一部分,是一种实用性极高、可大幅提升用户体验和驾驶安全性的功能。AVM已经是一种较为成熟的技术,中高端车型均有部署,但详细讲述AVM系统算法的技术博文并不多。作者在工作中搭建了一套AVM算法框架,有一些效果还不错的demo。撰写本文,主要是想将AVM算法框架中每个算子讲述清楚,与大家共同进步。本博文的风格为理论与实践结合,含有部分代码,适合有一些计算机视觉基础的同学。

关键词:相机联合标定、去畸变、投影变换、鸟瞰图、图像融合、光流、真实感3D模型、纹理映射。

AVM系统概述

AVM汽车环视影像系统如图所示,由安装在前保险杠、后备箱、后视镜上的四个外置鱼眼相机构成。该系统包含的算子按照先后顺序:去畸变、四路鱼眼相机联合标定、投影变换、鸟瞰图微调、拼接融合、3D模型纹理映射等。四路鱼眼捕捉到的图像信息通过上述算子,生成一个2D、3D的全景图。AVM算法又分为离线阶段和在线阶段两部分,在线阶段是对离线阶段的简化,更加适合于工程实现。下面我们来一一讲述。

917aeceecaf29a0fc5af9b80c1a41366.jpeg

avm系统示意图

离线阶段算法pipeline

先来粗略浏览下AVM算法Pipeline包含那些算子:

  • 2D AVM

2c8ab3d636a4b4dd1b5381064414110f.jpeg

2D AVM Pipeline

  • 3D AVM

98f6044c6781471b78bf9b816934cc97.jpeg

3D AVM Pipeline

1.基于畸变表的鱼眼相机去畸变

1.1鱼眼相机畸变模型

我们知道普通相机和广角相机的投影方式一般为透视投影,即通过三角形相似原理,将相机坐标系下三维世界中的物体投影到平面上,这是基于理想的透视投影模型(无畸变)。但实际情况是我们得到的最终图像与理想的透视投影模型有一些区别,即径向畸变(桶形、枕型)、切向畸变。因此相机标定中都会对畸变做矫正。

鱼眼相机的投影方式有很多种假设,例如等距投影、等立体角投影、正交投影、体视投影、线性投影。但是真实的鱼眼相机镜头并不完全遵循上述的这些模型假设。因此Kannala-Brandt提出了一种一般形式的估计,适用于不同类型的鱼眼相机:

c646408cd7120f25a4fccedd3a643cd8.png

8f0de80fe54e60fe9eda07da022da20f.jpeg

鱼眼相机模型

相机去畸变通常使用张正友老师的棋盘格标定方法,首先通过矩阵推导得到一个比较好的初始解,然后通过非线性优化得到最优解,包括相机的内参、外参、畸变系数,然后对鱼眼图像做去畸变处理。内参即:

3bfe77cb9f778607d68f2dbdecd8256a.png

相机内参矩阵

然而,张正友标定法并不适用于我们的场景。

1.2基于厂家畸变表的鱼眼图像去畸变

由于张正友老师的棋盘格标定法是在图像的全局进行拟合得到一个全局的最优解,因此需要保证多次拍摄到的标定板的棋盘格可以覆盖整个图像区域。而我们假设的场景为要求汽车整车上流水线进行标定,即相机已经安装在车上。很显然,由于车身遮挡的原因,很难保证上述条件。另外,棋盘格标定法并不适用于批量生产。因此,我们选择了基于厂家提供的畸变表对鱼眼相机图像进行去畸变。相机厂家都有专业的光学工程师,大厂提供的畸变表通常情况下比较准确。当然,也有一些在畸变表的基础上进行优化的方法,例如[2]中采用最小重投影的方法计算出最优的相机主点位置,然后使用畸变表进行去畸变处理。在其他场景中,还有些同学先标定出相机的内参,然后将内参与畸变表联合使用。下面我们来讲述基于畸变表的去畸变方法:

b2fa30dfaec90a878490735c6bb7e76c.jpeg

厂家提供的畸变表

6af5e3aa87867cebbcb1dffdd9c8c556.png

fisheye::initUndistortRectifyMap(m_intrinsic_matrix, m_distortion_coeffs, R, NewCoeff, image_size*2, CV_32FC1, mapx, mapy);cv::remap(disImg, undisImg, mapx, mapy, INTER_LINEAR);

通俗讲:鱼眼相机去畸变的过程实际上就是遍历我们想要的无畸变图上的坐标点,通过mapx,mapy两个查找表,找到该坐标点在畸变图上的像素位置。通常这个像素的位置为浮点型,需要做双线性插值。否则在纹理边缘上会有锯齿状的问题,这个结论是作者实现了opencv remap函数验证过的,有兴趣的同学可以自己实现一下mapping的过程(查找+插值)。来看图:

53611604f1a8f2071e56d86724fc14e1.jpeg

鱼眼图 去畸变

右图为基于畸变表去畸变的结果,可以看出去畸变的效果大体上满足要求,例如柱子边、标定布边、车道线为直线。但是仍有部分区域的去畸变效果不好,直线不够直。这个问题会在鸟瞰图中看起来更加突出,也是导致覆盖区域拼接不齐的重要原因。。原因可能有几种:(1)相机光轴与成像平面的交点(主点)与图像平面的中心不重合,即内参矩阵中的 Cx、Cy 。(2)厂家给的焦距f不准(3)厂家给的畸变表有误差。

理论上讲,相机的标定是一个计算全局最优解的过程,可以理解为:我的内参可以不那么准,我拿到的畸变表也可以不那么准,但是只要我的优化目标重投影误差很小,或者畸变去的比较干净,那么这个全局最优解就是可以接受的。因此引用【2】中使用了最小化重投影误差的方法得到内参中的Cx、Cy,然后再使用畸变表;在有的场景中,还有些同学用棋盘格标定出相机的内参,然后配合畸变表进行使用。这些内容作者后面都会陆续做优化。

2.四路鱼眼联合标定

鱼眼相机联合标定的目的是要得到四个鱼眼相机之间的位姿关系,然后将拍摄到的图像搞到同一个坐标系下得到一幅全景环视图。

dd774295224c4e97916544c6f02122a4.jpeg

相机联合标定示意图

如图所示,全景鸟瞰图的视野范围是人为给定的参数,可根据用户喜好进行调节。标定布上的棋盘格大小、黑格子尺寸、汽车与标定布之间的间距这些都是已知的先验信息。上述先验信息在现实世界中与在全景图上的尺度关系为1:1,即1个像素代表1cm(当然这个尺度也可以调节,你想让一个像素代表n厘米也没问题)。这样做联合标定的意义在于:我们可以知道前、后、左、右四个鱼眼相机去畸变后图像中棋盘格上角点,与前、后、左、右四个鸟瞰图中棋盘格角点之间对应的坐标关系。这样我们就可以根据投影变换,将整张图像投影到对应的鸟瞰图上去。又由于在联合标定中,四个鸟瞰图是刚好拼接到一块的,因此利用上述方法将四张图全部投影到鸟瞰图上,在不考虑误差的理想情况下,应该是刚好拼接在一起的。以上,就是联合标定的思路

3.投影变换

3.1投影变换原理

投影变换的通俗理解就是:假设同一个相机分别在A、B两个不同位置,以不同的位姿拍摄同一个平面(重点是拍摄平面,例如桌面、墙面、地平面),生成了两张图象,这两张图象之间的关系就叫做投影变换。张正友老师的相机标定法使用的就是从标定板平面到图像平面之间的投影模型。

b4af1d8fb21714caa8aa9d382129ab6a.jpeg

投影变换模型

图中相机从两个不同的角度拍摄同一个X平面,两个相机拍摄到的图像之间的投影变换矩阵H(单应矩阵)为:

248e648826b5922152b413dcf79e547d.jpeg

其中K为相机内参矩阵,R、T为两个相机之间的外参。这个公式怎么推导的网上有很多,我们只需要知道,这个单应矩阵H内部实际是包含了两个相机之间的位姿关系即可。这也就解释了:为什么有的AVM pipeline的方法是需要标定相机的外参,然后通过厂家提供的相机安装参数将四路鱼眼全部统一到车身坐标系下,而我们不需要这个过程,只需要用标定布来做联合标定。其实两种方法内部都是相通的,都绕不开计算相机外参这件事情

3.2 投影变换生成鸟瞰图

生成鸟瞰图的过程可以理解为:将鱼眼相机拍摄到的图像,投影到某个在汽车上方平行地面拍摄的相机的平面上去。这个单应矩阵H具体是多少,由去畸变图中检测到的棋盘格角点坐标和联合标定全景图中棋盘格角点坐标来决定。如图所示,以后置相机为例,联合标定已知图(2)中框出棋盘格的坐标,图(1)中的棋盘格坐标可通过opencv的函数进行检测,从而建立单应矩阵H的求解模型。

62f824cf9bfaa90e243ce6581158a757.jpeg

(1)去畸变图中棋盘格位置 (2)联合标定全景图中棋盘格位置 (3)瞰图

3.3一些经验之谈

3.3.1尽量选择更多的角点计算单应矩阵

单应矩阵的求解是一个拟合的过程,如果选用过少的点,容易陷入局部最优解。造成的结果是就是鸟瞰图上只有你选择的那些点可以正确的投影,其他像素的投影可能不正确。这一点有点类似于深度学习中训练样本太少,导致过拟合的问题。

3a8353defd0e8a7a058b74276e0b169a.jpeg

单应矩阵三种形式(1)(2)(3)

上面公式可以看出,一对匹配点可以提供两组方程,理论上4对匹配点就可以求解出单应矩阵。Opencv求解单应矩阵提供了两个函数,findHomography和getPerspectiveTransform。

getPerspectiveTransform的输入是4对点,对(2)中矩阵求逆。理想情况下这种方法是可行的,但由于存在噪声,我们在图像上检测到的角点的误差、标定布棋盘格的误差,这种方法极其不准确。

findHomography求单应矩阵的方法输入点对很多,解一个超定方程(3)。经过一顿推导,单应矩阵为(3)中矩阵的奇异值分解中最小奇异值对应的特征向量。这种方法用于做拟合的样本更多,最终的效果更好。而且Opencv还有很多优化算法,例如基于ransac思想的单应矩阵求解方法。当然,为了提高效果,可以对标定布进行DIY,某宝上很多这种DIY标定布,你想搞多少格子就搞多少。

如1.2所述,由于畸变去除的不彻底,导致有些直线仍然是弯曲的。这一现象在投影到鸟瞰图上之后尤为明显,通过大量的棋盘格点进行投影变换,可以从一定程度上强制矫正这个问题。至少可以让车身附近的全景图效果更佳,而我们的avm系统最在意的恰好就是车身周围这部分,距离车身远的部分也不会呈现出来。如图所示为某厂DIY的标定布示意图。

75dcd6e9c53b2da8b234e439145f8396.jpeg

DIY标定布

3.3.2尽量让棋盘格处于相机拍摄图像的中心

鱼眼相机在中心部分畸变小,边缘位置畸变大。去畸变的结果通常也是中间的效果好,边缘残留的畸变多。因此,为了使单应矩阵计算的更佳准确,我们要保证标定布摆放的时候棋盘格位于鱼眼相机中央。这也是为什么某宝上标定布使用的示意图通常是图(2)这种,而不是图(1)。很显然,图(2)中棋盘格位于左侧后视镜附近(左鱼眼相机就在左后视镜上),即相机图像的中间位置,而图1中棋盘格则在相机图像边缘上。

bdf8901f15a76a45a4e1d033f06b666e.jpeg

左侧鱼眼相机鸟瞰图(1)(2)

4.拼接融合

经过3中的投影变换,我们得到4张包含重叠区域的鸟瞰图如图所示,需要将这些鸟瞰图进行拼接融合。

8569e120203abe39c4149eda9073e213.jpeg

鸟瞰图

以左、前鱼眼相机俯视图为例,观察下它们的重叠区域重叠区域:

f1d4fa6fc5f8570f56cc5c42dbdaea3b.jpeg

白色为重叠区域、AB为前鸟瞰图边界、CD为右鸟瞰图边界

通常的做法是分别以AB、CD为边界,计算白色区域像素点与AB、CD之间的距离,然后计算一个权重,距离CD越近的位置,前俯视图权重越大;距离AB越近的位置,左俯视图权重越大。但会出现边界效应如图所示:

0d9ca05e67c031b0d23a00333568ba26.jpeg

前俯视图权重图

其原因也很容易理解:如图所示,将AB、CD延长至O点,在EAOCE这个区域内,使用上述方法计算权重图才是一个完整连续的模型,如果在EABFDCE这个区域内计算权重图相当于把一个完整连续的域强行截断,计算得到的权重图必然是有截断痕迹的

b8ef6decb304bc001d8a87c0ece3ac9e.jpeg

完整、连续模型示意图

因此需要使用某种策略,让我们在一个连续的作用域上计算权重,这里提供一个思路[3]:在EAFCE这个连续的作用域中计算权重,得到一个非常漂亮的权重图:

0890010d14c80ff551be09c088b3dc87.jpeg

连续模型和权重图

5.基于光流的鸟瞰图微调

在整个AVM系统中,厂家提供的畸变表、焦距、相机主点位置,联合标定使用的标定布都会引入误差。这些误差会导致生成的鸟瞰图在重叠区域有一些偏移。第4小节中的拼接融合模块是为了让鸟瞰图在覆盖区域过渡平滑,尽量避免伪影现象。但是我们不能将这个压力全部施加给拼接融合模块。因此需要在拼接融合模块之前,对鸟瞰图进行微调,这个微调功能是供客户或者4S店人员进行手动调节的。
在调研中发现,现在很多部署在车上的AVM系统都包含有微调功能。但大部分都存在一个问题:只能保证一边是对齐的,另外一边拼不齐。例如,前面对齐后面对不齐。
作者使用了[4],将前、后微调光流图进行融合,得到一个平缓过渡的光流图,兼顾了前后两侧的微调。以左俯视图为例,算法流程如下:

  • 固定住前、后两个鸟瞰图

  • 手动微调左鸟瞰图,使左鸟瞰图与前鸟瞰图之间的重叠区域贴合。记录微调矩阵M1,并根据矩阵计算光流map1

  • 手动微调左鸟瞰图,使左鸟瞰图与后鸟瞰图之间的重叠区域贴合。记录微调矩阵M2,并根据矩阵计算光流map2

  • 根据像素距离计算map1与map2的权重图w,即距离前鸟瞰图越近,map1的权重越大,反之则越小

  • 使用w对map1和map2进行加权融合

当微调矩阵M1和M2方向正好相反时,这个基于光流的思想可以很好地将两者融合,因为矩阵变换是比较“硬”的一种数学方法,而光流却像水一样的“软”。看下前后对比的融合效果图吧:

f4be4561f3f74096f806a0a7b27111fb.jpeg

左侧为普通的融合效果 右侧为基于光流思想微调后的效果

可以看出这个方法可以兼顾前、后的微调效果。可以理解为将拼接区域的误差均摊给中间的区域,而中间这部分区域不存在拼接融合的问题,而且我们在泊车的过程中更注重的是车与周围物体的相对位置而非周围物体的精确位置,因此实际看上去也没什么问题。

6. 三维模型纹理映射

2D的AVM算法是基于投影变换,将鱼眼图像投影到鸟瞰图上。而单应变换有一个前提:就是平面假设。是把一个平面投影到另外一个平面。存在的问题是:图像中所有的三维物体,例如汽车、柱子、墙,全部被当成平面来处理。这些内容在鸟瞰图上会被拉的很长,如图所示:

5ea98394421e0b9685b22a1d16f09f2a.jpeg

2D图像中的三维物体

左侧为墙,右侧为车(没错就是车的前杠被拉的好长)。

安装在车身周围的鱼眼相机是单目相机,单目相机不能获取三维物体的深度。在图形学中有一种真实感增强的方法:制作一个三维模型,把二维的纹理贴图以某种方式映射到三维模型上,3D AVM正是使用了这个纹理映射技术,为驾驶员呈现出一个伪3D的效果。

6.1 AVM 3D模型构建

3D模型是由一个个小面片构成的,可以是三角面片、多边形面片等等。面片又是由多个顶点构成的,例如三角面片对应的就是3个顶点。我们先来直观地看一个三维模型:

744c1a343ec85d8ba7b850d4ff2fbe16.jpeg

3dsMax三维模型

放大看可以看到,3D模型是由很多个小的多边形面片构成。3D模型的文件形式有很多种,但大体上都是包含:模型顶点、面片、纹理坐标、法向量这些三维信息。具体如何使用3dsMax来制作3D模型,就不叙述了,作者不是专业的美工,方法可能不太聪明,领会精即可。

AVM 3D模型是一个碗状的三维模型。模拟驾驶员视角,即汽车周围附近是路面,这部分直接映射到碗底平面上;而距离汽车较远的位置可能是楼房、树木、墙等三维物体,这部分内容将使用某种方式映射到三维点上。下面展示的就是我们的3d模型中的必要信息,包含顶点坐标、纹理坐标、法向量、三角面片索引。

6.2 三维模型纹理映射

这一小节讲述的是:

(1)纹理映射是从哪里映射到哪里

(2)采用哪种策略进行映射

我们的最终目标是:找到3d模型上每个顶点对应在鱼眼2d图像上的纹理坐标。
作者采用的是一种基于虚拟相机思想的3d纹理映射方法[5],如图所示:

54113bcf31903ffa18cd3c7b47e7cffd.jpeg

基于虚拟相机思想的3d纹理映射模型

假设2D AVM的全景鸟瞰图是由汽车正上方某个虚拟相机拍摄到的图,将其当作2D纹理,以透视投影的方法映射到3d模型上面。图中Lw-Rw为全景俯视图,虚拟相机与顶点A的直线在鸟瞰图上的交点为A',从而得到A顶点对应的2D纹理映射坐标A'。然后通过逆投影变换H_inverse、畸变mapx、mapy查找到3d模型的顶点A在鱼眼相机上的纹理坐标。遍历3d模型上的每一个点,即可得到三维模型与鱼眼相机纹理坐标之间的映射关系:

  • 根据透视投影原理,计算顶点A对应的鸟瞰图纹理A'

  • 使用矩阵变换和单应变换逆推A'在去畸变图上的坐标A1

  • 通过去畸变的查找表map查找A1在鱼眼相机畸变图上的坐标

  • 遍历上述过程,即可得到3D模型上所有顶点对应鱼眼图上的纹理坐标

具体流程如图所示:

6dfa3280952f710d77a1a2238f86ae45.jpeg

3d模型纹理映射流程

看下效果:这个模型的法向量是反的,所以渲染的结果光线有问题,非常的暗。不过可以看到伪3D的真实感增强效果,领会精神即可。

d32950faf10887c3c556a77873692ce3.jpeg

右侧模型映射

6.3 三维融合

实际上作者使用的是前、后、左、右4个曲面模型,这4个曲面模型与4路鱼眼图像一一对应,这样做是为了增加OpenGl渲染的并行,避免在做拼接融合时用到if、else这些判断语句。上图中的3d模型就是左侧鱼眼相机对应的曲面模型。

我们先来回顾2D AVM的做法:生成鸟瞰图,然后做融合。我们当时生成的鸟瞰图大小为1080*1080,这个分辨率等同于现实世界中的1080cm*1080cm,足以显示车身周围。但是,这个范围最多只能映射到3d碗模型的底部附近区域,如下图:忽略边上的锯齿,那是渲染时插值的bug,先不去管他。从这图可以看出:如果鸟瞰图选的很小,会导致只映射到碗的底部。

e2770e7f8a72df7b9b1b51339ceaf7dc.jpeg

小鸟瞰图映射到模型上

我们把鸟瞰图的尺寸放大,可以看到:

b229de69504012af375f06c7feefe2fe.jpeg

大鸟瞰图映射到模型上

图1为左侧鱼眼相机去畸变后的图像,图2是由图1做投影变换得到的鸟瞰图,图3为映射到左侧模型后的结果

这里要注意:在算法实现上不可以像2D AVM那样,去真正地生成一个鸟瞰图。从鸟瞰图我们不难看出,在远离棋盘格的部分被严重拉长,而图1中接近消失点、消失线的那些像素在鸟瞰图上将会被拉到无穷远。可以这样理解,图一中的消失点、消失线表示:在当前的相机位姿,某一个平面上(例如地面)的点全部在这条消失线以下。而鸟瞰图相当于我们把相机平行于地面进行拍摄,那么地平面无穷远处(即1中的消失点、消失线)成像在鸟瞰图中必然会被拉长到无穷远处,就像图2一样。有兴趣的同学可以看看消失点的解释。

1910e1c8a7c7d7a15ad460347fa5e2c8.jpeg

消失点

如果想要将整个碗状模型填满纹理,需要生成一个特别大的鸟瞰图。即需要计算一个特别大的map,这个计算量是巨大的。因此在算法实现上,要选用遍历模型上的每个顶点,进行逆向纹理映射的方法计算纹理坐标(不再依赖于生成一个鸟瞰图),顶点之间的空缺将由渲染引擎通过插值的方法进行填充,这个是种成熟的技术。

讲了这么多终于说到三维的融合。2D的融合是对鸟瞰图的覆盖区域做形态学操作,得到下图,然后计算权重。而3D的算法强调的是离散点的思维,不会再生成一个超级大的鸟瞰图。换句话说,算法不会再计算一个像下图一样覆盖区域的图像。因此,要寻找其他的方式来解决3D融合的问题。

d7452fb0b64fb80ee7325986d37cde6a.jpeg

左上角重叠区域

如图所示[6]

b3f96c5be990ec8115c915af2522ecc3.jpeg

右上方重叠区域示意图

大概思路就是计算3D顶点对应鸟瞰图的纹理坐标B。通过AB与m、l的夹角计算权重。

当然,重叠区域不可能这么理想,这个论文中的示意图l和m正好交于A点。实际情况是它上面那个图的样子。需要使用某种专门针对3D AVM融合的策略来实现之[7]。将3D模型顶点对应的权重图映射到二维的示意图:

78b343ab5e174462ae83942dc77c1147.jpeg

放大看

总体来讲,3D AVM算法就是先搞一个3维模型,然后通过纹理映射,将3维模型上的每一个顶点与二维的纹理图进行绑定。OpenGl利用上述数据进行渲染。最终的3D效果后续会发上来。

在线阶段工程实现pipeline

前面介绍的是离线阶段的算法流程,离线阶段只有在流水线上或者4s店才会用到,是一个初始化的过程。初始化的内容包括:畸变表、投影变换矩阵、纹理映射关系、拼接融合权重图等。最重要的是要将去畸变、投影变换、纹理映射这些过程写入一个查找表,存入内存,在线处理的时候直接调用即可。附上部分代码,对map做remap这块可能会稍微难理解一些。

 
 
  1. //4个label是鸟瞰图在avm全景上的位置坐标for (int i = label1; i < label2; i++){
  2. float *map2_x = map2_xR.ptr<float>(i);
  3. float *map2_y = map2_yR.ptr<float>(i);
  4. for (int j = label3; j < label4; j++)
  5. {
  6. Mat vec = (Mat_<double>(3, 1) << j, i, 1);//AVM全景图的grid网格坐标 vec = matrix * (vec);//获取鸟瞰图坐标 Mat coor = Homo_inverse * vec;//从鸟瞰图反向投影到去畸变图 map2_x[j] = coor.at<double>(0, 0);
  7. map2_y[j] = coor.at<double>(1, 0);
  8. }}//map1(畸变) remap map2(投影+旋转)remap(map1_y, my, map2_xR, map2_yR, INTER_LINEAR);remap(map1_x, mx, map2_xR, map2_yR, INTER_LINEAR);//畸变+投影+旋转+finetuneif (finetune){
  9. remap(mx, mx, m_finetune_l_blendX, m_finetune_l_blendY, INTER_LINEAR, BORDER_REPLICATE);
  10. remap(my, my, m_finetune_l_blendX, m_finetune_l_blendY, INTER_LINEAR, BORDER_REPLICATE);}
  • 2D AVM

34ceb79e67137ebbcca74532a45b773c.jpeg

2D AVM Pipeline

  • 3D AVM

e8000945ddd6197e95fe58019eb63e4a.jpeg

3D AVM Pipeline

其他

另外还有一种做法:通过厂家提供的相机安装参数计算鱼眼相机与同意坐标系(汽车中心)之间的外参,通过外参将3d模型上的顶点坐标转换到相机坐标系下,再通过相机内参转换到图像坐标系上。用此方法同样可以得到2d图像纹理与3d模型顶点之间的一一映射关系。这两种方法的基本思想其实是相通的,殊途同归。只不过这种方法相机安装参数会有一些误差,可能会导致最终的3d拼接效果不佳。

总结

AVM2D、3D全景环视是一个需要算法理论和实践强结合的自动驾驶系统,其中涉及到的领域为计算机视觉、图像增强、三维等。后续作者还会对标定、去畸变等算子进行优化,并加入自标定、车轮视角、广角、透明底盘等内容。

本文的每个章节都是首先讲述基础理论,再结合实验demo来进行呈现,尽量避免繁琐的公式推导,目的在于将AVM系统算法框架搭建的方法讲述清楚。如果有不清楚或者哪里说的不够严谨,欢迎大家一起交流进步。

参考

^A generic camera model and calibration method for conventional, wide-angle, and fish-eye lenses

^3D Surround View for Advanced Driver Assistance Systems

^《自动泊车全景影像融合算法》

^《基于光流融合的自动泊车全景影像微调算法》

^《基于虚拟相机的曲面透视投影纹理映射的3DAVM泊车系统》

^3D Surround View for Advanced Driver Assistance Systems

^《3D AVM系统融合算法》

本文仅做学术分享,如有侵权,请联系删文。

3D视觉工坊精品课程官网:3dcver.com

1.面向自动驾驶领域的多传感器数据融合技术

2.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
3.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
4.国内首个面向工业级实战的点云处理课程
5.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
6.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
7.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
8.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

9.从零搭建一套结构光3D重建系统[理论+源码+实践]

10.单目深度估计方法:算法梳理与代码实现

11.自动驾驶中的深度学习模型部署实战

12.相机模型与标定(单目+双目+鱼眼)

13.重磅!四旋翼飞行器:算法与实战

14.ROS2从入门到精通:理论与实战

15.国内首个3D缺陷检测教程:理论、源码与实战

16.基于Open3D的点云处理入门与实战教程

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流、ORB-SLAM系列源码交流、深度估计等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

f3761597beef0167fee9bde879027807.jpeg

▲长按加微信群或投稿

0060e020bafdebefd8b0b8f3dd6f8839.jpeg

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定激光/视觉SLAM自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

f428e2940ec7a7598c18ef5aa7915fb4.jpeg

 圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/820218
推荐阅读
相关标签
  

闽ICP备14008679号