AVM 环视拼接方法介绍

0. 简介
关于车辆的全景环视系统网上已经有很多的资料,然而几乎没有可供参考的代码,这一点对入门的新人来说非常不友好。全景环视系统,又称AVM。在自动驾驶领域,AVM属于自动泊车系统的一部分,是一种实用性极高、可大幅提升用户体验和驾驶安全性的功能。AVM汽车环视影像系统如图所示,由安装在前保险杠、后备箱、后视镜上的四个外置鱼眼相机构成。该系统包含的算子按照先后顺序:去畸变、四路鱼眼相机联合标定、投影变换、鸟瞰图微调、拼接融合、3D模型纹理映射等。下面我们将围绕着算子的先后顺序来对AVM进行介绍。

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

2D AVM

3D AVM

2. 镜头去畸变标定
首先我们需要获取每个相机的内参矩阵与畸变系数。以下是视频中四个相机分别拍摄的原始画面,顺序依次为前、后、左、右,并命名为 front.png、back.png、left.png、right.png .你可以看到图中地面上铺了一张标定布,这个布的尺寸是 6mx10m,每个黑白方格的尺寸为 40cmx40cm,每个圆形图案所在的方格是 80cmx80cm。我们将利用这个标定物来手动选择对应点获得投影矩阵。

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

3. 四路鱼眼联合标定
接下来我们需要获取每个相机到地面的投影矩阵,这个投影矩阵会把相机校正后的画面转换为对地面上某个矩形区域的鸟瞰图。这四个相机的投影矩阵不是独立的,它们必须保证投影后的区域能够正好拼起来。

这一步是通过联合标定实现的,即在车的四周地面上摆放标定物,拍摄图像,手动选取对应点,然后获取投影矩阵。

请看下图:

每个标定板应当恰好位于相邻的两个相机视野的重合区域中。

在上面拍摄的相机画面中车的四周铺了一张标定布,这个具体是标定板还是标定布不重要,只要能清楚的看到特征点就可以了。

然后我们需要设置几个参数:(以下所有参数均以厘米为单位)

  • innerShiftWidth, innerShiftHeight:标定板内侧边缘与车辆左右两侧的距离,标定板内侧边缘与车辆前后方的距离。
  • shiftWidth, shiftHeight:这两个参数决定了在鸟瞰图中向标定板的外侧看多远。这两个值越大,鸟瞰图看的范围就越大,相应地远处的物体被投影后的形变也越严重,所以应酌情选择。
  • totalWidth, totalHeight:这两个参数代表鸟瞰图的总宽高,在这个里我们设置标定布宽 6m 高 10m,于是鸟瞰图中地面的范围为 (600 + 2 * shiftWidth, 1000 + 2 * shiftHeight)。为方便计我们让每个像素对应 1 厘米,于是鸟瞰图的总宽高为

totalWidth = 600 + 2 * shiftWidth
totalHeight = 1000 + 2 * shiftHeight

  • 车辆所在矩形区域的四角 (图中标注的红色圆点),这四个角点的坐标分别为 (xl, yt), (xr, yt), (xl, yb), (xr, yb) (l 表示 left, r 表示 right,t 表示 top,b 表示 bottom)。这个矩形区域相机是看不到的,我们会用一张车辆的图标来覆盖此处。

设置好参数以后,每个相机的投影区域也就确定了,比如前方相机对应的投影区域如下:


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

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

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

下面就展示了我们使用标定布的过程

然后依次点击事先确定好的四个标志点 (顺序不能错!),得到的效果如下:

点击https://guyuehome.com/39649 可查看全文

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AVM(Around View Monitor)环视拼接算法是指将多个摄像头拍摄到的像进行拼接,得到一张包含车辆周围环境的全景像的算法。AVM环视拼接算法的难点主要有以下几个方面: 1. 摄像头标定:多个摄像头的标定是环视拼接算法的第一步,精确的摄像头标定可以提高后续拼接的精度。但是,摄像头标定的过程需要考虑多个因素,如摄像头内参、外参、畸变等,标定精度的高低直接影响到后续拼接的效果。 2. 像配准:多个摄像头拍摄到的像需要进行配准,以确保拼接后的像无缝连接。对于多个摄像头之间存在视角差异和畸变等问题的情况,像配准的难度会更大。 3. 拼接拼接环视拼接算法的核心,其难点在于如何将多个摄像头拍摄到的拼接成一张无缝连接的全景像。对于环境中存在尺度变化、遮挡、背景变化等问题的情况,拼接的难度会更大。 4. 实时性要求:在车辆行驶过程中,需要实时地获取车辆周围的环境信息,因此AVM环视拼接算法需要具备实时性。在保证拼接精度的前提下,如何提高算法的运行速度是一个难点。 5. 系统稳定性:AVM环视拼接算法需要在车辆行驶过程中长时间稳定地运行,因此需要考虑算法的鲁棒性和容错性,尤其是在恶劣天气和弱光环境下的表现。 综上所述,AVM环视拼接算法的难点主要在于摄像头标定、像配准、拼接、实时性要求和系统稳定性等方面,需要综合考虑多个因素并进行优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值