摘 要: 针对安防监控与智慧交通领域无盲区视频摄录的需求,基于Zynq-7000平台优势进行宽幅视频处理软硬件系统的设计。通过研究基于嵌入式系统的多路视频实时拼接技术,设计并实现了以XC7Z020芯片为核心的视频处理板卡,在双核ARM Cotex-A9硬核处理器端服务程序协同调度下,基于片内FPGA硬件加速能力实现多通道视频实时采集与预处理、投影变换、图像融合,进而形成完整宽幅视频画面,通过远程客户端实现定制化的视频摄录功能。测试结果表明,该系统是兼具稳定的性能和灵活区域部署能力的便携式解决方案。
引言
宽幅视频拼接是基于计算机视觉和图形处理技术的整合,其本质就是图像拼接技术,必然与图像传感器技术及图像算法研究密切相关[1],但其对于实时性的较高要求,使得在该领域的技术实践同样需要关注平台的处理性能。目前市面上普遍采用的主要有通过单目鱼眼镜头捕获全景图像的嵌入式平台方案,以及多通道图像采集拼接形成全景的通用计算机平台方案。前者对于镜头工艺要求高且存在较大的畸变,而后者凭借性能优势获得好的效果,但设备体积庞大且价格昂贵[2]。
针对以上情况,本文提出了一种基于AP SoC(All Programmable System on Chip,全可编程的片上系统)多通道视频无缝拼接的宽幅视频处理解决方案。结合用户场景分析,提出具有扩展能力的宽幅视频处理技术,预置多路扩展接口随时增减摄像头以调整视野宽度,满足多种现场宽视角摄录需求。
1 系统总体构架
宽幅视频处理系统由本地视频处理系统端和远程摄录客户端两部分组成,系统总体框图如图1所示。便携式视频处理系统根据监控需求进行配置与部署,远程客户端进行实时定制视野区域摄录。
本地视频处理系统作为设计的主体部分,由视频采集、图像处理、核心调度、用户交互、本地显示、网络通信六个模块组成。多通道视频流采集模块采用DMA方式将图像数据送入内存缓冲队列;图像处理模块包含视频处理的若干流程,在核心调度模块控制下,借助可编程逻辑并行加速完成宽幅图像的处理与存储;用户交互模块和本地显示模块协同完成设备配置与宽幅画面预览;网络通信模块作为视频传输的重要接口,用于监听网络请求与宽幅视频分发服务。
2 系统硬件设计
视频处理核心板卡硬件系统结构框图如图2所示。系统主要由存储器模块、网络通信模块、视频采集接口模块、本地显示模块、串行终端模块、用户交互模块、时钟模块、电源模块和JTAG调试模块组成。
2.1 XC7Z020片上系统
XC7Z020芯片是Xilinx公司Zynq-7000系列AP SoC,在FPGA架构中集成了双核ARM Cotex-A9硬核处理器系统,包含USB、SPI、SDIO等丰富的外设控制器,实现了PS(Processing System)硬核知识产权的性能和低功耗特性以及PL(Programmable Logic)可编程逻辑的灵活性[3]。借助AXI(Advanced eXtensible Interface,高级扩展总线)互联技术实现PS与PL之间的高性能的数据交换,为工程技术人员在图像处理领域实践提供了全新的实现途径。
2.2 存储器模块
存储器模块分为内存和掉电存储两个部分。XC7Z020芯片内置支持多协议标准的硬核内存控制器,挂载两片DDR3内存芯片MT41K128M16,构建起容量为512 MB、时钟频率为533 MHz的内存储器。选用飞索公司的32 MB QSPI Flash芯片S25FL256SAG以及SD闪存卡两种掉电存储方式,用于FPGA上电配置以及软件系统的引导。
2.3 视频采集模块
选用三组OV5640摄像头模块围绕单视点相背放置。摄像头内置白平衡、色彩校正、降噪等预处理功能,简化了后端FPGA系统的设计负担。720P输出模式下可达40 f/s以上帧率,其采用DVP(Digital Video Port,数字视频接口)输出,通过SCCB(Serial Camera Control Bus,串行摄像头控制总线)进行初始化配置。
2.4 本地显示模块
选用ADI公司的高清多媒体收发器ADV7511芯片,集成HDMI 1.4发送器,最大支持1080p@60Hz视频传输。芯片集成I2C控制器用于管理接入的显示设备信息。
2.5 网络通信模块
选用Marvell公司具有自适应10/100/1 000 Mb/s传输速率的以太网物理层芯片88E1518,配合片内吉比特MAC(Media Access Control,介质访问控制)层控制器提供千兆以太网接入能力。
3 软件系统架构及核心算法的实现
本文使用Vivado2015.2设计套件完整的工具链协同完成软件系统的构建。图像处理系统运行流程如图3所示,通过横向的时域和纵向的空间域来说明软件与硬件协同实现图像处理的工作流程。横向的时间域即体现运行于PS端的程序协调硬件系统推进事务处理,组织整个系统的运行流程;纵向的空间域是PL端图像处理子系统在总线控制下,并行完成各自任务所经历数据迁移和操作。
按照模块化软硬件设计思路,将整个系统运行划分为五个运行阶段:系统初始化配置、视频采集与预处理、柱面投影硬件加速、图像接缝融合和多通道传输,其中视频采集与预处理、柱面投影两个阶段以FPGA系统并行处理为核心,其他则以软件调度执行为主。
3.1 系统初始化配置
系统初始化配置阶段是以硬核系统启动为主导,从外部存储器中读取FPGA配置文件并部署到PL中,构建起3个图像处理子系统,之后进入操作系统引导和片内外设备初始化过程。
3.2 视频采集与预处理
采集预处理阶段分为采集、预处理和存储三个环节。视频输入端口捕获的图像数据流同步信息冗余且低效,不适合在片内系统传输中使用,Xilinx公司提出了基于AXI标准协议框架的精简流传输AXI-Stream协议,使用Video In To AXI-Stream IP(Intellectual Property,知识产权)核将DVP数据格式转换为AXI-Stream协议数据流,实现片内数据传输标准化。
本设计所使用的摄像头输出图像格式是Bayer色彩空间,为了获得RGB色彩空间图像,需要插值以获取像素丢失的颜色信息。综合考虑算法复杂度和图像还原质量,采用3×3邻域双线性插值法对图像进行色彩空间还原[4]。基于AXI-Stream协议接口的Color Filter Array IP核,进行简单参数配置便能够实现Bayer向RGB色彩空间转换,从而实现与视频采集IP子系统无缝对接。
3个图像采集与预处理通道工作均在FPGA内异步完成,受限于FPGA存储容量,需要将视频帧缓存在DDR内存中。PS端提供了四路高速AXI总线访存接口,借助Video DMA IP核能够实现AXI-Stream协议数据流转换为基于地址访问的标准AXI协议,从而实现访存操作,PS端通过AXI-Lite控制总线实现IP核配置。
3.3 柱面投影硬件加速
如图4所示的柱面投影透视模型,按照单视点模型摆放的摄像头阵列位于O点,待投影图像ABCD在投影圆柱面上形成的映像为闭合曲面A′B′C′D′。在图4(a)中观测点O处所在的水平和竖直面投影,得到了截面图4(b)和图4(c),其中待投影图像上P、Q两点在投影柱面上形成P′和Q′两投影点,假设柱面的半径为r,高度为H,单个摄像头水平视野角度为θ,待投影图像宽度为W,高度为H,则能够得出像素P(x,y)向P′(x′,y′)的投影关系如式(1)所示,反投影变换如式(2)所示[5]。
其中:
投影柱面的半径r就是摄像头的焦距,焦距无法精确测量,但可以通过计算公式进行估算:
在实际柱面投影过程中,通过计算柱面投影图像指定像素点所对应的原始像素坐标,将坐标转换成存储器的地址,取出该像素并存入到所对应的柱面投影图像中,最终形成了完整的柱面投影图像。
基于缓存策略的连续地址存储器访问,相对字节随机访问具有更好的带宽效能。在柱面图像目标存储区,按行、列依次将若干连续的像素组进行反柱面投影求其所在原图像坐标,逐个从原图像坐标取出其像素值存入缓冲区,缓冲区满后采用总线突发方式,一次放入目标柱面位置,即概括为零取整存,功能框图如图5所示。
柱面投影主要涉及数学公式计算以及存储器访问操作,基于硬件描述语言的FPGA设计对基于复杂总线的数据通信及数学计算编程实现较为复杂。Vivado HLS(High Level Synthesis,高级综合)工具将C/C++等高级语言通过高层次功能综合,快速实现IP核设计与开发,软件提供了基于高级语言的图像处理、数学函数、标准通信协议接口,得以使开发人员更加专注于功能设计,同时能够获得不错的硬件加速性能。
按照高级语言程序功能函数设计,需要明确入口参数。实现柱面投影所需的关键参数如表1所示。
设计完成的功能函数通过C仿真以验证程序设计逻辑正确性。通过程序逻辑测试后,进行高级语言向RTL(Register Transfer Level,寄存器传输级)IP综合。柱面投影IP核通过总线获取参数及访存。参数列表中两个存储器地址用于内存数据访问,故采用支持高带宽的数据通信以及突发传输的AXI总线挂接,其他参数使用AXI4-Lite控制总线进行配置。初步完成端口配置与综合后,会针对选定平台提供详细的资源统计报告,如表2所示,产生的RTL电路同样需要C/RTL协同仿真以验证时序逻辑正确性,完成仿真之后软件会提供测试报告及信号时序图。通过设计验证后,即可进行IP核的打包并导入FPGA系统。
3.4 接缝融合与全景拼接
相邻图像重叠区域使用加权融合方式处理。实际拼接区域范围较小,故采用软件计算的方式实现,加权融合通过缓慢改变权重系数,使拼接图像顺滑过渡。加权融合原理示意如图6所示。
设两幅待拼接图像F(x,y)和G(x,y),其对应的权重函数分别为ω1和ω2,其数学表达式为:
3.5 多通道传输
多通道传输是指完成处理的宽幅图像,通过本地端HDMI显示以及远程客户端请求摄录两种呈现方式。
应用程序设计与实现主要分为两个功能模块:视频拼接处理和定制化网络分发。借助双核处理器的优势多线程编程调度来提升系统的整体执行效率。系统服务软件运行流程如图7所示,服务程序开始运行后,主线程申请绑定第一处理器核心运行,启动系统设备初始化工作,之后创建子线程,并使其运行在第二核心上。基于核心绑定的多线程设计,有利于手动进行负载均衡。主线程主要负责图像处理服务,循环控制整个视频拼接的四个阶段,而子线程主要负责网络请求的监听与定制化的分发服务。由于两者都需要访问全景视频缓冲区,所以需要进行缓冲区读写访问控制。
4 系统测试与效果
系统服务程序HDMI显示接口实时查看拼接效果,如图8所示。远程客户端进行定制化分发摄录,如图9所示。嵌入式服务端实时形成的宽幅视频画面如图10所示,画面接缝部位拼接较为均匀且完整。经过实验测试及数据统计,视频处理系统在720 p模式下,宽幅分辨率为3 360×640,帧率5~10 f/s,480 p模式下分辨率为2 240×420,帧率15~18 f/s,基本实现了设计目标。
随着机器视觉、模式识别领域的飞速发展,基于宽幅实时视频为基础的自动识别与检测应用在交通、安防等领域将会有更广阔的发展前景。
评论
查看更多