基于GPU的车载全景视觉系统①

2021-04-23 13:00郑文玲钱宏文卢思翰倪文龙
计算机系统应用 2021年4期
关键词:鱼眼标定线程

郑文玲,钱宏文,卢思翰,倪文龙

(中国电子科技集团公司第58 研究所,无锡 214035)

随着全球汽车电子产业以及智能交通科技的快速发展,自2006年全景辅助泊车概念提出来以后,全景技术成为各大汽车厂商以及科研单位的一大研究热点[1].全景视频成像系统是在车辆前、后以及侧方安装车载相机,采集车辆四周图像通过校正、拼接等处理,在终端实时显示车辆四周全景图像.目前国外的全景辅助泊车研究技术成熟,如日产、丰田等的环境监视系统,目前只针对高档轿车或SUV 上配备,价格也较为昂贵[2].国内的汽车制造厂家目前没有一款成熟的辅助产品,主要是针对算法上的优化.文献[3]在TMS320DM6437嵌入式平台上实现4 路高清广角摄像头的实时全景拼接;文献[4,5]在FPGA 平台上实现了2–4 路的全景拼接处理,文献[6]在将算法移植到GPU 平台实现了6 路2 k 视频的全景拼接,实时输出4 k 高清视频.对于大型车辆比如些重卡、货运车来说,由于车体较大,长宽高几倍于小型车辆,需要选用更多的大视场镜头以保证车辆四周场景的全覆盖,相邻相机间具有足够的重叠区域.由此系统需要采用高速数据传输接口以及具备更强并行计算处理能力以保证视频数据的实时传输与处理.目前国内外针对10 路及以上高清镜头的全景视频成像系统实现方案还不成熟.

本文选择FPGA 结合GPU 高性能嵌入式平台,设计了12 路同步高清鱼眼相机的车载全景视频成像系统,硬件方面采用 FPGA+TX2 嵌入式平台,通过PCIE口进行12 路摄像头数据采集处理,软件方面为了获取较高的图像配准精度进行了拼接算法的优化,实现在TX2 平台上的拼接算法移植,结合CUDA 并行加速技术实现在FPGA+TX2 嵌入式平台全景鸟瞰图的实时拼接输出,为驾驶员提供车体周围360°景象,保证安全驾驶、泊车,避免视觉盲区隐患.

1 总体框架设计

全景视觉系统是一套车辆驾驶辅助系统,采用178°超广角高清鱼眼镜头,选用FPGA 结合NVIDIA TX2 平台实现视频信号采集、全景实时拼接显示等功能.其中FPGA 主要实现12 路HD-SDI 高清视频信号采集、颜色空间转换,通过PCIE 接口将图像数据传送给TX2,利用GPU的大数据并行加速优势进行畸变校正、鸟瞰变换、配准融合等算法处理,最后将全景拼接俯视图回传给FPGA 端进行显示,辅助车辆驾驶员直观、实时地查看车辆周边盲区或障碍物,做出正确判断和操作,提高行车安全.

2 硬件平台设计

系统总体结构框图如下图所示,以Xilinx 公司的Kintex UltraScale 系列FPGA 芯片作为核心芯片,系统整体由电源、JTAG、图像采集、图像缓存、数据处理和显示等部分组成,总体结构框图如图1.

图1 系统总体结构框图

系统工作流程如下:系统上电后,由FPGA 采集车辆不同方位12 路鱼眼镜头的实时高清图像,在外部存储器DDR4中进行乒乓缓存,经过预处理将视频数据由YCbCr 转为RGB,然后通过PCIe_X4 接口将12 路RGB 图像数据传给GPU 模块,在GPU 上经过鱼眼畸变校正、鸟瞰变换、图像配准、图像拼接融合、剪切合成等一系列算法处理,生成车体周围鸟瞰视角的360°全景高清拼接图像.最后将全景拼接结果图通过PCIe_X1 接口实时回传并通过SDI 接口输出显示.

2.1 嵌入式GPU及CUDA 架构

GPU (Graphic Process Unit,图形处理器)[7]在并行计算、分布计算和浮点运算方面,拥有数十倍乃至上百倍于CPU的运算能力,GPU 超强的并行计算能力使得其近年来越来越多的被应用在机器学习、图像处理加速等方向.Jeston TX2[8]是Nvidia 2013年推出的一款高性能、低功耗的AI 单模块超级计算机,具有256个CUDA 核,其浮点计算能力可以达到1.5 Tflops.

CUDA是NVIDIA 推出的通用并行计算架构,采用GPU和CPU 混合编程的模式.在采用CUDA 进行并行程序的编写时,应用程序代码分为Device 端代码与Host 端代码两部分,一般将逻辑较强控制、并行度较低的串行计算放在Host 端执行,而计算密度大、相互无依赖的部分放在Device 端会以Kernel的形式并发执行.通过单指令多线程(SIMT)模式,以warp为调度单位,一个warp中32个线程,GPU 一次并发执行多个warp 并行处理.

3 拼接算法原理

车载全景拼接算法[9]一般包含4个模块:鱼眼校正[10]、鸟瞰变换、图像配准、图像融合.考虑到算法实现的实时性,本文将算法分为拼接模型参数计算和实时拼接融合两个部分.通过对相机的内外参数离线标定,生成固定不变的校正映射关系以及相邻相机间的映射关系,计算拼接参数映射表,依据映射关系表查表实现最终的图像拼接融合,实时输出车体周围的360 度全景俯视图.

3.1 参数标定

由于鱼眼镜头是一种超大视场、大孔径的成像系统,桶形畸变严重,需要对鱼眼相机进行标定、畸变校正[11].本文使用OpenCV中鱼眼模型[12]进行相机标定,制定棋盘格标定板,采集不同位置和方向的棋盘格标定板图像15–20 幅如图2,利用其自带的标定工具箱求解出相机内参A和畸变参数K如表1所示,相机内参是固有参数,一经标定后可重复使用.利用标定的参数对鱼眼图像进行校正,校正结果如图3.

图2 棋盘格标定图

表1 鱼眼相机标定内参表

图3 校正结果图

当鱼眼相机相对之间位置固定不变时,其空间的变换模型也是固定不变的.为获取鸟瞰变换矩阵以及相邻相机配准矩阵,借助标记棋盘格,置于相机正下方,两边分别再放置一张标记棋盘格,相机正下方以及两侧重叠区各摆放棋盘格分别用于标记鸟瞰阵以及相邻相机间的单应阵,具体步骤如下:

1)车体四周摆放好棋盘格,镜头正下方以及左右各摆一个标记物;

2)利用基于区域生长算法[13]检测视野内棋盘格,并筛选出正下方以及左右的特征角点;

3)分别带入透视变换公式,得到鸟瞰Hbird和相邻相机间配准矩阵Hmn中,经过鸟瞰后已经转为同一平面,因此Hmn中h31=h32=0;

4)校正后图像边缘畸变较大,对图像进行有效区域提取.

3.2 逆向投映射参数计算

依据上两节已经获得相机内参、畸变Hbird和相邻相机间配准矩阵Hmn等标定参数,生成逆向映射参数映射表,以查表的方式进行拼接融合.所谓逆向映射是指,已知目标图像上像素点坐标在源图像上的对应的索引位置,只需对源图像上该点进行插值就可以得到输出图像像素点的值.

鱼眼图像首先必须经过畸变校正f(A,K,x,y),再经过鸟瞰变换,经过相邻配准将所有相机转换到参考相机坐标系下.假设选定Cam0 相机为基准相机,Cam1 到Cam0的单应矩阵为H01,Cam2 到Cam1的单应矩阵为H21,则Cam2 到H01基准相机的变换关系为:H02=H01∗H21,按式(2)将所有相机转到参考相机Cam0 坐标系.假设拼接蒙版图I′上坐标为(x′,y′)逆向映射到鱼眼图I上坐标(x,y)处,蒙版图像到鱼眼图的逆向投影的关系可以用式(3)表示,单路相机到蒙版拼接图的中间效果如图4所示.

图4 算法中间处理效果图

3.3 拼接融合

在完成映射参数计算(如表2和表3)后,获取从鱼眼图像到蒙版图的直接映射关系,还需要进行双线性插值[14]处理消除边缘锯齿状.考虑算法实时性,对于拼接连接处的缝隙、重影情况,重叠区域需使用渐入渐出融合算法[15],车载相机安装好之后,其相对位置和角度不再发生变化,将拼接参数在实时拼接启动前拷入GPU.

表2 非重叠区域映射参数表

表3 重叠区域映射参数表

4 基于GPU的全景实时拼接

4.1 全景拼接流程

FPGA 将采集到的各通道视频数据通过颜色空间转换RGB 数据后,通过直接内存存储技术DMA 以最高带宽速度将数据通过PCIe 从CPU 传送至GPU 端的内存,在GPU 上进行具体的拼接融合算法运行以及加速优化,TX2 上具体执行流程图如图5.

图5 基于GPU的全景拼接的软件实现流程图

该系统首先FPGA 端将离线标定好的参数文件通过串口传递给TX2;FPGA 将12 路图像数据通过PCIE传递给TX2,在图像第一帧的时候根据标定参数计算出拼接参数映射表,并将参数映射表从CPU 端拷贝至GPU 端;接着将12 路视频数据也从CPU 端拷贝至GPU端,在GPU 端进行图像拼接融合并行处理.

4.2 拼接融合的CUDA 实现

GPU 将各路视频数据根据重叠与非重叠区域的拼接融合参数,以查表的方式对图像进行处理,主要计算量为线性插值.在实时拼接前需先将计算的拼接融合参数拷入GPU 端并分配线程,由Kernel 函数进行并行实现.在设计线程层次时,应将并行化线程的粒度设计为一个线程对应处理一个像素.

针对重叠区域和非重叠区域不同的计算,建立两个核函数分别进行处理.两个Kernel 函数分别在((Overlap_N+block.x - 1)/(dimBlock.x,1)、((unOverlap_N+block.x-1)/dimBlock.x,1)个线程块Block 上执行,每个Block 上划分(16,16)个线程(thread).其中Overlap_N和unOverlap_N分别为蒙版图重叠区域和非重叠区域的像素个数.这样使得每个线程对应处理一个像素的插值融合计算,同一时刻GPU 并发执行多个warp,并行索引鱼眼图像素数据源,非重叠区域进行并行线性差值,重叠区域并行进行差值以及加权融合计算,最后将拼接结果图传回主机内存.

5 实验分析与总结

在VS2013+Matlab 上首先验证了算法的有效性,然后将拼接算法移植到GPU 上,搭建系统环境,采用软硬件联调的方式进行整个系统功能测试.分别对8 路和12 路鱼眼相机高清输入时,拼接生成一幅1080 P的全景环视图的性能测试,具体如表4.

表4 本算法加速时间对比(单位:ms)

首先实时性方面,从表中可以看出CPU 端图像拼接融合过程运行时间相差不大,其相当于一个查表过程,计算量主要由输出图像的分辨率决定,可适应各种大小车型;通过CUDA的加速,全景的拼接融合耗时8.5 ms 左右,图像数据从CPU 端拷入GPU 平均时间16 ms,拼接结果图像考出时间为4 ms 左右.在Jeston tx2硬件平台上12 路平均处理时间3 ms 左右,满足实时拼接的工程化需求.但随着拼接视频路数的增多处理时间变长,其主要耗时在CPU 端到GPU 内存的图像数据传送上.最终的拼接视频效果截图如图6所示.

图6 全景视频显示截帧

6 结束语

本文基于FPGA+GPU 嵌入式实验平台,实现了多路鱼眼摄像头的图像采集、缓存、处理的全景实时拼接系统.针对目前图像拼接系统中的大数据传输、算法实时处理进行了改进优化.通过对算法实现CUDA加速,大幅提升了拼接速度,满足实时化的工程需求.该系统嵌入式、低功耗的设计理念,可广泛应用于虚拟现实、医学影像、智能交通等领域.

猜你喜欢
鱼眼标定线程
5G终端模拟系统随机接入过程的设计与实现
面向鱼眼图像的人群密度估计
实时操作系统RT⁃Thread启动流程剖析
车轮动平衡标定结果的影响因素
实时操作系统mbedOS 互斥量调度机制剖析
CT系统参数标定及成像—2
CT系统参数标定及成像—2
基于傅立叶变换的CT系统参数标定成像方法探究
基于傅立叶变换的CT系统参数标定成像方法探究
标定电流与额定最大电流的探讨