掌桥专利:专业的专利平台
掌桥专利
首页

一种面向高速图像采集的超分辨率系统和方法

文献发布时间:2023-06-19 19:28:50



技术领域

本发明属于FPGA平台算法硬件加速的技术领域,具体涉及一种面向高速图像采集的超分辨率系统和方法。

背景技术

高速移动的无人机在对地面进行监测时,往往会使用高帧率机载相机进行拍摄,但由于传输带宽和机载计算机算力的限制,通常搭载的相机分辨率较低,因而其向地面站传回的图像模糊、缺少细节,难以满足高精度监测的需求。

超分辨率(Super-resolution),又称为上采样(upscale),是一类提高视频或图像分辨率及质量的算法,在监控视频处理、高分辨率摄像以及电影修复等视频编辑和图像处理领域应用十分广泛,可实现将地面站接收到的低分辨率图像转换为高分辨率图像的功能。

超分辨率算法中的传统插值算法以其算式规整、易于硬件实现等优势,仍存在较大的研究价值和硬件实现意义。传统插值算法主要包括最邻近插值法、双线性插值法和双三次插值法等。其中最邻近插值法简单快速,但插值输出图像质量不高。双线性插值法具有低通滤波器的属性,削弱了图像信息中的高频分量,导致插值输出图像边缘模糊。双三次插值法用插值点附近的4×4点阵(共16个点)作为参考,求得插值点像素值,其克服了最邻近插值法的阶梯边界问题,图像边缘的插值效果优于双线性插值。

双三次插值算法主要有两种实现方式:16点-普通双三次插值法和16点-卷积双三次插值法,其主要区别在于求解插值核的方式不同。前者根据卷积核的双三次项公式,求得插值系数;后者将二维平面插值核的求解化简为x方向和y方向,先后计算每个一维方向上的插值点系数,求得插值系数。16点-卷积双三次插值法算式简洁,x方向和y方向的硬件实现电路可以复用。

但是现有方法,横向窗和纵向窗未分离,需要缓存16个原始像素点,增加了硬件消耗和等待时间。

此外,16点-卷积双三次插值法首先在x方向和y方向进行系数计算,现有方法通常选取α=-0.5或α=-0.75作为插值算法的卷积核系数,由于通用计算机平台使用浮点ALU(算术逻辑单元)进行运算,选择带有小数位的系数并不会产生额外的计算开销,同时由于浮点数极大的动态范围,额外的小数位也可以被其精确的表示而不会引入误差。但对于FPGA平台来说,浮点运算的速度极慢,同时也会产生大量资源开销,而定点运算单元对于数据位宽十分敏感,现有方案使用α=-0.5或α=-0.75会导致参与运算的数据位宽成倍增加并带来额外的资源消耗,若为节省此消耗舍弃低位数据维持数据位宽,则会恶化插值图像的质量。同时目前16点-卷积双三次插值法并没有考虑4倍上采样时的特殊优化,对于4倍上采样,若直接插值,则在相邻两参考点间插入的点数并不固定,这样则需统计两参考点间所需插入的点数,引入了额外的计算复杂度。另外,由于相对距离不规则,在定点计算中需用有限小数近似表示无限小数,这带来了舍入误差。此外,现有方案在计算插值系数时使用不同的相对距离进行运算,其通过化简算式减少了加法与乘法的计算量,但并没有考虑到多级流水线带来的累计误差。

最佳架构是准确性和硬件成本之间的最佳权衡。因此必须在输出图像质量、硬件资源消耗和吞吐量性能方面仔细研究。G.Mahale等人所提出的双三次插值架构可生成高质量的上采样图片,但需要非常多的输出资源,能耗极高。A.Nuno-Magand、K.Gribbon、F.Sabetzadeh等人实现了双三次插值,这些架构将整个图像像素存储在外部存储器中,因此,需要相当大的外部存储器。这种外部存储器增加了系统的整体成本,降低了性能,并增加了功耗。同时目前大多数利用FPGA进行图像双三次插值的硬件实现方案使用浮点单元。浮点单元会造成很大的面积开销,产生高功率,并影响系统的整体性能。

综上所述,尽管基于16点-卷积双三次线性插值的超分辨率硬件系统设计已经存在多种解决方案,但是仍缺少一种兼顾硬件资源消耗、输出图像质量和吞吐量性能的方法。

发明内容

针对现有技术存在的问题,本发明提供一种面向高速图像采集的超分辨率系统和方法,提高了处理效率,降低了资源消耗。

本发明通过以下技术方案实现:

一种面向高速图像采集的超分辨率系统,包括:Padding模块、Linebuffer模块、Bicubic顶层计算模块和移位寄存器;

Padding模块,用于对原始图像进行补充,输出补充图像至Linebuffer模块;

Linebuffer模块,用于对补充图像进行行缓存,按顺序同步输出四行数据;

Bicubic顶层计算模块,用于接收Linebuffer模块输出的四行数据,通过纵向窗按列计算一维插值中间结果并暂存在移位寄存器中,四列计算完成后,通过横向窗按行计算一维插值中间结果的一维插值,得到插值点像素值并输出。

优选的,Bicubic顶层计算模块包括三个单通道模块,分别为R通道模块、G通道模块和B通道模块;每个单通道模块均包括Bicubic模块;

Bicubic顶层计算模块,用于接收Linebuffer模块输出的四行数据,并将四行数据的R、G、B像素值分别送入R通道模块、G通道模块、B通道模块;各单通道模块的Bicubic模块通过纵向窗按列计算一维插值中间结果并暂存在移位寄存器中,四列计算完成后,通过横向窗按行计算一维插值中间结果的一维插值,分别得到插值点的R、G、B像素值,将插值点的R、G、B像素值拼接得到插值点像素值并输出。

进一步的,Linebuffer模块提供使能信号,用于开启Bicubic模块进行运算。

进一步的,Bicubic模块包括cal_B模块、cal_q模块、shift_reg模块、cal_B_post模块和cal_q_post模块;

cal_B模块,用于接收四行数据,依次进行乘二操作、减法运算和加法运算,得到四个中间系数输出至cal_q模块;

cal_q模块,用于接收cal_B模块输出的四个中间系数,依次通过乘法操作和两级加法树,得到一维插值中间结果输出至shift_reg模块;

shift_reg模块,用于接收cal_q模块输出的一维插值中间结果并通过移位寄存器进行缓存,实现四点一维插值中间结果并行输出至cal_B_post模块;

cal_B_post模块,用于接收shift_reg模块输出的四点一维插值中间结果,依次进行乘二操作、减法运算和加法运算,得到四个横向中间系数并输出至cal_q_post模块;

cal_q_post模块,用于接收cal_B_post模块输出的四个横向中间系数,依次通过乘法操作和两级加法树,得到二维插值结果,即插值点的R、G或B像素值。

进一步的,cal_q模块,将接收的输入四个中间系数与预存参数进行运算,第一级完成乘法操作,然后通过两级加法树得到一维插值中间结果。

进一步的,cal_q_post模块,将接收的四个横向中间系数与预存参数进行运算,第一级完成乘法操作,然后通过两级加法树得到二维插值结果;

cal_q_post模块设置四个,每个cal_q_post模块的预存参数不同,四个cal_q_post模块并行计算,在一个时钟周期得到相邻四个点的二维插值结果。

一种面向高速图像采集的超分辨率方法,包括:

S1,对原始图像进行补充,得到补充图像;

S2,对补充图像进行行缓存,得到四行数据;

S3,将四行数据通过纵向窗按列进行一维插值得到一维插值中间结果并暂存,四列计算完成后,通过横向窗按行对一维插值中间结果进行一维插值,得到插值点像素值。

优选的,S1具体是:将原始图像边缘的像素值赋给原始图像需补充的像素点,得到补充图像。

优选的,S3中,进行一维插值时,按照固定间隔插入插值点的规则进行。

优选的,S3中,一维插值采用的卷积核如下:

其中,|d|为插值点到参考点的距离。

与现有技术相比,本发明具有如下的有益效果:

本发明超分辨率系统,基于16点-卷积双三次插值算法,Bicubic顶层计算模块通过纵向窗先按列计算一维插值中间结果,将算出的一维插值中间结果暂存在移位寄存器中,每周期向右滑动一次;4个周期后,横向窗按行计算一维插值中间结果的一维插值,采用移位寄存器进行缓存并实现4点一维插值中间结果值并行输出,能对运算过程中的中间结果进行高效复用,可以在纵向窗并行度减少到1的同时保持输出数据不变,从而节省硬件资源,在一定程度上降低了资源消耗。本发明为高频率、低功耗的超分辨率系统,此系统实现将地面站接收到的低分辨率图像转换为高分辨率图像的功能,可满足无人机系统在高速移动下的高精度监测需求。

进一步的,将运算中用到的常数(如两个插值点之间的距离d)预先存储在硬件中,从而避免了大量的冗余运算。

本发明超分辨率方法,基于16点-卷积双三次插值算法,通过纵向窗先按列计算一维插值中间结果,将算出的一维插值中间结果暂存,每周期向右滑动一次;4个周期后,横向窗按行计算一维插值中间结果的一维插值,通过缓存的方式实现4点一维插值中间结果值并行输出,从而对运算过程中的中间结果进行高效复用,可以在纵向窗并行度减少到1的同时保持输出数据不变,从而节省硬件资源,在一定程度上提高了资源利用率。

进一步的,在本发明中,将原始图像最外圈即边缘的像素值赋给了需要填充的值,从而能够最大程度地使得插值点不失真。

进一步的,考虑到直接4倍上采样会使参考点之间插入不同个数的点数引起额外的资源消耗和精度损失,本发明通过Padding使待插值点均匀的分布于参考点之间,并且其与参考点间的相对距离为固定的数,即|d|固定,可以减少硬件消耗。

进一步的,本发明在参数选取过程中考虑到现有方案可能引入的误差和计算量,选择α=-1作为卷积核参数,避免卷积核参数中出现小数,同时规避因引入除法器执行单元造成流水线延迟恶化,提高卷积核计算的流水线吞吐率。

附图说明

图1为双三次插值示意图;

图2为不同Padding方案对比示意图;

图3为插值点与参考点间距离示意图;

图4为插值算式化简方案分析示意图;

图5为原始图像需补充的像素点示意图;

图6为本发明padding过程示意图;

图7为本发明的算法流程示意图;

图8为Bicubic模块示意图;

图9为Bicubic顶层计算模块结构示意图;

图10为单通道模块结构示意图;

图11为cal_B模块结构示意图;

图12为cal_q模块结构示意图;

图13为横向窗和纵向窗示意图;

图14为shift_reg模块结构示意图;

图15为cal_B_post模块结构示意图;

图16为cal_q_post模块结构示意图;

图17为本发明整体系统框图;

图18为测试向量过程示意图;

图19为上采样测试图像的第一行行首的C99与post-implementation仿真结果的对比结果;

图20为上采样测试图像的第一行行尾的C99与post-implementation仿果的对比结果;

图21上采样测试图像第五行行首的C代码与post-implementation仿真结果的对比结果;

图22为上采样测试图像第五行行尾的C代码与post-implementation仿真结果的对比结果;

图23为本发明得到的4K图像的显示结果;

图24为本发明得到的资源使用情况以及资源利用率;

图25为系统的时钟约束;

图26为Bicubic IP布局布线后的建立保持时间裕量分析。

具体实施方式

为了进一步理解本发明,下面结合实施例对本发明进行描述,这些描述只是进一步解释本发明的特征和优点,并非用于限制本发明的权利要求。

本发明包括三个部分:算法部分、硬件部分和系统部分。

算法部分:对一维双三次插值算法进行改进,最终实现的改进算法中,乘法运算量为原始一维、二维双三次插值算法的75%与47%。

硬件部分:将运算中用到的常数(如两个插值点之间的距离d)预先存储在硬件中,从而避免了大量的冗余运算;此外,使用移位寄存器对运算过程中的中间结果进行高效复用,从而在一定程度上降低了资源利用率。最后,在双三次插值实现中使用了多级流水技术,从而提升运算效率。

系统部分:在Zynq 7020开发平台进行系统搭建时,使用VDMA将计算模块所在的PL端与DDR所在的PS端进行互联,VDMA提供的高带宽为后续视频流的实现提供了基础。

以下对三个部分分别进行介绍。

一、算法部分采用以下技术方案:

本发明采用16点-卷积双三次插值算法进行后续的硬件实现。

双三次插值算法可以看作一维插值函数的二维扩展。一维插值函数如式(1)所示:

其中,k取0,1,2,3,A

在本发明中选用R.Keys给出的卷积核,以相邻4个点为参考进行插值点像素值计算。卷积核如下:

其中,d是参考点与待求点之间的距离。参数α一般设置为-0.5或-0.75,在本发明中设置参数α=-1。即卷积核是分段三次多项形式。

双三次插值算法在一维插值结果的基础上再次进行插值。如图1所示,双三次插值算法选取相邻的16个参考点,所选参考点的位置取决于插值点的坐标,使得插值点g(x,y)落在参考点A

其中,i与j取0,1,2,3,A

即依次在y,x方向上进行插值,由于该公式(3)是线性运算,二维方向上计算次序的改变不会影响最终结果。因而在实际应用中可参考算法实现的空间复杂度和时间复杂度等指标,确定计算次序。

在FPGA(现场可编程门阵列)的四则运算中,除法在时间和空间上的开销都大于其他三者,在算法的硬件设计中应减少除法运算的引入。从整张图像的插值处理上看,求解插值点所需的16个参考点需要依次代入公式(3)中。在本发明中设置参数α=-1,避免卷积核参数中出现小数,同时规避因引入除法器执行单元造成流水线延迟恶化,提高β(d)计算的流水线吞吐率。选取参数α=-1的卷积核β(d)如式(4):

其中,|d|为插值点到参考点的距离。

双三次插值算法的硬件实现可以分为两类:非均匀结构和均匀结构。非均匀结构在图像旋转、无极放缩等领域中使用。均匀结构本质是非均匀结构的一种特殊情况,仅适用于插值点位置固定的情况。由于本发明采用固定的放大倍数,与此同时考虑到减少硬件消耗,故选取均匀结构。以8点的一维四倍插值为例,具体实现方式如图2所示。在无padding情况下,若要进行一维四倍均匀插值,则两参考点之间插入的点数为6或者7,且插值点与参考点之间的相对距离各不相同,这导致在硬件中需要计算每个插值点与参考点间的距离,同时相邻两参考点之间的插值个数不同将会引入额外的计数器去控制下一级模块的计算次数,这也会引入额外的资源消耗,padding为1的情况类似。在本发明中采用了padding为2的方式,由图可知,若采用此方式,待插值点会均匀的分布在参考点之间,即两参考点之间固定间隔插入4个点,假设两参考点之间的距离为1,|d|为待插值点与左侧临近参考点之间的距离,易知|d|分别等于1/8、3/8、5/8、7/8,由于|d|值固定,为避免重复计算,提前将|d|,|d|

本发明通过简化插值算法,尽可能减少DSP(硬件乘法器)的使用。

如图3所示,假设参考点间距离为1,插值点g(x,y)与参考点A

I

g(u)=u×(u×(u×B

进一步合并可得:

g(u)=u

其中:

对于原始一维双三次插值算法,其插值点像素值计算公式由式(7)给出,硬件结构图如图4(a)所示,不难看出,在此结构图中,需要使用5个定点乘法器和3个加法器。将公式(7)提取公因式优化得到式(6),图4(b)为优化后的结构图,其乘法运算量变为原始的75%。进一步地,由于本发明的padding方式使插值点与参考点之间的距离只有4个固定取值,可利用其特点将u,u

二维双三次插值算法是一维插值在空间维度上的扩展,其最终算式由式(9)给出:

g(v)=v

其中:

g

u和v的取值分别为1/8、3/8、5/8、7/8。

在进行插值计算时,插值开始的位置如图5所示,其中,圆形点为原始图像上的像素点。在计算pix_d(0,0)时,其在原图上的参考点以及插值用到的4×4像素窗口分别为pix_re(0,0)以及pix_s 4×4,由此可以发现,此时需要补充一部分像素点(图5方形点)才可以完成插值运算。补充的过程也称为padding。

在本发明中,padding过程如图6所示,本发明并没有选择简单的填充0,而是将原始图像最外圈即边缘的像素值赋给了需要填充的值,从而能够最大程度地使得插值点不失真。

本发明的算法流程示意图如图7所示。

算法包括以下步骤:

S1,将原始图像进行Padding,具体是:在原始图像周围补充像素点,优选将原始图像边缘的像素值赋给原始图像需补充补充的像素点,得到补充图像;

S2,Padding后的补充图像经过行缓存(Linebuffer),按顺序同步输出四行数据;

S3,同步输出的四行数据并行进入Bicubic顶层计算模块。Bicubic顶层计算模块由Bicubic模块例化三次得到,并行处理R、G、B三个通道像素值。Bicubic模块分为纵向窗和横向窗;纵向窗接收Linebuffer并行发送的四行数据,按列计算一维插值中间结果,将算出的一维插值中间结果暂存在移位寄存器中,每周期向右滑动一次;4个周期后,横向窗按行计算一维插值中间结果的一维插值并输出,该值即为最终插值点单通道像素值,横向窗每周期向右滑动一次。Bicubic顶层计算模块按位拼接插值点的R、G、B通道的像素值并输出。

S4,判断图像插值点是否全部计算完成,若计算完成则进入下一步,若未完成则等待完成。

S5,进行图像数据整合和添加BMP文件头等操作。

一、硬件部分采用以下技术方案:

本发明双三次插值算法的硬件,包括Linebuffer模块、Bicubic顶层计算模块,Bicubic顶层计算模块包括三个单通道模块,分别为R通道模块、G通道模块、B通道模块,单通道模块包括Bicubic模块。

Linebuffer模块,用于对Padding后的补充图像进行行缓存,按顺序同步输出四行数据至Bicubic顶层计算模块。

如图8所示,Bicubic模块由纵向窗和横向窗构成,两者本质上是结构相似的硬件模块在不同维度(横向和纵向)上的使用。其中方形点表示Linebuffer模块正在或将要输出的像素点,圆形点表示Linebuffer模块在已过去的时钟周期输出的点,三角点表示纵向窗输出的一维插值中间结果,菱形点表示最终计算得到的插值点像素值。

值得一提的是,由于横向窗和纵向窗分离,使得Linebuffer模块输出的数据可以直接进入纵向窗进行处理,免于缓存16个原始像素点,减少了硬件消耗和等待时间。

本发明的Bicubic顶层计算模块如图9所示,通过上级模块控制此Bicubic顶层计算模块的启停与计算模式选择,输入为四行数据的RGB像素值,分别送入相应的单通道模块(R通道模块、G通道模块、B通道模块)进行计算并在计算结束后将其拼成四个点的RGB像素值输出到下一级。

时钟和复位信号为Bicubic顶层计算模块提供同步时钟与复位,使能信号由上一级的Linebuffer模块提供,用来开启Bicubic模块进行运算,line0_pixel~line4_pixel为待插值图像的四行RGB数据。为减小FPGA(现场可编程门阵列)开发板中的处理器从DDR3存储器中恢复数据所需的计算量,本设计拟访问四次DDR3中的原始图像,计算结果的输出方式是按行遍历,每次输出一行数据相邻的四个插值点,行遍历的顺序为1,5,…,2157,2,6,…,2158,3,7,…2159,4,8,…,2160。sel信号用于对内部的parameter数据进行选择,选择计算并输出第几行的数据。vld_out用来给下一级模块提供使能,使其正确接收有效数据。

单通道模块由8个子模块构成,通过计算得出每一行相连四个点的像素值。如图10所示,包括cal_B模块、cal_q模块、shift_reg模块、cal_B_post模块和四个cal_q_post模块。

cal_B模块说明:

此模块结构示意图如图11所示,输入为原始图像的像素值,首先通过移位运算实现乘二操作,随后在第二级和第三级流水线实现减法和加法运算,最终得到中间系数。cal_B模块中各信号具体定义由表1给出。

表1cal_B模块中各信号具体定义

cal_q模块说明:

此cal_q模块结构示意图如图12所示,输入为四个中间系数,通过数据选择器选择预存参数进行运算,第一级完成乘法操作,然后通过两级加法树得到一维插值中间结果q。cal_q模块中各信号具体定义由表2给出。

表2cal_q模块中各信号具体定义

shift_reg模块说明:

此shift_reg模块实现横向滑窗功能。如图13所示,x0-x7为某行中上采样得到的8个点,q0-q4为纵向窗计算结果,其中,横向窗1中的q0-q3用来计算上采样点x0-x3;横向窗2中的q1-q4则用来计算上采样点x4-x7。因此可以得出,纵向窗计算结果q在计算不同位置的像素值(如图中的横向窗1和横向窗2)时可以复用,故采用移位寄存器进行缓存并实现4点一维插值中间结果q值并行输出,为下一级cal_B_post模块提供输入。通过这种方式,可以将纵向窗并行度减少到1的同时保持输出数据不变。从而节省硬件资源。

shift_reg模块结构示意图和信号定义由图14和表3给出。

表3shift_reg模块中各信号具体定义

cal_B_post模块说明:

此cal_B_post模块用于计算横向中间系数,输入为shift_reg模块输出的4点一维插值中间结果q,首先通过移位运算实现乘二操作,随后在第二级和第三级流水线实现减法和加法运算,最终得到四个横向中间系数输出。模块结构示意图和信号定义由图15和表4给出。

表4cal_B_post模块信号定义

cal_q_post模块说明:

此模块结构示意图如图16所示,输入为四个横向中间系数,使用预存参数进行运算,第一级完成乘法操作,然后通过两级加法树得到二维插值结果q。

值得注意,一共存在四个类似的模块cal_q_post模块,每个模块的预存参数有所区别,通过并行计算,在一个时钟周期得到相邻四个点的插值结果。由于软件算法中存在计算结果为负数或大于255的情况(软件中大于255赋值255,小于0赋值0),在硬件中也需要进行判断并舍入,首先通过符号位判断是否为负数,若为负数,将输出结果置零,然后通过整数最高位的上一位判断是否有溢出情况,若存在溢出,将输出结果置为255。对于一般的输出结果,由于计算存在小数位,故需要通过硬件进行四舍五入得到最终像素值,当整数位小于255且小数位大于0.5时,整数位加一输出为最终结果,其他情况直接将整数位作为最终结果。

cal_q_post模块信号定义由表5给出。

表5cal_q_post模块信号定义

三、系统部分采用以下技术方案:

本发明整体系统框图如图17所示,主要分为数据流和控制流。

数据流可分为上采样处理部分和HDMI输出部分:

上采样处理部分:PS端读取BMP图像,舍弃文件头等预处理后,存入DDR3内存指定地址中;VDMA0使能读通道,从DDR3上述地址读取原始图像数据,通过AXI4-stream接口将数据流发送至Linebuffer IP核。Linebuffer IP核缓存3行并和下行数据同步,共计输出4行数据。Bicubic IP核处理从Linebuffer IP核接受到的数据,依次通过AXI4-stream接口输出上采样图像的第1,5,9......行数据。VDMA1使能写通道,接收Bicubic IP核处理后的数据流,并将其写回至DDR另一处指定地址中。以上步骤循环4次,与第一次不同之处在于,第二次Bicubic IP核输出上采样图像的第2,6,10......行数据,以此类推。PS端读取并整定上采样输出数据,经过添加文件头等BMP后处理,将文件命名并写入SD卡内。

HDMI输出部分:VDMA2使能读通道,读取PS整定后的图像数据,通过AXI4-stream接口发送给AXI-Stream to Video Out IP核。AXI-Stream to Video Out IP核在VideoTiming Controller IP核的控制下,将AXI4-Stream格式数据转换为RGB888格式,发送给DVI Transmitter,用于驱动HDMI接口。

控制流,上位机通过UART与PS端交互;实现从上位机发送给PS端,显示图像的初始坐标信息;以及从PS端发送给上位机,BMP图像写入SD卡完成信号。GP接口通过AXIInterconnect与外设配置接口互连,实现PS端控制PL端外设。PS端配置VDMI IP核的帧缓存空间地址和大小和读写通道等,初始化并配置Video Timing Controller IP核的输出时序参数,控制开启或停止显示。

具体实施实例

硬件仿真验证:

仿真验证的目的为验证本阀门中的硬件模块是否可以正确实现本发明设计的超分辨率算法并与C代码运行结果完全一致。因此在本次的测试向量中,主要实现把1K原图中的像素点作为激励传送到硬件模块中,检查输出像素点是否与C代码的运行结果存在差别。

在测试向量的控制信号部分,clk信号为整个硬件提供时钟信号,因此需要循环赋值;rst信号提供复位,因此在初始化时为0,之后21ns后拉高,从而减小系统启动时对运算结果的影响。en为整个系统提供使能,因此同样在初始化时为0,之后21ns后拉高。

在测试向量的数据信号部分,首先,使用MATLAB将1K图像中的像素值转为16进制形式并存储在txt中。之后使用readmemh函数将txt中的像素值存储在pixel0_mem、pixel0_mem、pixel0_mem和pixel0_mem中。待en信号拉高后,将上述四个存储器中的值依次写入硬件的数据输入接口,具体过程如图18所示。

上采样后的图像尺寸为3840×2160,如果将硬件输出的整张图像都与C代码进行对比,比较起来较为复杂。因此,从上采样后的结果中任选几行数据。将行首部分和行尾部分的数据与C代码的结果进行对比。行首和行尾的对比结果相同,可以证明整行的数据计算无误。不同行的数据对比则基本可以说明整张图像的计算结果无误。

对于测试图像,通过MATLAB读取C代码产生的上采样图像并将其转换为16进制格式。同时,将原始测试图像写入testbench,之后对硬件进行布局布线后的仿真(post-implementation timing simulation)。上采样测试图像的第一行行首、行尾的C代码与post-implementation仿真结果的对比如图19和图20所示。图19中,vld_out_all为输出数据有效信号。从图中可以发现,在vld_out_all拉高之后,仍然存在3个周期的无效数据,且在第四个周期中,前两个数据也为无效。之后才为正确的上采样结果。根据图中方框标出的结果可以得出,C代码得到超分辨率图像在post-implementation的仿真结果在第一行行首的数据一致。而在图20中,第一行最后一个周期的输出数据中,依然有两个数据为无效数据。除此之外,C代码的运行结果与硬件的仿真结果一致。

上采样测试图像第五行行首、行尾的C代码与post-implementation仿真结果的对比如图21和图22所示。从图中结果可以发现,除去与图19和图20中形式类似的无效数据。C代码与硬件仿真得到的结果同样基本一致。

通过上述仿真验证结果可以得出,本发明实现的硬件可以实现上采样的功能。且输出结果与C代码的运行结果一致。

系统验证:

在系统验证过程中,首先,将需要进行超分辨率的1K图像拷贝到SD卡中,之后将SD卡插入开发板。给开发板上电之后,将程序下载到开发板中,开始进行超分辨率的硬件实现。计算得到的4K图像的像素点会由计算模块所在的PL端通过VDMA传输至PS端进行SD卡的写入与HDMI显示。显示后的结果如图23所示,左边的显示器上显示的图像即为超分辨率后的4K图像,受显示器分辨率的限制,一张4K图像分四次显示。

为了较为全面地对算法设计及硬件实现进行评估,本发明将性能评估分为两个过程:图像质量评估和硬件评估。其中,图像质量评估主要用于评估超分辨率后的图像质量,采用的三个指标分别为:PSNR、SSIM以及LPIPS模型获得的L

图像质量评估:

本发明选取的图像质量评估指标为:PSNR、SSIM以及LPIPS模型获得的L

为了便于对超分辨率后的图像质量进行较为直观的评估,选择了一定数量的4K图像,并使用取平均值的方式将其压缩为1K,之后,将其进行超分辨率处理,将处理后的4K图像与原始图像进行比较,从而判断算法处理图像的质量。

因此,将4K图像与C代码实现的上采样结果进行比较,对于PSNR、SSIM以及L

硬件评估:

对于硬件评估过程,对于实现的硬件系统进行synthesis以及implementation,从而得到逻辑资源使用情况。接下来,进行主时钟约束,并在建立时间裕量、保持时间裕量、VDMA读写带宽满足要求的情况下得到了系统运行的最高频率,时钟约束及时间裕量结果由图24、图25给出。最后,根据系统运行频率以及完整图像的运行周期,可以得到系统进行单张图像上采样的延迟。

对于实现的硬件进行implementation后,得到包括VDMA、Video TimingController等IP在内的完整系统的资源使用情况如图26所示。

以单张图像为例,上采样所需的总延迟可由公式(8)得出。其中,Latency

根据对硬件模块的设计过程可得,本发明的硬件系统处理单张图像所需的周期为:

N

其中,N

因此可以得出对单张图像进行上采样的总延迟为:

因此可得系统总延迟为0.013s,理论帧率为76FPS,可以实现应用于无人机高速图像采集。

综合对比本发明(Bicubic IP)和其他主流硬件实现方式,可得下表6:

表6本发明和其他主流硬件综合比较结果

不难看出,在拥有较高时钟频率的同时,本发明的输出图像质量和硬件逻辑资源占用相较于其他实现方式存在一定优势。

本发明实现的功能为:基于Xilinx Zynq7020开发平台,将单张分辨率较低的1K图像经过超分辨率算法后得到分辨率较高的4K图像并使用HDMI进行显示,同时将得到的4K图像输出结果写入SD卡。

本发明首先在参数选取过程中考虑到现有方案可能引入的误差和计算量,选择α=-1作为卷积核参数。其次,考虑到直接4倍上采样会使参考点之间插入不同个数的点数引起额外的资源消耗和精度损失,本发明对图像进行Padding操作,通过Padding使待插值点均匀的分布于参考点之间,并且其与参考点间的相对距离为四个固定的有限小数。此外,由于只有四个距离参数,故可对算式进行进一步化简减少流水线级数来减小累计误差或数据位宽。考虑现存方案使用浮点算数导致面积开销增多、功率消耗升高、计算速率降低等问题,本发明使用定点单元进行运算,通过参数的选取、Padding图像和算式化简,本发明可利用位宽较窄的定点运算得到与浮点运算结果十分接近的插值结果。同样,针对现有方案存在过于依赖外部存储的问题,本发明使用流水线并行架构实现,Bicubic IP内部没有任何额外存储器,输入由Linebuffer生成的4×1纵向窗给出,每个时钟周期其接收四个像素值。进一步地,本发明探究了IP内部数据复用的可能性,由于距离参数固定,通过使用移位寄存器生成横向窗,本发明将每个时钟周期需要计算四次中间结果优化为一次,这减少了重复计算带来的负面影响。另外,本发明通过合理的安排乘法器和加法器的连接顺序,减少了流水线级数和所需的数据位宽,实现了计算精度和资源消耗的平衡。

相关技术
  • 一种面向异构平台的高能效图像超分辨率系统及其方法
  • 一种触觉图像超分辨率重建方法及采集系统
技术分类

06120115921866