改进的车载全息透明影像方法①
2022-11-07王焱焱梁树宇李达明
王焱焱,胡 贵,梁树宇,李达明
1(北京工业大学 信息学部,北京 100124)
2(阿波罗智能技术(北京)有限公司,北京 100193)
1 引言
1.1 研究背景
近年来,随着国家经济与科学技术的不断发展,人们物质生活水平不断提升的同时,我国的汽车相关行业也在蓬勃发展.汽车普及给人们带来便利的同时,也产生了交通安全问题.根据国家统计局最近数据显示,截至2020年末,共计发生24.47 万起交通事故,造成6.17 万人死亡和25.07 万人受伤,经济损失达到13.136 1亿元[1].很多交通事故的发生,并不是因为驾驶员驾驶技术不过关.汽车盲区使得驾驶员无法准确了解到汽车周围环境.汽车视野盲区示意图[2],如图1 所示.有调查显示,由汽车视野盲区造成的事故占比高达32%[3].因此,汽车厂商纷纷使用各类手段解决此痛点,车载环视影像应运而生.随着环视影像系统技术的成熟与成本的下降,越来越多的汽车厂商愿意在新款车型中装载环视影像系统.针对9 个自主品牌代表企业旗下车型的驾驶辅助系统应用情况进行分析,产品布局数量占比已经超过50%[4].
图1 汽车视野盲区示意图
1.2 研究现状
全景环视最早由Kato 等人在2006年提出[5].该概念的提出立即得到了各方的关注.次年日产公司发布首个商用产品[6],环景监视系统AVM (around view monitor).后续本田、福尔德、奔驰以及迈隆等公司也推出了相似产品.该系统也由图像直接堆叠过渡到图像融合拼接.2013年富士通公司提出三维全景环视[7,8],从此环视影像由只有鸟瞰图的二维过渡到三维.
车载环视影像,在增加透明底盘功能后,消除了汽车周围的所有盲区,发展为车载全息透明影像.近几年来,高级辅助驾驶前装载量逐渐上升,环视影像作为高级辅助驾驶的主要功能之一,也迎来了快速发展.松下[9]、现代汽车[10]、LG 电子[11]、华为[12]、百度[13]、广汽[14]等企业; 北京交通大学[15]、同济大学[16,17]、普渡大学[18,19]等国内外高校以及研究机构都开始从理论方面入手,结合实践进行深入研究.
图像拼接技术中图像配准是核心技术,根据大量学者的研究,将图像配准算法分为两类,包括基于特征的图像配准算法、基于区域的图像配准算法[20-22].由于基于特征的图像配准算法具有计算量小、速度快等优势,该方式在车载环视影像中应用最广泛[23-25],例如SIFT、SURF 等算法.
首先,车载全息透明影像使用的是视角很大的鱼眼镜头,得到的图像存在明显的畸变,特征值计算比较困难.传统的解决方案先对原图去畸变,然后再对图像裁剪,最后计算特征值.这些操作极大地增加了后续渲染的复杂度.其次,在渲染过程中,每一帧图像都需要有矩阵乘运算,运算量大.再次,相邻两路摄像头的中心轴夹角接近90°,通过特征值求得的仿射变换矩阵存在很大误差,导致车载环视影像在图像拼接处,存在拼接缝的问题,尤其是相对于汽车距离较近的4 个车角处.
针对传统解决方案存在的缺陷和问题,提出了基于距离的Alpha 图像拼接算法,该算法只需在程序启动时计算一次,极大地减小了计算量.并且根据该拼接算法的特性,重新设计了三维模型.对透明底盘功能做了如下3 方面优化: 改进自行车模型算法,达到了减小计算复杂度,提高计算效率的目的; 利用查表法,解决透明底盘与周围拼接错位问题; 采用分层渲染的方法,优化透明底盘功能拼接缝问题.
2 软硬件系统结构与全息透明影像基本原理
2.1 硬件系统结构
全息透明影像的硬件系统,主要包括四路鱼眼摄像头、自动驾驶计算平台、车载视频显示器、整车动力底盘、车身及关键零部件等几部分.自动驾驶计算平台与汽车电子器件的连接结构,如图2 所示.
图2 自动驾驶计算平台与汽车电子器件的连接结构
(1)传感器接入四路鱼眼摄像头通过GMSL 接入、12 路超声波雷达采用12 路硬线的方式接入.
(2)HMI 显示交互: 视频数据通过一路LVDS 输出给中控车机,交互类软开关等信息通过网关路由的CANFD 总线传输.
(3)整车交互: 整车动力底盘、车身等关键零部件通过网关路由的CANFD 总线实现控制和状态报文的实时交互.
四路鱼眼摄像头的视场角为190°-200°; 安装角度为20°-35°; 有效覆盖范围为3-6 m; 前鱼眼摄像头安装在车头前部中央(前格栅附近); 左鱼眼摄像头安装在左后视镜下方; 右鱼眼摄像头安装在右后视镜下方;后鱼眼摄像头安装在车尾后部中央(后备箱把手附近).自动驾驶计算平台的安装位置示意图,如图3 所示.
图3 计算平台安装位置示意图
2.2 软件系统结构
软件系统结构主要分为3 层,依次为硬件层、中间件层和应用层.软件系统结构示意图,如图4 所示.
图4 软件系统结构示意图
全息透明影像位于应用层,它通过消息中间件获得摄像头图像、车速、方向盘转角以及档位等信息.消息中间件屏蔽硬件差异,向上提供统一接口,提供一致化的服务能力.ABS、EPS 以及TCU 分别将车速、方向盘转角、档位等车身信息通过CANFD 总线传递到消息中间件.显示器通过消息中间件获得需要显示的图像.
2.3 全息透明影像基本原理
全息透明影像使用OpenGL 进行图形渲染.OpenGL是一个包含了一系列可以操作图形、图像的API[26].OpenGL 做渲染时自身是一个巨大的状态机,首先需要给状态机设置绘画的属性,其次使用当前属性进行渲染.
OpenGL 的基本属性分别为: 坐标点、纹理和纹理坐标.当用OpenGL 渲染简单三角形时,需要3 个顶点坐标、一张纹理和每个顶点坐标点对应的纹理坐标.顶点确定三角形的形状,纹理确定三角形的颜色,纹理坐标则确定使用纹理什么位置的颜色.渲染三角形的数据格式为{X,Y,Z,U,V},其中(X,Y,Z)为顶点坐标;(U,V)为顶点坐标对应的纹理坐标.三角形渲染流程图如图5 所示.
图5 三角形渲染流程图
全息透明影像渲染使用的三维模型是由很多小三角形组成的.全息透明影像渲染使用的纹理是四路鱼眼摄像头的图像.利用基于距离的Alpha 图像拼接算法,可以求得三维模型中每个坐标点对应的纹理坐标.全息透明影像的渲染示意图如图6 所示.
图6 全息透明影像渲染示意图
3 基于距离的Alpha 融合算法与三维模型
3.1 世界坐标系到纹理坐标系的计算方法
无论使用什么方法做图像拼接,图像配准的主要任务是找到图像中具有相同特征的物体.也就是在世界坐标系下,同一点体在两张图象上的位置.如果通过计算可以求得世界坐标下的一点,在两张图像上的位置,那么将这两个位置上的像素做融合即可.
相机的成像过程是三维坐标点在世界坐标系、相机坐标系、图像坐标系和像素坐标系中的转换[27].世界坐标系以汽车正中心的地面投影点为原点建立,车头方向为X 轴的正方向,垂直于X 轴向汽车左侧为Y 轴正方向,向上为Z 轴正方向.为了不同车型相机标定的准确,增加了汽车坐标系.汽车坐标系是以后轴中点在地面上的投影点作为原点建立的.
下面将介绍世界坐标系下的点(x,y,z)到对应相机图像纹理坐标(u,v)的计算过程.该过程需要用到相机的内外参数[28].相机的内外标定参数,如表1 所示.
表1 四路鱼眼摄像头内外标定参数
首先,需要将顶点坐标从世界坐标系转换到对应相机坐标系.然而相机坐标系是以汽车坐标系为基础建立的,所以首先需要将顶点坐标转到汽车坐标系下.计算公式如下:
其中,(x_car,y_car,z_car)为顶点坐标在汽车坐标系下的位置;length为汽车中心到后轴的距离.
利用相机外参中绕Z 轴旋转角度、绕Y 轴旋转角度、绕X 轴旋转角度和位移向量,可以求得3 个旋转矩阵和1 个位移矩阵.通过仿射变换就可以求得顶点坐标在相机坐标系下的位置.计算公式如下:
其中,(xc,yc,zc)为顶点在相机坐标系下的位置;rota_x为绕X 轴旋转矩阵;rota_y为绕Y 轴旋转矩阵;rota_z为绕Z 轴旋转矩阵;trans为位移矩阵;k为常量.
此时已经转换到相机坐标系.顶点由相机坐标系通过计算转换到像素坐标系,此时需要用到相机的内参.鱼眼摄像头是一种特殊的摄像头,首先阐述小孔成像模型的求解过程.在小孔成像模型下,首先需要将摄像机坐标系下的点(xc,yc,zc)转换为归一化平面上的点.如式(3)所示:
其中,(x′,y′)为归一化平面上的点.
其次将归一化平面上的点转换为像素坐标系下的纹理坐标:
其中,(u,v)为纹理坐标;fx,fy为uv方向焦距.cx,cy为光轴中心像素坐标.相机坐标系到像素坐标系计算过程原理图,如图7 所示.
图7 相机坐标系到像素坐标系计算过程原理图
鱼眼摄像头图像存在明显的畸变.因此需要在公式中增加去畸变处理和Z 轴光心偏移系数.具有超大视场角的鱼眼相机,由于其球状镜头结构,以及制造工艺的问题,小孔成像的经典模型不适用于鱼眼相机的成像模型,因此需要增加新的参数[29].鱼眼相机成像模型,如图8 所示.
图8 鱼眼相机成像模型
鱼眼相机归一化平面的计算方法如式(5)所示:
其中,xi为光心Z 轴偏移系数.
鱼眼镜头成像存在的几何失真称为畸变.根据Brown 畸变模型,畸变主要分为径向畸变和切向畸变[30].径向畸变是从图像中心向外发散分布的畸变,产生原因是光线在鱼眼透镜边缘光线的折射角比靠近中心的地方更大.畸变的数学模型可以用主点周围的泰勒级数展开式的前几项进行描述,通常使用前两项,即k1和k2.切向畸变是由于透镜本身与相机传感器平面(成像平面)或图像平面不平行而产生的,畸变模型可以用两个额外的参数p1和p2来描述.去畸变公式如下:
其中,k1为径向畸变系数1;k2为径向畸变系数2;p1为切向畸变系数1;p2为切向畸变系数2.
鱼眼镜头纹理坐标的计算公式如下:
其中,u,v为纹理坐标;fx,fy为uv方向的焦距.cx,cy为光轴中心像素坐标.
通过上述公式可以求得顶点(x,y,z),由世界坐标系到像素坐标系(u,v)的变换.
3.2 三维模型的设计与优化
渲染车载全息透明影像就是在渲染一个3D 物体.三维模型相当于是车载环视影像的一个“墙壁”,将四路鱼眼图像按照一定的规则贴合到这个墙壁上,就形成了具有立体效果的影像.三维模型功能示意图,如图9 所示.
图9 三维碗状模型功能示意图
根据基于距离的Alpha 融合算法特性,我们对三维模型的需求有如下3 点:
(1)可以快速得找到拼接线,并且可以简单地在拼接线附近找到图像融合区域.
(2)减少点的数量.以TDA4 为核心的开发板,索引的数据类型为unsigned short,占2 个字节,数值范围为[0,65 535].在同一个索引缓冲对象中,最多可以索引65 536 个顶点,21 845 个三角形.因此三维碗状模型点的数量很多时,需要对顶点数据进行分块,再将数据拷贝进顶点缓冲对象中,这样会生成多个内存ID.在渲染时就需分开渲染,浪费资源.
(3)三维碗状模型渲染结果需要平滑柔顺,不能产生黑边、拼接缝明显等问题.在汽车的4 个角落处,很容易由于三维碗状模型,导致在相邻的两张纹理上不能采样到正确的颜色,最终在做图像融合时产生明显的黑线.
通过调研发现,根据几何模型的不同,可以将三维模型分为经纬度三维模型[31-33]、立方体三维模型[34,35]和柱面三维模型3 类[36,37].
经纬度三维模型及其改进方式模型可以满足如上需求.通过控制经线,就可以找到拼接线,控制角度找到拼接区域.经纬度三维模型整体与细节,如图10 所示.该模型的鸟瞰视图与3D 视图渲染结果,如图11 所示.
图10 经纬度三维模型
图11 经纬度三维模型渲染结果
通过观察可以发现,汽车周围有一圈不规则的黑边,这是由于在经纬度三维模型中,汽车周围三角形的边与汽车底盘不平行,导致有些三角形的部分点在汽车下方.但是鱼眼镜头无法拍摄到汽车底部,这些点在纹理采样时就会得到错误的RGB 值,就变为黑色.OpenGL 的特性会在三角形中间做线性插值处理,会导致三角形从有颜色逐渐过渡为黑色.解决此问题可以通过增加三维模型中三角形的密度,但这会增加三维模型中点的数量.通过实验测试发现,将点增加为之前的3 倍,效果依旧不明显.
根据问题,重新设计三维模型,在原有经纬度三维模型中间,嵌入一个汽车大小的长方形,确保三角形的所有顶点都位于汽车外部.内嵌长方形三维模型整体与细节展示,如图12 所示.该模型的3D 视图渲染结果,如图13 所示.
图12 内嵌长方形三维模型
图13 内嵌长方形三维模型渲染结果
通过观察可以发现,有些地方存在明显的畸变.这是因为,只有顶点处做了去畸变处理,三角形内部只做了线性插值,并没有去畸变.内嵌长方形与外接圆之间的三角形过大,这会导致渲染结果存在畸变.
鉴于此,重新优化三维模型.将内嵌长方形更换为正方形网格,并在正方形与外接圆之间插入点,减小三角形的大小.内嵌正方形三维模型整体与细节,如图14所示.该模型的鸟瞰视图与3D 视图渲染结果,如图15所示.
图14 内嵌正方形三维模型
图15 内嵌正方形三维模型渲染结果
通过观察可以发现,在汽车的4 个角落产生了横向黑色细线.车头前的两条黑线,是由于靠近车角的正方形在前镜头的图像中无采样到正确的RGB 值,变为黑色.与其他颜色融合后变为一条黑色细线.后侧同理.
综合上述所有问题,结合前几个模型各自的优点,重新设计三维模型.
(1)经纬度三维模型的优点在于,可以用快速找到拼接线的位置,并且可以方便地在拼接线周围找到图像融合区.因此在图像拼接区域使用经纬度三维模型的方案.
(2)嵌入长方形三维模型的优点在于,可以让渲染流程简单结果整齐.因此在正中间使用汽车大小的长方形.
(3)长方形外接圆会产生畸变,因此长方形周边用直线代替弧线.
按上述方案构建三维模型,首先在模型中间使用汽车大小的长方形.其次在长方形的4 个角落处,以角为圆心画四分之一圆弧.最后长方形周围,将相邻两个圆弧用直线连接.拼接区三维模型构建过程示意图,如图16 所示.该模型的渲染结果如图17 所示.
图16 拼接区三维模型构建过程示意图
图17 拼接区三维模型渲染结果
3.3 图像拼接与图像融合
在相邻两个图像之间做拼接融合,需要找到一条拼接线.首先在三维模型中确定一条拼接线.拼接线示意图,如图18 所示.
图18 拼接线示意图
鱼眼镜头的视角很大,这样会导致任意两个相邻的摄像头图像,会有很大图像重合的部分.为了使得渲染结果更加完美,需要在两幅图像相接的地方做图像融合.在拼接缝两侧寻找适量列数的点,作为图像融合区.在该区域进行图像的融合.图像融合区示意图,如图19 所示.
图19 图像融合区示意图
图像融合区的顶点,可以在拼接线的左右两张纹理上分别求得一个纹理坐标(U1,V1)和(U2,V2).利用着色器语言GLSL (OpenGL shading language)中的texture(ourTexture,vec2(U,V))函数可以得到纹理ourTexture中纹理坐标为vec2(U,V)的颜色.由此可得到顶点在两张图像上的对应的颜色.公式如式(8):
其中,outColor1rgb为顶点在拼接线左侧图像上对应颜色的RGB 值;outColor2rgb为顶点拼接线右侧图像上对应颜色的RGB 值.将两个颜色进行叠加则完成图像融合.图像融合示意图,如图20 所示.
图20 图像融合示意图
不做图像融合的数据格式为{X,Y,Z,U,V};图像融合区的数据格式为{X,Y,Z,U1,V1,U2,V2,Alpha}.纹理坐标的计算只需在程序启动时计算一遍,并将坐标点与纹理坐标按照数据格式组合.将组合好的数据拷贝到GPU 缓存中供渲染时使用.
由于Lens Shading 问题导致图像中间亮,边缘逐渐变黑.因此需要为边缘增加亮度,防止拼接区域出现黑色细线.Lens Shading 问题补偿公式如下:
其中,a为常量.
4 透明底盘功能的优化策略
4.1 透明底盘功能概述
透明底盘功能是将车底盲区进行填补,让驾驶员可以清楚地了解到汽车底部的情况.鱼眼镜头无法照射到汽车底部的物体,所以传统的方案就无法实现透明底盘功能.但是,汽车运动起来后,前几帧鱼眼图像存在当前帧车底图像信息.所以,透明底盘功能可以利用前一帧部分图像信息填充当前帧汽车底部盲区.
透明底盘功能实现过程,首先预测汽车的行驶轨迹,计算出汽车底部长方形4 个点在上一帧鸟瞰图中的纹理坐标.其次,用4 个点作为顶点、上一帧鸟瞰图作为纹理和求得的纹理坐标进行渲染.透明底盘功能渲染示意图如图21 所示.
图21 透明底盘功能渲染示意图
4.2 自行车模型优化与透明底盘算法实现
车辆运动学模型与动力学模型的建立是出于车辆运动的规划与控制考虑的.此模型广泛应用于自动驾驶汽车轨迹规划模块中[38,39].该模型可以精准的推测汽车的行驶轨迹.
自行车模型需做如下假设:
(1)车辆只在二维平面上做运动,即只在XY 水平面的运动.
(2)车的两侧车轮转角一致.即将车模从两侧压扁为二维.
(3)车辆行驶速度变化缓慢,忽略前后轴载荷的转移.
(4)车身及悬架系统是刚性的.
假设结果如图22 所示.
图22 自行车模型
其中,O为OA、OB的交点,是车辆的瞬时转动中心,线段OA、OB分别垂直于两个滚动轮的方向; β为车辆速度方向和车身朝向两者间所成的角度,ψ为车身与X 轴的夹角.V为质心速度;R为 转向半径; ℓr为后悬长度; ℓf为前悬长度; δr为后轮偏角; δf为前轮偏角.自行车模型的动力学关系为:
联立可得:
当速度很慢时,车辆的转弯半径几乎不变,此时可以假设车辆的方向变化率与车辆的角速度相等,则车辆的角速度为:
在惯性坐标系XY 下,可得车辆运动学模型:
其中,有3 个输入: δf、 δr、V.汽车的转向有两种模式[40],分为前轮转向与后轮转向两种类型.当车辆为前轮转向时,则车辆只有前轮转角 δf,后轮转角δr=0.因此可以假设前轮转向自行车模型如图23 所示.
图23 前轮转向自行车模型
前轮转向自行车模型总结规律.由正弦法则求得车辆旋转半径R,计算公式如下:
前轮转向自行车模型如下:
此方程,每一帧都需要计算,为了能够更少计算量,简化该计算公式.由于单针耗时时长很短、汽车速度很慢并且汽车电器件传入渲染引擎的数据本身就存在很大误差,所以采用离散的方法.改进自行车模型公式如下:
式(16)中各参数,如表2 所示.
表2 各参数及意义
利用dx与dy可以求得位移矩阵trans; 利用dθ可以求得Z 轴旋转矩阵rota_z.当前帧汽车坐标系下的点,在经历一帧图像时间后,在上一帧汽车坐标系下位置的计算公式如下:
其中,(X_car,Y_car,Z_car)为当前帧汽车坐标系的坐标点; (X_car1,Y_car1,Z_car1)为坐标点在上一帧汽车坐标系的位置;k为常量.
结合鸟瞰图的相机矩阵,就可以求得在鸟瞰图中的纹理坐标(U,V).计算过程如式(18):
4.3 方向盘角度到轮转角精度问题的优化
消息中间件传送到渲染引擎的角度是方向盘角度,而计算公式需要的是汽车的轮转角.所以需要一步方向盘角度转轮转角的操作.如果采用正比例关系,当方向盘角度比较小时,不会有明显问题.但当方向盘角度特别大时,随着时间的积累,物体预测位置就会存在误差.为此提出查表法来解决此问题.
经过多次的测试得到方向盘角度与轮转角的原始数据,并对数据进行处理处理,得到一组很准确的方向盘角度与轮转角关系对应表,如图24 所示.
图24 中可以看出当方向盘角度较小时,方向盘角度与轮转角,基本呈正比例关系.但当方向盘角度过大时,方向盘角度与轮转角,不再成正比例关系.这也印证了最初的猜想.通过查表找到方向盘角度所对应的轮转角.方向盘角度位于两项数据之间的,将这两项数据对应的轮转角,做加权平均,从而次求得更为准确的轮转角.如图25 所示.
图24 方向盘角度与轮转角关系曲线
图25 轮转角优化效果对比图
4.4 透明底盘功能拼接缝优化策略
通过观察,发现渲染图像中汽车周围与汽车底部拼接缝极其明显,并且汽车底部像格栅一样.拼接缝与拼接格栅问题示意图,如图26 所示.
图26 拼接缝与拼接格栅问题示意图
汽车底部的格栅化,是由于透明底盘功能拼接缝明显.透明底盘的渲染方案会导致明显的拼接缝在车底积累,形成格栅.所以,优化掉拼接缝问题,格栅问题也将解决.
世界坐标系位置相同的点,不同帧间亮度可能存在不同,并且车辆动态模型对行驶轨迹的推测存在误差,导致透明底盘功能拼接缝明显.
解决此问题,采用分层渲染的方法.将底部长方形周围区域在上一帧顶视图的图像,渲染在当前帧图像渲染结果的上层.首先找到底部长方形外侧适量圈数坐标点.其次利用自行车模型计算出坐标点对应的纹理坐标.最后,Alpha 值由长方形边缘向外逐渐由1 变为0.输出像素四通道的计算公式如下:
其中,outrgba为渲染输出值;L为向外选择点的圈数;l为当前点所在圈数.透明底盘拼接缝优化效果图,如图27所示.
图27 透明底盘拼接缝优化效果图
5 结论与展望
(1)为了方便展示,所有三维模型都进行了稀疏化处理.实际工程应用的拼接区三维模型共有36 000 个面和18 848 个点.
(2)四路鱼眼镜头图像进入系统后进行了亮度均衡处理.亮度均衡不是本论文的研究内容,不展开讨论.实验所使用的亮度均衡算法主要借鉴于文献[41].
(3)在TDA4 为核心的开发板,上车进行测试,实验结果表明,在输出图像分辨率为1440×720,左右视图均为3D 模式时,可以达到30 帧,CPU 占用率低于20%.
本文基于距离的Alpha 图像拼接算法、优化了三维模型、改进了透明底盘功能.该技术可有效提高渲染效果,减少计算复杂度.该研究技术对于车载全息透明影像有很大意义.该系统仍然存在许多问题,例如近处物体畸变严重、在拼接处存在物体消失等问题.相信这些问题日后都会得到解决.