【学习笔记】基于Zynq-7000的宽幅视频处理系统设计与实现

2016年电子技术应用第6期

作者:韩德强,杨利平,王宗侠

摘  要: 针对安防监控与智慧交通领域无盲区视频摄录的需求,基于Zynq-7000平台优势进行宽幅视频处理软硬件系统的设计。通过研究基于嵌入式系统的多路视频实时拼接技术,设计并实现了以XC7Z020芯片为核心的视频处理板卡,在双核ARM Cotex-A9硬核处理器端服务程序协同调度下,基于片内FPGA硬件加速能力实现多通道视频实时采集与预处理、投影变换、图像融合,进而形成完整宽幅视频画面,通过远程客户端实现定制化的视频摄录功能。测试结果表明,该系统是兼具稳定的性能和灵活区域部署能力的便携式解决方案。

0 引言

宽幅视频拼接是基于计算机视觉和图形处理技术的整合,其本质就是图像拼接技术,必然与图像传感器技术及图像算法研究密切相关[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,基本实现了设计目标。

随着机器视觉、模式识别领域的飞速发展,基于宽幅实时视频为基础的自动识别与检测应用在交通、安防等领域将会有更广阔的发展前景。

参考文献

[1] 赵有金.基于FPGA的高分辨率全景图像处理平台的设计与实现[D].哈尔滨:哈尔滨工程大学,2011.

[2] XU W,MULLIGAN J.Panoramic video stitching from commodity HDTV cameras[J].Multimedia Systems,2013,19(5):407-426.

[3] 陆佳华,潘祖龙,彭竞宇,等.嵌入式系统软硬件协同设计实战指南:基于Xilinx ZYNQ(第2版)[M].北京:机械工业出版社,2014.

[4] 孙辉,柏旭光,孙丽娜,等.基于Bayer图像色彩还原线性插值方法[J].液晶与显示,2013,28(3):417-423.

[5] 武晓斌.基于FPGA的柱面投影算法的实现[J].电子科技,2015,28(5):9-12.

(0)

相关推荐

  • 前视声纳系统成像视觉改进与实现

    作者 窦法旺 夏伟杰 金雪 南京航空航天大学 电子信息工程学院(南京 211106) *基金项目:2014年江苏省产学研联合创新资金资助(BY2014003-14) 窦法旺(1991-),男,研究生, ...

  • 基于FPGA和DSP的高速实时轨道巡检图像采集处理系统

    随着我国铁路高速发展,高铁总里程已跃居世界第1位,维修养护压力也日益凸显.在高速铁路的日常维护中,线路上的钢轨.扣件.应答器.轨腰塞钉等轨道设施需要大量的人工进行检测.然而,由于人工巡道作业存在检测条 ...

  • 学习笔记|基于课标的内容研制策略

    从今天进入<为言语智能而教>的第二个板块:组块教学策略. 首先是第一章,基于课标的内容研制策略. 关于课标,一直以来在一线老师的手中都存在着剥离状况.使用统编版教材之后,有所好转.这不是因 ...

  • 学习笔记|基于文本的读写结合策略

    读这一章,直读得头涔涔而泪潸潸.因为,薛老师这一章所讲,全是我在工作中觉得自己做了,却做得很不好的. 这一章主要讲基于阅读教学的作文训练.这个训练有别于专项的作文教学,一般"侧重于引导学生在 ...

  • 【学习笔记】基于DSP/BIOS的视频图像复原系统设计

    0 引言 在图像复原技术发展的过程中,国内外学者提出了大量的图像复原算法.目前一些新颖的复原技术有基于支持向量回归的复原算法.中介滤波算法和基于水平集的图像复原算法等. 传统的图像复原算法是基于PC实 ...

  • 脑血管视频解剖学习笔记——第1期

    脑血管视频解剖学习笔记第1期 3D视频讲解见文末 颈内动脉:颈内动脉是颈总动脉的终支之一.平甲状软骨上缘自颈总动脉发出.先在颈外动脉的后外侧,然后转向后内侧上升至颅底,经颈动脉管入颅腔.该动脉在颈部无 ...

  • 学习笔记|吴勇《基于语文要素的单元习作训练课程》

    听完这一讲,我脑海中浮现出两个不同行业的人说的话,完美地契合了我现在的感受. 一个是张咏梅老师,重庆教科院初教所所长.她说:统编教材把大家放在一条线上,谁最敏锐,谁最愿意钻研,谁就能走在前列. 一个是 ...

  • .NetCore学习笔记:二、基于Dapper的泛型Repository

    为减少代码量,这里实现一个基于Dapper的泛型Repository. 这里需要引用Dapper.dll和Dapper.Contrib.dll. 接口定义: 1 /// <summary> ...

  • .NetCore学习笔记:三、基于AspectCore的AOP事务管理

    AOP(面向切面编程),通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是函数式编程的一种衍生范型.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑 ...

  • 笔记 | 海绵窦解剖- Rhoton解剖视频学习

    解剖学习笔记 神外前沿 在The Rhoton Collection解剖视频中,<Cavernous Sinus and Middle Foss>这一章节与<Navigating t ...

  • Java学习笔记--来自Java核心卷和尚学堂视频

    Java常见点解析 起步之注意点 Java对大小写敏感,关键字public被称为访问修饰符 关键字class 的意思是类.Java是面向对象的语言,所有代码必须位于类里面. 一个源文件中至多只能声明一 ...