一种图像缩放算法的SoC协同加速设计方法
2019-03-05王鹏曹云峰许蕾丁萌张洲宇曲金秋
王鹏, 曹云峰,*, 许蕾, 丁萌, 张洲宇, 曲金秋
(1. 南京航空航天大学 航天学院, 南京 210016; 2. 南京航空航天大学 民航学院, 南京 211106)
近年来由于机器视觉的飞速发展,图像处理技术在不同领域下的应用也越来越广泛。通常情况下,工程应用中的图像处理算法需要处理的图像数据很大,处理时间相对较长,因此提高处理速度在实时性要求比较高的应用领域是非常必要的。在算法优化已经无法提高计算速度的前提下,将部分单一、耗时的图像处理操作用硬件来实现可以有效地提高算法的速度[1-4]。现场可编程逻辑门阵列(Field-Programmable Gate Array,FPGA)具有灵活的开发方式以及很强的并行性和逻辑性,适用于数据量大的简单图像处理,但是其不擅长于比较复杂的算法及逻辑控制,而高端精简指令集机器 (Advanced RISC Machine,ARM)刚好具有较强的控制能力,能够协调软硬件的资源分配,控制整个系统的运行[5-8]。
文献[9]中提出了一种基于ARM+FPGA的交通标志识别系统,通过设计图像预处理IP核,结合Zynq-7000全可编程片上系统(System on Chip,SoC)提出了一个新的硬件平台,与现有的基于FPGA的解决方案相比,该硬件平台可以实现高达8倍的速度。文献[10]中认为方向梯度直方图(Histogram of Oriented Gradient,HOG)算法是一个计算密集的任务,并在基于Zynq SoC的系统上提出了3种不同的实现方法来加速算法,第1种采用OpenCV在ARM上运行HOG的方法,第2种采用ARM和FPGA协同实现的方法,第3种仅使用FPGA实现HOG算法,实验结果表明采用ARM和FPGA的协同方法在处理速度和资源利用综合指标下达到最优。因此笔者采用了ARM+FPGA软硬件协同的方式来实现无人机跑道检测算法中图像预处理的硬件加速。
本文针对目前主流计算机处理算法成本高、运行效率低的情况,提出了一种低成本、运行效率高的适用于机载的SoC实现方法。针对算法处理中相对耗时的图像缩放处理进行实验,提出了一种适用于硬件模块实现的图像缩放算法,并设计缩放算法知识产权(Intellectual Property,IP)核。采用Xilinx公司的Zynq-7000系列,该系统集成了2 个ARM Cortex A9核,以及最多可达相当于500多万个逻辑门可编程逻辑单元,搭建软硬件协同的图像处理操作系统[11-15],搭载设计的缩放算法IP核,完成图像的采集、传输、缩放到显示的过程,达到图像实时处理的要求。
1 系统结构搭建
整个图像处理系统如图1所示,系统的核心部分是Xilinx公司的Zynq-7000芯片,该芯片由处理系统(Processing System,PS)和可编程逻辑(Programmable Logic,PL)两大功能模块组成。PS和PL之间的接口都是基于总线协议(Advanced eXtensible Interface,AXI)设计的,包括高性能总线(High Performance AXI,AXI_HP)和通用总线(General Purpose AXI,AXI_GP)2种,在图像数据流传输中,部分使用AXI_HP设计的接口,提供快速传输的功能,而在控制部分使用AXI_GP总线设计的接口。图像采集部分使用的是OV7670图像传感器, 它具有体积小,工作电压低的特点,可以通过串行摄像机控制总线协议(Serial Camera Control Bus,SCCB)控制输入整帧、取窗口等方式的各种分辨率8位影像数据[9-12]。图像采集模块控制摄像头采集图像数据,并将数据传入到图像处理IP核中进行处理,处理后的数据送入数据搬运器(Datamover)中,通过Datamover可以实现数据从PL到双倍速率同步动态随机存储器(DoubleDataRate,DDR)的搬运,也可以实现数据从DDR到 PL的传送,对一些硬件无法实现的复杂图像处理运算,可以将数据传送到PS端进行处理,通过Datamover传送数据可以减少中央处理器(Central Processing Unit,CPU)的利用率,加速平台处理的速度,通过显示器显示处理后的图像。系统的硬件结构框图如图1所示。
图1 系统硬件结构示意图Fig.1 Schematic diagram of system hardware structure
2 图像缩放算法设计
传统的图像缩放大多是采用插值算法来实现的,主要包括最邻近插值、双线性插值和双三次插值算法。由于需要用硬件实现图像缩放,考虑到FPGA内的逻辑资源有限,而算法越复杂设计时占用的逻辑资源就越多,完成一幅图像缩放所用的时间就越长,影响算法的实时性,因此,笔者在基于无人机自主着陆的跑道检测算法中,考虑在满足缩放精度并且简化算法的情况下,设计了一种适用于FPGA硬件实现的图像缩放算法。很多航空电子嵌入式图像处理系统是由固定的图像采集源和显示设备组成,系统中的缩放倍率是固定的,因此根据通用跑道检测算法中显著性区域提取时将输入图像缩小0.25倍来进行设计,大大减小了算法的复杂性和硬件开发的难度。
2.1 算法原理
由于考虑将图像以0.25进行缩小,该算法的核心思路是选择一个4×4的像素块求取区域内每个像素点对中心点的影响系数,将该16个点的影响集中在一个点上,实现图像的缩小,输入像素和输出像素的映射关系见图2(a)。
图2 求取输出点示意图Fig.2 Schematic diagram of output point solving
在计算过程中,先选取行像素点求取中心点,这里以图2(a)中的第2行为例,根据A、B、C、D距离中心点的距离来确定影响系数并求取中心点E,如式(1)所示:
(1)
同理可得E′、e、e′。再分别根据每行获取的中心点求取列中心点O,即4×4区域的中心点,见图2(c)和式(2)。
(2)
分别将求取每行中心点获得的等式代入式(2),即可求得每个点对输出点的影响系数,见式(3):
(3)
式中:∂a为像素点a对输出像素点的影响系数,以此类推。用4×4的像素区域遍历输入图像,通过固定的系数处理该像素区域即可获得缩小后的图像,因此本文设计的缩放算法在结构上得到了简化,可以更方便地在FPGA中用硬件逻辑语言实现。
2.2 性能测试
算法结构在简化后,其性能的好坏需要和传统缩放算法作对比,因此,笔者根据本文设计的图像缩放算法编写MATLAB测试程序,并且和传统的最邻近插值、双线性插值和双三次插值算法分别作对比,从缩放后的效果图、运算时间等2个方面作对比。输入图像是用飞行模拟器(FlightGear)模拟获得的无人机着陆时的跑道图片,图3是3种传统算法和本文提出的算法处理效果对比图。
从图3中可以看到,将输入图像按同等倍数缩小时,4幅图像都保持了原有图像的基本特征,但是最邻近插值处理后的图像比较粗糙,有较明显的锯齿,而后3种图像处理后的效果比较平滑。在图像清晰度上,本文算法的处理效果相对于双线性插值和双三次插值更清晰。
除此之外,引入定量分析的指标对实验结果进行评估,采用文献[16]中的将图像缩小后再放大到同一分辨率,再利用绝对误差均值(Mean Absolute Error,MAE)、均方误差(Mean Squared Error,MSE)、峰值信噪比(Peak Signal to Noise Ratio,PSNR)以及信噪比(Signal Noise Ratio,SNR)对缩放效果进行评估。MAE、MSE、PSNR、SNR的计算公式分别为
(4)
(5)
(6)
(7)
式中:M和N分别为输入二维图像的行数和列数;g(i,j)和f(i,j)分别为横坐标为i、纵坐标为j下的输入图像和输出图像像素值。当MAE、MSE的值越小,PSNR、SNR的值越大,图像的处理效果越好,质量越高。采用这4个指标的客观比较结果如表1。
图3 不同算法处理效果图Fig.3 Processing effect diagram of different algorithms
从表1中可以看到,评价指标中MAE是最小的,MSE和双三次插值法同时最小,PSNR和SNR都是最大的,所以定量分析的结果是本文提出的算法相较于其他3种算法处理效果更好。4种算法处理的时间见表2。
从表2中可以看到,因为最邻近插值法的算法结构最简单,所以它的耗时最少,而双三次插值的耗时最多。在实际应用中,当基于无人机视觉算法的跑道跟踪过程中需要处理大量图片时,缩放环节节约的总时间是非常可观的。
因此,综合考虑算法的处理效果和运算时间,在该缩放应用处理中,本文提出的算法具有更大的优势,并且由于其结构简单,更利于使用FPGA的硬件逻辑编写实现进一步加速。
表1 定量分析对比Table 1 Comparison of quantitative analysis
表2 4种算法的MATLAB运行时间对比Table 2 Comparison of MATLAB running time among four algorithms
3 图像缩放IP核设计及仿真
缩放IP核的开发软件使用的是Xilinx公司的VIVADO设计套件,并用Verilog HDL(Hardware Description Language)进行硬件逻辑的编写。缩放图像中输入点对输出点的影响系数可以合并为以下3个:0.015 625、0.046 875、0.140 625。在硬件实现的时候为了提高处理速度,尽量避免浮点数运算,又要同时保持数据的精度,通常采用去尾法来处理浮点数,这3个系数可以写成式(8)的形式:
(8)
因此在硬件逻辑转化时将参数扩大26倍转换为整数运算,在二进制运算中即向左移6位,所以参数选用1、3、9,分别用二进制表示为4′b0001、4′b0011、4′b1001,最后获取处理后的数据时舍弃后6位数据即可。每个图像区域处理块中包含16个像素点,用4位计数器进行计数,根据计数器的数值对应像素块中点的相对位置,利用case语句选取对应参数,将输入数据依次乘上对应参数,并分别存入存储器中,进行累加。
图像缩放模块的仿真时序图如图4所示,为了方便观察和计算,测试仿真时输入一个16列、8行的像素矩阵块,前4行全部输入测试像素2,后4行全部输入测试像素6,缩放后的结果应为一个4列、2行的像素块,像素值依次为2、2、2、2、6、6、6、6,见图4仿真波形中的small_data。
将使用Verilog HDL编写的图像缩放IP核例化封装并加入到工程的IP核库中,在模块设计的时候添加该IP核即可完成调用。
图4 图像缩放模块仿真波形Fig.4 Simulation waveform of image scaling module
4 系统平台测试及性能分析
图5中只展示了系统部分关键模块图,包括设计的图像缩放IP核、ARM处理器模块、摄像头读取模块以及视频图形阵列 (Video Graphics Array,VGA)显示模块。
系统测试的主要器材包括一个Zynq-7000开发板、OV7670摄像头和VGA显示器。利用FlightGear飞行模拟器获得无人机着陆过程的视频,用一台笔记本播放该视频,通过摄像头获取无人机着陆的图像信息,并在VGA中实时显示处理后的结果。实验设备和实验结果见图6。
图5 系统部分模块图Fig.5 Part of module diagram of system
图6(b)中VGA显示器中显示了两部分图片,一部分是输入的原图像,一部分是左上角显示的处理后的缩小图片。通过串口助手获取摄像头采集到的输入图像以及经过IP核处理后的图像数据。在MATLAB中将摄像头捕捉到的输入图像用本文提出的缩放算法处理,并和硬件IP核处理后的图片作对比,处理时间见表3,SoC的处理速度比MATLAB快了171倍,基本实现了0延时。
MATLAB和SoC处理后的灰度直方图分别如图7(a)、(b)所示,2幅图的像素点分布基本一致,处理后图像对应位置像素点的差值绝对值最大为0.003 7,最小为0。由此可见,利用SoC进行图像缩放模块的设计,不仅运行速度大大提升,处理精度也非常高。
图7 MATLAB和SoC处理后直方图对比Fig.7 Histogram contrast after MATLAB and SoC processing
5 结 论
1) 本文采用了FPGA+ARM的SoC软硬件处理平台,综合了FPGA和ARM的优点,具有并行处理的能力和分系统控制能力,应用于图像处理中能够加速算法的处理速度。
2) 针对无人机自主着陆视觉算法中的图像缩放处理,提出了一种适用于硬件加速的图像缩放算法,在处理速度上仅次于结构简单的最邻近插值法,且处理效果最优。
3) 利用硬件描述语言实现本文的缩放算法,并封装成硬件IP核,在图像处理系统中的处理速度相较于软件实现提升了171倍,且处理后的像素误差最大值为0.003 7。
4) 整个系统采用了ARM作为中央控制器协调各IP核工作,具有很强的通用性,可以通过增减IP核来改进系统,适用于进一步的研究,以及图像处理IP核的设计。