引言

“ 汽车360影像是一项比较先进的技术,它通过多个高清摄像头将车辆的外部环境进行拍摄,并将这些影像进行处理和融合,以生成一张完整的全景图像。这种技术已经被广泛应用于汽车行业,为驾驶员提供了更加全面、直观的视觉体验,同时也大大提高了汽车的安全性能。今天,我们将参考github开源项目介绍汽车360影像的原理及其工作方式,理解其背后的原理与奥秘。(原github链接见文章末尾)”

汽车360影像介绍

汽车360影像是一种先进的汽车影像技术,它可以让车主在驾驶汽车时,获得全方位的视角,从而更加清晰地了解车辆周围的环境。该技术通过安装摄像头和传感器在汽车周围不同位置,将所得到的图像和数据集成在一起,形成全景影像,让车主可以通过车载显示屏或智能手机APP观看。

一般汽车360影像主要由四个鱼眼相机和四个超声波探头组成,分别安装在汽车前、后、左、右四个方向。每个摄像头都可以拍摄一个特定角度的视野,四个摄像头的图像通过一个中央控制器集成在一起,形成一个完整的360度全景图像。这些图像可以用于检测并显示汽车周围的障碍物和其他车辆,让车主更加容易地掌握车辆周围的情况。典型的安装位置如下所示:

另外,一些装配了L2辅助驾驶系统的汽车还配备了如毫米波雷达以及超声波雷达等传感器,这些传感器可以感知汽车周围的环境,包括车辆距离、车速、方向等信息。通过这些传感器提供的数据,搭配汽车360影像系统可以实现自动泊车、避免碰撞等功能,大大提高了驾驶的安全性。

最后,汽车360影像技术的应用也在不断拓展。例如,在电动汽车领域,汽车360影像技术可以帮助驾驶员更好地了解电动汽车周围的充电设施、充电状态等信息,从而更好地规划充电路线。此外,汽车360影像技术还可以应用于自动驾驶领域,通过全方位影像和数据提供更全面、准确的感知信息,实现更加智能、高效的自动驾驶。

基本原理

透视变换

由于汽车环视相机安装一般是斜向下的角度,因此原始相机输出的图像并不是俯视图(这里我们假定相机输入环视拼接模块的图像是已经经过去畸变矫正的图像)。因此要达到鸟瞰图的效果,相机输出的图像必须需要经过投影到新的俯视视角,如下图所示:

这个视角变换的过程叫透视变换,这里可以用矩阵变化来表示图像中某一个点的变化,其表达式如下所示:


在生活中一个典型的例子就是在使用iPhone手机扫描身份证时,即使我们有时是从不同角度不规则拍摄,但最后iPhone依然会给我们修正成正常形状的身份证,这个过程就是透视变换的典型应用,以方块演示身份证透视变换如下所示:

透视变换重要的一点是找出原坐标系与新坐标系的转换矩阵,还是以上图为demo,我们知道原图的四个顶点坐标以及转换后的顶点坐标,然后带入转换方程求解便可以求解出转换矩阵。矩阵求解这里不再细讲,后面我们会出一篇专栏使用OpenCV来演示透视变换的过程。

透视变换标定

经过2.1部分我们知道了,单个相机可以通过透视变换完成视角的转换,但是有两个问题随之浮出:

  • 如何确定转换后的坐标呢?
  • 如何将四个相机投影到一个坐标系呢?
    上述两个问题的答案就是标定。一般情况下标定需要在车的四角放置标定chart,需要注意的是,标定chart的摆放位置需要保证相邻的两个chart都可以看到斜对角,典型的摆放位置如下图所示:

    我们已知要输出拼接后鸟瞰图大小,并且已经预设好标定板对应(Xm, Ym)在鸟瞰图中的位置,那么对应的四个环视相机看到的两个chart投影后的位置便已经知道了,然后又知道原始坐标在图像中的位置,我们就可以求出投影矩阵。以前环视为例,其标定示例如下图所示,上面是相机输出的去畸变图像,下图是预设好的的鸟瞰图坐标系:


同理,其余三个相机的投影矩阵也可以这样求出。然后再将变换后的图像投影到鸟瞰图中即可。

图像拼接问题

在四个环视投影矩阵求解完毕之后,我们便可以将四个环视相机的图像进行投影输出,但在不同相机投影到同一个平面时就会出现两个问题:

  • 问题1:
    由于四个相机分布于车的不同的部位,虽然相机白平衡、AE策略等可能相同,但是由于亮度、色温、灯光等环境差异,四个环视相机还是会出现亮度以及颜色的差异。如下图所示:

  • 问题2:
    另外就是不同相机在拼接处拼接时,由于标定后的图像在拼接处不可能完美重合,因此在拼接处如果不做处理会有明显的重影断代现象,因此这些需要在拼接时进行优化处理。如下图所示:

  • 针对问题1:
    各个相机白平衡需要再做一次白平衡,可以使用灰度世界法等。另外,在做白平衡R、G、B分量统计时需要算每个相机图像和整体R、G、B分量平均亮度的的一个增益系数,这样亮度就可以达到四个相机统一。

  • 针对问题2:
    每两个相机之间的overlap区域我们将其提取出来,如下:

    然后白色mask之外区域使用各自相机的原始数据,白色mask之内的数据采用距离计算的方法计算权重值,离中心越近,比值越高、离中心越远,权重越低这样我们就可以得到下面的一个权重图

    最后,有重叠区域的两个图进行叠加的时候根据权重值来叠加即可。

结束语

原作者采用python开发,后面我们将基于原开源代码修改成c++版本进行实现并开源,请小伙伴们多多关注,开源GitHub链接:

https://github.com/neozhaoliang/surround-view-system-introduction

感谢各位读者耐心阅读本文,希望我们的介绍让你更加了解汽车360环视的原理和优势。随着汽车科技的不断进步,我们相信汽车360环视技术将在未来得到更加广泛的应用和推广,为驾驶者的安全出行提供更加全面、便捷的保障。如果您对汽车科技、智能驾驶等话题感兴趣,欢迎关注我们的公众号 ADAS之眼,获取更多相关信息和技术资讯。


ADAS-开源环视360全景拼接代码原理分析与实现(一)相关推荐

  1. KMP算法之NEXT数组代码原理分析 - 数据结构和算法38

    KMP算法之NEXT数组代码原理分析 让编程改变世界 Change the world by program KMP算法之NEXT数组代码原理分析 NEXT数组:当模式匹配串T失配的时候,NEXT数组 ...

  2. 数据结构与算法之KMP算法中Next数组代码原理分析

    2019独角兽企业重金招聘Python工程师标准>>> 一.KMP算法之Next数组代码原理分析       1.Next数组定义 当模式匹配串T失配的时候,Next数组对应的元素指 ...

  3. onnx_calibrate calibration代码原理分析

    Onnx_calibrate calibration代码原理分析 Calibration的思想是通过一堆验证数据集输入到网络中,统计每一层layer的输出值,通过对比量化前后数据统计分布之间的KL散度 ...

  4. 《一周学完光线追踪》学习 十一点五 离焦模糊代码原理分析

    蒙特卡洛光线追踪技术系列 见 蒙特卡洛光线追踪技术 首先分析一下生成随机Ray的程序: vec3 random_in_unit_disk() {vec3 p;do {p = 2.0*vec3(rand ...

  5. unity 双指触控(以及多指触摸的代码原理分析)

    双指触摸规律:从第一根触摸的手指开始 ,会从0开始为其编号,假设中间抬起手指,假设现在有两根手指,抬起编号为0的手指的话,将会导致原本编号为1的手指编号变为0,而当再次按下一根新手指时,原本编号0的手 ...

  6. 树莓派学习笔记(十六)编写内核驱动操控IO口代码原理分析

    驱动源码.测试源码可查看博文:内核驱动操控IO口源码(pin4引脚) 寄存器地址.引脚对应的位数等原理可查看博文:BCM2835芯片手册导读 1.驱动代码编写 框架查看博文:基于框架编写驱动 1.1 ...

  7. Redux-React 代码原理分析

    目标 react使用redux的主要目的是: 1)实现简洁统一的状态维护,提高代码可维护性: 2)实现简洁的注入依赖,避免重重传递参数: Plug Any Data Into Any Componen ...

  8. RocketMQ延迟消息的代码实战及原理分析

    RocketMQ简介 RocketMQ是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的.高可靠.万亿级容量.灵活可伸缩的消息发布与订阅服务. 它前身是MetaQ,是阿里基于Kafka ...

  9. 后门BROOTKIT代码学习和原理分析

    周末闲来无事,想找点东西学习一下,随手翻到了之前看到的一篇关于brootkit的文章,知道它是用Bash写的一个后门程序.刚好最近在做Bash相关的工作,就想着学习一下这方面的知识,稍作整理之后就有了 ...

最新文章

  1. DSP学习初阶的一些笔记
  2. J20170524-hm
  3. linux的引导流程
  4. hdu4662 简单搜索打表
  5. java md5加密32位小写_Java生成MD5的方法,简单封装并转为32位小写
  6. 远程工具:MobaXterm使用图文教程
  7. this指针 java_彻底理解Java中this指针
  8. CentOS安全设置
  9. 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
  10. body curl命令测试post_HTTP接口调试利器!4.8万Star的HTTP命令行客户端!
  11. mysql concat函数进行模糊查询
  12. netty中ChannelHandler执行顺序案例详解
  13. 计算机配机方案和理由,配机方案
  14. android 自动阅读新闻,Android 用Groovy实现扇贝阅读APP的自动阅读功能
  15. 几种公共图床Python调用
  16. zip压缩包太大无法用unzip成功解压(保姆级)
  17. 【广州大学】数据结构课程设计:神秘国度的爱情故事
  18. uefi+guid分区与legacy+mbr分区_硬盘分区表格式GUID和MBR知识普及
  19. 排序算法之简单插入排序法
  20. PhotoShop使用1 - 图片的新建,裁剪,图像大小的修改,移动工具

热门文章

  1. SAP 发货过账 遇到问题该怎么解决 求教!!
  2. 货款监管存疑 电商开放平台难逃自建支付
  3. 我国跨境电商进出口规模5年来增长近10倍
  4. javascript数组创建
  5. 面向对象之数值的悲剧
  6. 软底有软件测试培训吗,【4月3日】一站式线上学习课程——一年级 鼠小弟云课堂开讲啦!...
  7. 【2016】多花时间修炼不完美的自己-致最爱的自己
  8. FileSaver.js
  9. Python - 代码片段,Snippets,Gist
  10. spring操作transactionManager