0. 简介

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

1. AVM算法分类

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

2D AVM

3D AVM

2. 镜头去畸变标定

首先我们需要获取每个相机的内参矩阵与畸变系数。以下是视频中四个相机分别拍摄的原始画面,顺序依次为前、后、左、右,并命名为 front.pngback.pngleft.pngright.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的方法是需要标定相机的外参,然后通过厂家提供的相机安装参数将四路鱼眼全部统一到车身坐标系下,而我们不需要这个过程,只需要用标定布来做联合标定。其实两种方法内部都是相通的,都绕不开计算相机外参这件事情。

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

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

这四个点是可以自由设置的,当你在校正图中点击这四个点时,OpenCV 会根据它们在校正图中的像素坐标和在鸟瞰图中的像素坐标的对应关系计算一个射影矩阵。这里用到的原理就是四点对应确定一个射影变换 (四点对应可以给出八个方程,从而求解出射影矩阵的八个未知量。注意射影矩阵的最后一个分量总是固定为 1)。

…详情请参照古月居

AVM 环视拼接方法介绍相关推荐

  1. AVM环视拼接方法介绍

    1. 简介 关于车辆的全景环视系统网上已经有很多的资料,然而几乎没有可供参考的代码,这一点对入门的新人来说非常不友好. 全景环视系统,又称AVM.在自动驾驶领域,AVM属于自动泊车系统的一部分,是一种 ...

  2. Python里面数组拼接方法介绍

    numpy数组拼接方法介绍 转载来源:https://blog.csdn.net/zyl1042635242/article/details/43162031 数组拼接方法一 思路:首先将数组转成列表 ...

  3. Go语言中的字符串拼接方法介绍

    本文介绍Go语言中的string类型.strings包和bytes.Buffer类型,介绍几种字符串拼接方法. 目录 string类型 strings包 strings.Builder类型 strin ...

  4. python加号换行,Python字符串拼接六种方法介绍

    Python字符串拼接的6种方法: 1.加号 第一种,有编程经验的人,估计都知道很多语言里面是用加号连接两个字符串,Python里面也是如此直接用"+"来连接两个字符串: prin ...

  5. 自动泊车之AVM环视系统算法框架

    AVM(Around View Monitor),中文:全景环视系统.在自动驾驶领域,AVM属于自动泊车系统的一部分,是一种实用性极高.可大幅提升用户体验和驾驶安全性的功能.AVM已经是一种较为成熟的 ...

  6. AVM环视系统算法框架

    "智能汽车生态群"加微信Time-machine-(备注公司+姓名) AVM(Around View Monitor),中文:全景环视系统.在自动驾驶领域,AVM属于自动泊车系统的 ...

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

    作者丨中投靓仔@知乎 来源丨https://zhuanlan.zhihu.com/p/534553717 编辑丨3D视觉工坊 AVM(Around View Monitor),中文:全景环视系统.在自 ...

  8. ADAS摄像头图像环视拼接算法

    ADAS摄像头图像环视拼接算法 输入输出接口 Input: (1)4个摄像头采集的图像视频分辨率 (整型int) (2)4个摄像头采集的图像视频格式 (RGB,YUV,MP4等) (3)摄像头标定参数 ...

  9. Python爬取B站弹幕方法介绍

    Python爬取B站弹幕方法介绍 文章目录 Python爬取B站弹幕方法介绍 前言 寻找弹幕数据 编写爬虫 B站弹幕数量 新技术介绍 参考文章 前言 最近同学要做东西,需要用 B 站的视频对应的弹幕数 ...

最新文章

  1. 两个小模型就能吊打大模型!北大校友、谷歌华人一作「模型集合」,CNN、Transformer都适用!...
  2. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY11-特征选择和稀疏学习
  3. MATLAB调用python文件方法
  4. SpringBatch读文件(FlatFileItemReader)写据库(MyBatisBatchItemWriter)(四)
  5. svn clean up 出错解决方案
  6. oracle 中的常用exception
  7. Visual Studio 2010中C++项目升级指南
  8. linux下tar解压特定的目录
  9. java ee各类组件_在Java EE组件中使用骆驼路线
  10. php5.6代码转换7.1,通过PHP5.6源代码在WINDOWS 7下进行编译生成(最详细步骤)
  11. spyder python调试查看类信息_使用Spyder进行Python调试
  12. switch case 遇到判断type分支的写法
  13. 《iOS 6核心开发手册(第4版)》——1.13节秘诀:从滚动视图中拖动
  14. wo-mic ,audioRelay设置
  15. 2021年中国程序员薪资和生活现状调查:年薪5-25万之间占比66.3%
  16. c语言趣味菜单实验报告,DSP实验报告+心得体会
  17. led灯光衰怎么解决_LED路灯光衰问题解决方法
  18. Python 从入门到入魔
  19. 第3章第32节:图形的应用:使用图形表达并列关系的内容 [PowerPoint精美幻灯片实战教程]
  20. openstack(云主机热迁移)

热门文章

  1. [Darktable]dt源码分析(未完)
  2. 北大计算机所孙俊教授,教育部人工智能咨询专家孙俊:科技怎样赋能智慧教育?...
  3. java 图片相似搜索_java获取两张图片的相似度
  4. md5sum命令的使用
  5. 积微——荀子《强国篇》,给每个职场人士推荐
  6. Failed to introspect Class [com.controller.HardWareController] from ClassLoa在ssm中读取串口信息
  7. Android APK打包流程
  8. 关键词:MAU,DAU,DAU/MAU
  9. HTML和CSS隐藏元素的四种方法
  10. H.264笔记整理3