引导滤波的软硬件协同加速器设计与实现
引导滤波算法被大量用于图像处理领域中,在去雨雪、去雾、前景提取、图像去噪、图像增强、级联采样等方面有很好的处理效果。但是对于实时应用,软件实现难以满足需要。提出了在SDSoC环境下利用软硬件协同开发策略实现引导滤波硬件加速。通过在SDSoC开发环境中调试C语言代码实现引导滤波算法,并将其中影响性能的函数用Xilinx公司开发的Zedboard开发版硬件实现。在设计中,采用了流数据的方法、PS(Processing System)端和PL(Programmable Logic)端协同开发策略,以及软硬件并行、流水线优化等优化方法,提高了加速器的整体性能。实验结果表明,提出的软硬件协同的引导滤波加速器加速比可达16。
2010年HE K M等人提出了引导滤波(Guided Filter)[1]算法。该算法与双边滤波最大的相似之处就是同样具有保持边缘的特性,不同之处在于它还克服了去伪影的影响。该算法被大量用于图像处理领域中,在去雨雪[2]、去雾[3]、前景提取[4]、图像去噪、图像增强、级联采样等方面有很好的处理效果。
但是,随着处理图像的尺寸不断扩大,基于CPU处理的引导滤波算法越来越不能满足人们的需求,因此,王新磊等[5]用CUDA实现了引导滤波GPU加速。为使引导滤波能在嵌入式领域达到实时处理,本文提出了基于FPGA对引导滤波实现加速的方法。
1 引导滤波算法介绍
引导滤波理论的基础是局部线性模型。该模型认为:任意函数上的任意一点与该点邻近部分的点可以看成是线性关系,一个复杂的函数可以用很多局部线性函数来表示。若需要求出该函数上某一点的值,只需求出所有包含该点的线性函数的值,并求出这些线性函数值的平均值,这个平均值就是该函数上所求点的值。
2 引导滤波加速器设计
2.1 实验环境介绍
本文采用Zynq-7000系列的Zedboard开发板[6]作为硬件开发环境,其PS端提供了ARM Cortex-A9处理器、512 MB DDR3内存空间和外部存储接口。其PL端的XC7Z020 CLG481-1 EEP芯片提供了可编程逻辑阵列单元,为硬件加速提供了丰富的逻辑资源。本文采用SDSoC[7]作为软件开发环境,它是基于Zynq-7000全可编程芯片在嵌入式系统中的IDE(Integrated Development Environment)。
2.2 算法结构设计
本文将单通道的图像数据存储在PS端的外部存储中,之后读取数据到内存中。为了获取最大的运算性能,在引导滤波函数调用前分配好算法需要的图像缓冲空间,将内存空间指针以参数形式传递给引导滤波函数,供其使用,之后PS端调用引导滤波函数。本文将引导滤波算法分为两部分,其中一部分是将对算法有较大影响的函数用硬件加速,硬件加速部分将数据传到PL端,PL端将其用硬件逻辑电路实现,对实现的硬件再通过流水线、并行处理和算法重构等优化方法对算法进行优化。处理完数据后,再将数据写回到PS端。最终PS端将处理好的图像存储在外部存储中。