时间:2024-05-22
陈子为,陈 龙,朱美吉,苏鲁阳
(成都信息工程大学 电子工程学院,四川 成都610225)
随着生产生活和科学技术的进步,数码摄像设备得到了广泛地普及与应用。但是由于数码摄像设备自身物理条件的限制,普通数码摄像设备获取视频的视野范围较小,超广角镜头或者鱼眼镜头又会对图像产生畸变[1],不能满足实际的应用需求。利用单一摄像头捕捉多张视频画面合成宽视野图像的办法不仅费时费力,而且获得的全景图像的质量一般不佳。视频拼接技术很好地解决了这一问题。所谓视频拼接就是将几个存在内容相关性的窄视野视频的每一帧图像进行拼接融合处理,得到一幅宽视野的甚至是全景的视频图像。视频拼接本质上就是图像拼接,但由于其对于实时性的要求很高,使得在该领域的技术实践更需要关注平台的处理性能和算法的复杂性。
目前市面上普遍采用基于ARM、DSP、FPGA 的嵌入式平台方案,以及多通道图像采集拼接形成全景的通用计算机平台方案来实现视频拼接。这些实现方案存在一定的缺陷,基于ARM 的实现方案处理能力较弱,无法进行复杂视频算法;基于DSP 的实现方案处理速度比FPGA慢[2];基于FPGA 的实现方案灵活性较差且成本较高;基于计算机平台的实现方案凭借性能优势获得好的效果,但设备体积庞大、功耗高且价格昂贵[3]。
针对以上问题,本文首先对特征点检测效率表现优异的ORB 算法进行改进,并利用Vivado HLS 工具将改进的视频拼接算法进行硬件加速并部署到Zynq 的PL中,然后利用Zynq 的PS 搭建嵌入式Linux 系统,进行用户界面开发,实现任务调度,最后提出了一种基于Zynq平台对多通道视频进行无缝拼接处理的解决方案。
图1 视频图像拼接流程图
视频拼接流程如图1 所示。 首先通过摄像头采集两路视频图像,然后进行视频图像帧同步,接着再进行预处理,预处理主要用于解决视频图像采集过程中引入的噪声、亮度差异调整等问题。预处理完成后进行图像的配准和变换,其中图像配准是视频拼接中最关键、最耗时的步骤,可以采用基于图像灰度统计特性、基于图像特征点和基于图像理解三种图像配准方式。综合考虑算法复杂度和配准准确率,本设计采用基于特征点的方式进行图像配准。图像变换主要是解决图像配准后图像的内容拉伸变形的问题。 为了消除图像拼接产生的拼接缝隙,使其更加平滑、过渡更自然,需要在图像配准和变换后进行图像融合。 最后把处理过后的视频图像进行输出。
基于特征点的图像配准基本流程如图2 所示,视频图像采集完成后先进行特征点的检测,然后对特征点进行描述,得到特征点的集合后再进行特征点的匹配。 在特征点的匹配过程中,一般用特征点间的“距离”(例如欧式距离、汉明距离)来估算不同特征点之间的相似性度量(Similarity Measurement),然后采用最短距离的方法寻找最佳匹配点对[4]。 完成特征点的检测和匹配后就完成了图像的配准工作。
图2 基于特征点的图像配准流程图
使用特征点来实现图像配准的方法比较多,目前使用比较广泛的方法有SIFT、SURF、ORB 等,由于ORB 速度上比SIFT 和SURF 快得多, 而性能上与两者不相上下[5],因而本文采用ORB 算法作为视频拼接的配准算法。ORB(Oriented FAST and Rotated BRIEF)算法[5]是一种快速的特征点检测与描述算法,它基于FAST(Features from Accelerated Segment Test)关键点检测[6]和BRIEF(Binary Robust Independent Elementary Features)[7]描述符的组合,具有旋转不变性和对噪声的鲁棒性。
1.1.1 ORB 特征点检测子
ORB 特征点检测采用的是FAST 角点检测算法,它的核心思想就是在众多的像素点里找出与众不同的像素点。在灰度图像中,FAST 角点定义为:任取一个像素点,使其与邻域内的其他像素点进行比较,如果有一定数量的点与其差别很大,那么这个像素点就被选为角点[8]。FAST 角点检测示意图如图3 所示,选取一个像素点p(其灰度值为Ip), 然后在像素点p 的邻域以r 为半径的圆周上找到n 个像素点Ik,其中k=1,2,3,…,n。 那么FAST 角点的判别表达式如式(1)所示:
式中t 表示阈值。 通常r=3,n=16。
图3 FAST 角点检测示意图
FAST 角点的具体计算过程是:
(1)在图像上选择一个像素点p,设其灰度值为Ip。
(2)设置一个合适的阈值t,如果两个像素点的差值大于阈值,则认为这两个像素点不同。
(3)比较以r=3 时的圆周上的16 个像素点。
(4)如果这16 个像素点与像素点p 有m 个点不同,这里m=12,那么这个点就是角点。
(5)使用一个高效的排除算法,比如,仅检查圆周上位置为1、5、9、13 这四个位置的像素点,可以先检查1、9,看CRF=1 是否成立,然后再检查5、13。 如果是角点,那么上述的四个像素点至少有3 个应该满足CRF=1,如果不是这样,那么这个点肯定不是一个角点。
FAST 角点检测要对比的像素点太多,处理起来速度很慢,其实检测一个点是不是角点,没有必要把所有的点都进行对比。 文献[9]中使用决策树算法构造一个角点分类器,判断一个点是不是角点只需平均检测周围3.8 个像素点即可。
1.1.2 ORB 特征点描述子
特征点描述子就是在特征点邻域内随机选取若干点对,将这些点对灰度值的大小组合得到一个确定的二进制串,这个二进制串就是该特征点的描述子[10]。 特征点随机点对如图4 所示,特征点p 的邻域内存在若干点对,图中以不同颜色作为不同点对的区分。 ORB 特征点描述使用的是基于像素的二进制位比较的BRIEF 特征描述子[7],求解BRIEF 描述子的具体过程如下:
(1)选择其中一个特征点p,以特征点p 为圆心,在其邻域内以d 为半径画圆;
(2)在圆周内按照某一模式取个n 点对,为了方便叙述这里取n=5;
(3)标记这5 个点对,分别是p1(A,B),p2(A,B),p3(A,B),p4(A,B),p5(A,B),A 和B 分别表示点对两端的像素点;
(4)定义一种运算关系T,其表达式如式(2)所示:
式中,IA、IB分别表示A 和B 点的灰度值。
(5)对所有点对进行T 运算,将得到的结果按照式(3)进行组合:
上式中得到的二进制串01101 就是需要的ORB 特征描述子。
图4 特征点随机点对示意图
ORB 算法作为一种特征点检测与描述算法,在图像较小时效果还比较好,但是图像较大时消耗的时间较多,不适于视频配准的需求,因此对其进行改进。 已知摄像头的安装位置,即输入视频流的相对位置是已知的和固定的。 ORB 算法检测的特征点是针对于整幅图像的,运算量比较大,运算时间很长。 既然知道了两幅视频帧图像的相对位置, 就可以找出ROI 区域(感兴趣区域),即如图5 所示的两幅图中虚线内的图像部分,取该ROI 区域的图像进行ORB 运算,可大大减少运算量(此时的运算量可减少为原来的一半)[11-12]。
因此改进的ORB 检测流程如图6 所示。
图5 视频帧图像示意图
图6 改进的ORB 检测流程图
首先拍摄两张具有重叠区域的图片,如图7 所示。
图7 算法验证实验图
对图7 中左右两幅图进行ORB 算法检测特征点的匹配操作,效果图如图8 所示。
图8 ORB 算法检测特征点匹配图
再利用改进的ORB 算法进行仿真,实验效果如图9所示。
图9 改进ORB 算法检测特征点匹配图
从上面的实验结果对比可以看出,使用改进的ORB检测算法可以大大压缩传统的图像检测时间,提高了算法的检测效率,使得图像检测拼接技术可以应用于视频拼接。
本系统基于Xilinx 公司的Zynq-7000 系列AP SoC(All Programmable System on Chip,全可编程的片上系统)平台进行设计,在FPGA 架构中集成了一个处理系统PS(Processing System,即双核ARM Cortex-A9 硬核)和一个等价于一片FPGA 的可编程逻辑PL(Programmable Logic)。本系统硬件上主要由视频采集、视频拼接处理和视频显示三部分构成,如图10 所示。 视频采集设备使用的是两路500 万像素的OV5640 摄像头。 由于多个摄像头采集数据会有很大的吞吐量, 因此利用Vivado HLS 工具在Zynq 的PL 部分采用若干个IP 核对视频数据进行流水采集(#pragma HLS dataflow 和#pragma HLS PIPELINE II=1),并循环流水线核展开嵌套循环(#pragma HLS LOOP_FLATTEN),达到并行读取摄像头数据的目的,同时还利用Vivado HLS 对视频拼接算法中的特征点检测进行硬件加速IP 核封装设计,实现算法的高速并行处理。 视频显示部分通过VDMA 传输待显示的图像数据到HDMI接口进而传送到LCD 显示器上进行显示。
图10 系统功能结构图
为了实现良好的人机交互和提升系统的灵活性,在Zynq 的PS 部分,搭建嵌入式Linux 系统,移植部分OpenCV库和Qt 库并进行程序的编译、配置等工作,完成视频图像拼接系统的软硬件协调及人机交互用户界面。
两个OV5640 摄像头首先连接到Zynq 的PL 端,采用Verilog 语言按照SCCB 协议构造摄像头驱动模块,然后在Zynq 的PS 端按照标准的字符设备驱动方式采用C语言编写图像采集驱动程序,最后将摄像头模块连接在VDMA 上通过AXI4 总线传输数据。 对于图像显示部分,VDMA 传输的显示数据连接到HDMI 驱动显示模块,进而显示在显示器上。 系统硬件实物如图11 所示。
本文所提到的应用程序的用户界面是利用Qt 软件开发的,包括显示源视频图像的窗口、输出结果的窗口、必要的功能按键等。 开发的应用程序运行在基于Zynq平台的嵌入式Linux 系统上。硬件设备上电操作之后,在控制台电脑上可以看到嵌入式Linux 系统的启动信息。当Linux 系统启动完成,可以通过命令对应用程序进行启动,之后使用鼠标对应用程序进行操作,右上角有相应的按钮,可以打开和关闭摄像头,可以完成视频流的图片截取,可以完成视频的拼接。 应用程序进行视频拼接时的运行效果如图12 所示。
图11 系统硬件实物图
图12 系统应用程序运行图
本文使用清晰度和空间频率作为视频拼接质量的客观评价标准[13]。 不同重合率拼接质量客观评价分析如表1 所示。
表1 不同重合率拼接质量客观评价表
从表1 可以得出,不同重合率的视频图像的拼接对于拼接质量影响不同,重合率过小会导致图像无法配准,而重合率过大则导致配准后的图像信息量较少,拼接后的效果反而降低。 因此要选择合适的重合率,一般以30%~50%为宜。
再对拼接时效进行分析。 实验输入的视频图像的分辨率为640×480。 每隔0.5 s 取一帧图像,连续取10 帧。记录了两组视频拼接时间的数据,一组是未使用ROI 和未硬件加速的处理时间,如表2 所示;另一组是在使用ROI 改进算法并利用FPGA 逻辑资源对耗时最多的特征点检测算法进行硬件加速的情况下的拼接处理时间,如表3 所示。
通过对比两张表中的数据,可知使用ROI 和硬件加速的拼接处理时间远远小于未使用ROI 和未硬件加速的处理时间。 主要体现在特征点检测和特征点匹配上,特征点检测部分未使用ROI 和未硬件加速的处理时间是使用ROI 和硬件加速的处理时间的17.57 倍,特征点匹配部分未使用ROI 和未硬件加速的处理时间是使用ROI 和硬件加速的处理时间的1.26 倍。 对比其他部分,没有明显差异。 这是因为使用ROI 算法后,特征点的搜索区域变为原来的50%,减少了检测时间,降低了误匹配率。 特征点匹配上得益于ROI 算法,减少了特征点的分布区域,提高了特征点匹配的质量。
表2 未使用ROI 和未硬件加速的拼接时间(ms)
表3 使用ROI 和硬件加速的拼接时间(ms)
实验结果表明采用合适的重合率可以得到质量较好的拼接效果,使用FPGA 硬件加速算法大大提高了算法的效率,减少了拼接的时间。
本文针对ORB 算法特征点检测进行了改进创新,实验证明改进后的算法在运行时间上减少了很多,满足了视频处理的实时性。 对于利用Vivado HLS 设计工具将算法进行IP 核封装,实现硬件加速处理予以了验证,证明可以较大地提高算法的实时性。 同时,本文采用Zynq 平台设计视频拼接系统,对系统中各个模块进行了合理的任务分配,使得系统同时拥有ARM 的灵活性以及FPGA的并行处理能力,充分地展现了并行异构架构的优势,为机器视觉的小型化应用提供了重要参考。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!