• 601查看
  • 0回复

[硬件底层] ADAS-开源环视360全景拼接代码原理分析与实现(一)

[复制链接]


该用户从未签到

发表于 26-8-2023 14:57:44 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


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

ADAS-开源环视360全景拼接代码原理分析与实现(一)w1.jpg

01—
汽车360影像介绍
汽车360影像是一种先进的汽车影像技术,它可以让车主在驾驶汽车时,获得全方位的视角,从而更加清晰地了解车辆周围的环境。该技术通过安装摄像头和传感器在汽车周围不同位置,将所得到的图像和数据集成在一起,形成全景影像,让车主可以通过车载显示屏或智能手机APP观看。
一般汽车360影像主要由四个鱼眼相机和四个超声波探头组成,分别安装在汽车前、后、左、右四个方向。每个摄像头都可以拍摄一个特定角度的视野,四个摄像头的图像通过一个中央控制器集成在一起,形成一个完整的360度全景图像。这些图像可以用于检测并显示汽车周围的障碍物和其他车辆,让车主更加容易地掌握车辆周围的情况。典型的安装位置如下所示:

ADAS-开源环视360全景拼接代码原理分析与实现(一)w2.jpg

另外,一些装配了L2辅助驾驶系统的汽车还配备了如毫米波雷达以及超声波雷达等传感器,这些传感器可以感知汽车周围的环境,包括车辆距离、车速、方向等信息。通过这些传感器提供的数据,搭配汽车360影像系统可以实现自动泊车、避免碰撞等功能,大大提高了驾驶的安全性。
最后,汽车360影像技术的应用也在不断拓展。例如,在电动汽车领域,汽车360影像技术可以帮助驾驶员更好地了解电动汽车周围的充电设施、充电状态等信息,从而更好地规划充电路线。此外,汽车360影像技术还可以应用于自动驾驶领域,通过全方位影像和数据提供更全面、准确的感知信息,实现更加智能、高效的自动驾驶。
02—基本原理
2.1 相机透视变换
由于汽车环视相机安装一般是斜向下的角度,因此原始相机输出的图像并不是俯视图(这里我们假定相机输入环视拼接模块的图像是已经经过去畸变矫正的图像)。因此要达到鸟瞰图的效果,相机输出的图像必须需要经过投影到新的俯视视角,如下图所示:

ADAS-开源环视360全景拼接代码原理分析与实现(一)w3.jpg

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

ADAS-开源环视360全景拼接代码原理分析与实现(一)w4.jpg

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

ADAS-开源环视360全景拼接代码原理分析与实现(一)w5.jpg

透视变换重要的一点是找出原坐标系与新坐标系的转换矩阵,还是以上图为demo,我们知道原图的四个顶点坐标以及转换后的顶点坐标,然后带入转换方程求解便可以求解出转换矩阵。矩阵求解这里不再细讲,后面我们会出一篇专栏使用OpenCV来演示透视变换的过程。
2.2 透视变换标定
经过2.1部分我们知道了,单个相机可以通过透视变换完成视角的转换,但是有两个问题随之浮出:
    如何确定转换后的坐标呢?如何将四个相机投影到一个坐标系呢?
上述两个问题的答案就是标定。一般情况下标定需要在车的四角放置标定chart,需要注意的是,标定chart的摆放位置需要保证相邻的两个chart都可以看到斜对角,典型的摆放位置如下图所示:

ADAS-开源环视360全景拼接代码原理分析与实现(一)w6.jpg

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

ADAS-开源环视360全景拼接代码原理分析与实现(一)w7.jpg
同理,其余三个相机的投影矩阵也可以这样求出。然后再将变换后的图像投影到鸟瞰图中即可。
2.3 图像投影拼接问题
在四个环视投影矩阵求解完毕之后,我们便可以将四个环视相机的图像进行投影输出,但在不同相机投影到同一个平面时就会出现两个问题:
问题1:由于四个相机分布于车的不同的部位,虽然相机白平衡、AE策略等可能相同,但是由于亮度、色温、灯光等环境差异,四个环视相机还是会出现亮度以及颜色的差异。如下图所示:

ADAS-开源环视360全景拼接代码原理分析与实现(一)w8.jpg

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

ADAS-开源环视360全景拼接代码原理分析与实现(一)w9.jpg

针对问题1:各个相机白平衡需要再做一次白平衡,可以使用灰度世界法等。另外,在做白平衡R、G、B分量统计时需要算每个相机图像和整体R、G、B分量平均亮度的的一个增益系数,这样亮度就可以达到四个相机统一。
针对问题2:每两个相机之间的overlap区域我们将其提取出来,如下:

ADAS-开源环视360全景拼接代码原理分析与实现(一)w10.jpg

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

ADAS-开源环视360全景拼接代码原理分析与实现(一)w11.jpg

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

结束语

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

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

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

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 20-11-2024 19:21 , Processed in 0.763277 second(s), 36 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.