一种基于FPGA的双线性插值重采样实现方法及装置转让专利

申请号 : CN202210648305.8

文献号 : CN114741352B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 景博曹玉龙张尧孙康睿

申请人 : 杭州未名信科科技有限公司浙江省北大信息技术高等研究院

摘要 :

本申请提供一种基于FPGA的双线性插值重采样实现方法及装置。其中,方法包括:计算序列发生器基于双线性插值法对输入图像进行处理得到按区块划分的输出图像;对于输出图像的每个区块,计算序列发生器生成参考点头地址和区块中每个输出点对应的写地址、参考系数查找表的索引;参考点加载模块根据参考点头地址从输入图像中获取参考点;对于区块中的每个输出点,多个参考系数加载模块分别根据参考系数查找表的索引从参考系数查找表中获取一个参考点的参考系数;乘加模块根据参考点和参考系数计算得到区块中的每个输出点,并将输出点存入写地址中。相较于现有技术,本申请能够加速双线性插值重采样的过程。

权利要求 :

1.一种基于FPGA的双线性插值重采样实现方法,其特征在于,FPGA硬件电路包括:计算序列发生器、参考点加载模块、多个参考系数加载模块、乘加模块、多个缓存器和数据存储器;所述方法包括:所述计算序列发生器基于双线性插值法对输入图像进行处理得到按区块划分的输出图像;对于输出图像的每个区块,所述计算序列发生器生成参考点头地址和所述区块中每个输出点对应的写地址、参考系数查找表的索引,并存储在相应的缓存器中待取用;所述写地址为所述数据存储器中的存储地址;

所述参考点加载模块根据参考点头地址从输入图像中获取参考点,并存储在相应的缓存器中待取用;

对于所述区块中的每个输出点,多个所述参考系数加载模块分别根据参考系数查找表的索引从参考系数查找表中获取一个参考点的参考系数,并将每个参考点的参考系数送入所述乘加模块;

所述乘加模块根据参考点和参考系数计算得到所述区块中的每个输出点,并将所述输出点存入所述写地址中。

2.根据权利要求1所述的方法,其特征在于,所述多个缓存器均采用FIFO存储器。

3.根据权利要求1所述的方法,其特征在于,所述参考系数加载模块的数量为4个。

4.根据权利要求1所述的方法,其特征在于,所述数据存储器采用块存储器。

5.一种基于FPGA的双线性插值重采样实现装置,其特征在于,包括:计算序列发生器、参考点加载模块、多个参考系数加载模块、乘加模块、多个缓存器和一个数据存储器;

所述计算序列发生器分别通过单独的缓存器与所述数据存储器、参考点加载模块、多个参考系数加载模块和乘加模块一一对应连接;

所述参考点加载模块还通过一个缓存器与所述乘加模块连接;

所述多个参考系数加载模块还与所述乘加模块连接;

所述乘加模块还与所述数据存储器连接;

所述计算序列发生器,用于基于双线性插值法对输入图像进行处理得到按区块划分的输出图像;对于输出图像的每个区块,生成参考点头地址和所述区块中每个输出点对应的写地址、参考系数查找表的索引,并存储在相应的缓存器中待取用;所述写地址为所述数据存储器中的存储地址。

6.根据权利要求5所述的装置,其特征在于,所述多个缓存器均为FIFO存储器。

7.根据权利要求5所述的装置,其特征在于,所述参考系数加载模块的数量为4个。

8.根据权利要求5所述的装置,其特征在于,所述数据存储器为块存储器。

说明书 :

一种基于FPGA的双线性插值重采样实现方法及装置

技术领域

[0001] 本申请涉及图像处理技术领域,具体涉及一种基于FPGA的双线性插值重采样实现方法及装置。

背景技术

[0002] 双线性插值(bilinear)是一种根据四个输入计算一个输出的方法,广泛应用于重采样的计算。重采样是神经网络中重要的计算环节,可以用来进行图片的缩放。CPU(中央处理器)计算重采样过程复杂,消耗时间长。
[0003] 因此,如何加速双线性插值重采样的过程是本领域亟需解决的技术问题。

发明内容

[0004] 本申请的目的是提供一种基于FPGA的双线性插值重采样实现方法及装置,以加速双线性插值重采样的过程。
[0005] 本申请第一方面提供一种基于FPGA的双线性插值重采样实现方法,FPGA硬件电路包括:计算序列发生器、参考点加载模块、多个参考系数加载模块、乘加模块、多个缓存器和数据存储器;所述方法包括:
[0006] 所述计算序列发生器基于双线性插值法对输入图像进行处理得到按区块划分的输出图像;对于输出图像的每个区块,所述计算序列发生器生成参考点头地址和所述区块中每个输出点对应的写地址、参考系数查找表的索引,并存储在相应的缓存器中待取用;所述写地址为所述数据存储器中的存储地址;
[0007] 所述参考点加载模块根据参考点头地址从输入图像中获取参考点,并存储在相应的缓存器中待取用;
[0008] 对于所述区块中的每个输出点,多个所述参考系数加载模块分别根据参考系数查找表的索引从参考系数查找表中获取一个参考点的参考系数,并将每个参考点的参考系数送入所述乘加模块;
[0009] 所述乘加模块根据参考点和参考系数计算得到所述区块中的每个输出点,并将所述输出点存入所述写地址中。
[0010] 可选的,所述多个缓存器均采用FIFO存储器。
[0011] 可选的,所述参考系数加载模块的数量为4个。
[0012] 可选的,所述数据存储器采用块存储器。
[0013] 本申请第二方面提供一种基于FPGA的双线性插值重采样实现装置,包括:
[0014] 计算序列发生器、参考点加载模块、多个参考系数加载模块、乘加模块、多个缓存器和数据存储器;
[0015] 所述计算序列发生器分别通过单独的缓存器与所述数据存储器、参考点加载模块、多个参考系数加载模块和乘加模块一一对应连接;
[0016] 所述参考点加载模块还通过一个缓存器与所述乘加模块连接;
[0017] 所述多个参考系数加载模块还与所述乘加模块连接;
[0018] 所述乘加模块还与所述数据存储器连接。
[0019] 可选的,所述多个缓存器均为FIFO存储器。
[0020] 可选的,所述参考系数加载模块的数量为4个。
[0021] 可选的,所述数据存储器为块存储器。
[0022] 相较于现有技术,本申请提供的基于FPGA的双线性插值重采样实现方法及装置具有如下有益效果:
[0023] 1、同一组参考点的输出点一起计算,减少了加载参考点所需要的等待时间,大大提高了计算单元(乘加模块)的利用率;
[0024] 2、流水线设计,产生写地址、读取参考点、计算输出点等过程相互独立,乘加模块计算的同时,序列发生器可以生成写地址、参考点加载模块可以预读下一组参考点,灵活性大大提高;
[0025] 3、基于FPGA采用硬件加速方法,实现对双线性插值计算的硬件加速,进一步减少了计算时间,从而提升重采样计算性能。

附图说明

[0026] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0027] 图1示出了本申请提供的一种上采样方法的示意图;
[0028] 图2示出了本申请提供的一种FPGA硬件电路的结构示意图;
[0029] 图3示出了本申请提供的一种基于FPGA的双线性插值重采样实现方法的流程图;
[0030] 图4示出了本申请提供的输入点与输出点之间依赖关系的示意图之一;
[0031] 图5示出了本申请提供的输入点与输出点之间依赖关系的示意图之二;
[0032] 图6示出了本申请提供的计算序列发生器11的工作过程的示意图;
[0033] 图7示出了本申请提供的参考点加载模块12的工作过程的示意图;
[0034] 图8示出了本申请提供的参考系数加载模块13的工作过程的示意图;
[0035] 图9示出了本申请提供的乘加模块14的工作过程的示意图。

具体实施方式

[0036] 下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0037] 需要注意的是,除非另有说明,本申请使用的技术术语或者科学术语应当为本申请所属领域技术人员所理解的通常意义。
[0038] 另外,术语“第一”和“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0039] 为进一步说明本申请实施例的方案,下面将结合附图进行描述。可以理解的是,下面各实施例中,相同或相应的内容可以相互参考,为描述简便,后续不作赘述。
[0040] 重采样包括上采样和下采样,常用来进行图片尺寸的缩放。以上采样为例,可以将4x4的图片扩大到8x8,如图1所示,图中每一个圆圈代表一个像素点。
[0041] 本实施例中,对图像的重采样采用现有的中心对称的双线性插值法,双线性插值的过程中,每个输出像素点(简称:输出点)output_signal依赖于四个输入像素点(简称:输入点)f0、f1、f2、f3,f0、f1、f2、f3前面的系数记为k0、k1、k2、k3,即输出点的计算公式如下:
[0042] output_signal= k0*f0+k1*f1+k2*f2+k3*f3。
[0043] 本申请提供的一种基于FPGA的双线性插值重采样实现方法,该方法基于本申请提供的FPGA硬件电路。
[0044] 如图2所示,本申请提供的FPGA硬件电路包括:计算序列发生器11、参考点加载模块12、多个参考系数加载模块13、乘加模块14、多个缓存器15和数据存储器16。
[0045] 具体的,计算序列发生器11分别通过单独的缓存器15与数据存储器16、参考点加载模块12、多个参考系数加载模块13和乘加模块14一一对应连接;参考点加载模块12还通过一个缓存器15与乘加模块14连接;多个参考系数加载模块13与乘加模块14连接;乘加模块14连接还与数据存储器16连接。
[0046] 可选的,多个缓存器15均可以采用FIFO存储器。参考系数加载模块13的数量为4个。数据存储器16可以采用块存储器,块存储器有较大的存储空间,使用更灵活方便。
[0047] 具体的,参考点加载模块12根据参考点头地址读取外部bram加载四个输入参考点。一个参考点会在同参考的输出点的计算中被多次使用,直到所有的同参考的输出点被计算完才出队。
[0048] 具体的,四个参考系数加载模块13分别用于存储四个参考点f1、f2、f3、f4前面的系数k0、k1、k2、k3,并根据输入的索引值输出对应的系数。
[0049] 具体的,乘加模块14根据参考点加载模块12输出的f1、f2、f3、f4四个点以及四个参考系数加载模块13输出的k0、k1、k2、k3计算输出点ouput_signal。
[0050] 请参考图3,其示出了本申请提供的基于上述FPGA硬件电路的双线性插值重采样实现方法的流程图,该方法包括:
[0051] S101、所述计算序列发生器基于双线性插值法对输入图像进行处理得到按区块划分的输出图像;对于输出图像的每个区块,所述计算序列发生器生成参考点头地址和所述区块中每个输出点对应的写地址、参考系数查找表的索引,并存储在相应的缓存器中待取用;
[0052] 其中,所述写地址为所述数据存储器中的存储地址。参考点头地址是每个区块生成一个,写地址和参考系数查找表的索引是每个输出点对应一个。
[0053] S102、所述参考点加载模块根据参考点头地址从输入图像中获取参考点,并存储在相应的缓存器中待取用;
[0054] S103、对于所述区块中的每个输出点,多个所述参考系数加载模块分别根据参考系数查找表的索引从参考系数查找表中获取一个参考点的参考系数,并将每个参考点的参考系数送入所述乘加模块;
[0055] S104、所述乘加模块根据参考点和参考系数计算得到所述区块中的每个输出点,并将所述输出点存入所述写地址中。
[0056] 下面以输入图像为4x6、边长放大倍数=2为例介绍本申请的发明构思。
[0057] 输入图像中输出点依赖的四个输入点f0、f1、f2、f3的选取如图4所示。
[0058] 图4中左图为4x6的输入图像,右图为8x12的输出图像。输出图像的相邻点(虚线框中的区块),依赖同一组输入点。例如,右图左上角的第一个区块的输出点,依赖于左图左上角第一个方框内的输入点;右图左上角的第二个区块的输出点,依赖于左图第二个方框内的输入点。
[0059] 计算一个输出点需要依赖一组4个输入点(以下称为:参考点),需要花费4个时钟周期从bram(块存储器)中读取,而计算一个输出点本身只需要1个周期。本申请中,为最大化计算单元的利用率,同参考点的输出点(区块)一起计算。如图5所示,输出点上的数字表示计算的顺序。先算第一组区块(输出点1至9),然后算第二组区块(输出点10至15),再算第二组区块(输出点16至21),依次类推。
[0060] 可见,本申请中是按照区块来计算输出点的,而现有技术是按照行来计算输出点的,例如先计算第0行(1、2、3、10、11、16、17等),在计算第1行、第2行,以此类推。现有技术的缺点在于,以第一组区块为例,其计算输出点1至9依赖一组4个参考点,需要三次从bram中读取,花费12个时钟周期,而本申请只需要花费4个时钟周期,因此,本申请的双线性插值重采样过程较快,同时提高了计算单元的利用率。
[0061] 正是基于以上构思,本申请提出了图2所示的FPGA硬件电路,该电路的工作过程是:
[0062] 1、计算序列发生器11(Sequencer)产生数据存储器的写地址(write_addr),该写地址用于写入最终的计算结果。
[0063] 2、Sequencer产生参考点头地址(head_addr),后级参考点加载模块12(point_loader)根据该head_addr读取每组四个参考点(f0、f1、f2、f3),经过缓存后送入乘加模块14(X+)进行计算。
[0064] 3、Sequencer产生参考系数查找表的索引(index),该index送入后级的系数表,查找一组四个参考系数(k0、k1、k2、k3),参考系数被送入乘加模块14进行计算。
[0065] 4、乘加模块14算出计算结果,并将该结果存入Sequencer产生的写地址中。
[0066] 本实施例中,上述FPGA硬件电路采用流水设计,以上4个步骤可以并行进行,相互独立,灵活性大大提高。
[0067] 上述FPGA硬件电路中:
[0068] 计算序列发生器11的工作过程如下:
[0069] 如图6所示,计算序列发生器11内部的步进器按照区块遍历输出图像,先依次遍历第一个框线中的每个点,并生成对应的写地址和参考系数查找表的索引index送入对应的缓存器,然后方框移动至下一个区块,再依次遍历该区块的点,以此类推。当第一行区块完成后,开始遍历第二行区块,直至所有区块遍历完成。遍历每个区块的第一个点时,会生成用于查找参考点的参考点头地址head_addr送入对应的缓存器,后级参考点加载模块12会根据该参考点头地址读取参考点,一个区块的输出点计算使用同一组参考点。计算序列发生器11遍历每个区块的最后一个点、生成index时,会生成用于指示当前参考点出队的index_last信号。
[0070] 参考点加载模块12的工作过程如下:
[0071] 参考点加载模块12从前级的缓存器中取head_addr,将该地址作为左上角的顶点,从外部bram读取四个相邻的参考点f0、f1、f2、f3,输出至对应的缓存器,用于乘加模块14计算输出结果。如图7所示,例如输入的head_addr为3,则参考点加载模块12从外部存储输入图像的bram中,花费4个时钟周期,依次读取以地址3为左上角顶点的四个相邻的点作为f0、f1、f2、f3,并输出至后级的缓存器中,待乘加模块14取用。
[0072] 参考系数加载模块13的工作过程如下:
[0073] 四个参考系数加载模块13从前级的缓存器中读取参考系数查找表的索引index,根据该地址,从预先写好的参考系数查找表中输出四个系数k0、k1、k2、k3,用于乘加模块14计算输出结果。如图8所示,例如输入的index为2,则参考系数加载模块13输出的k0、k1、k2、k3的值分别为48、144、16、48,输入至后级缓存器,待乘加模块14取用。
[0074] 乘加模块14的工作过程如下:
[0075] 如图9所示,乘加模块14分别从两个前级的缓存器读取f0、f1、f2、f3和k0、k1、k2、k3,计算输出点k0*f0+k1*f1+k2*f2+k3*f3。乘加得到的输出结果,会依次存入计算序列发生器11产生的写地址中,直至所有写地址被写入(write_addr_last信号为高电平时表示全部写入),计算完成。
[0076] 本申请提供的基于FPGA的双线性插值重采样实现方法,具有如下有益效果:
[0077] 1、同一组参考点的输出点一起计算,减少了加载参考点所需要的等待时间,大大提高了计算单元(乘加模块)的利用率;
[0078] 2、流水线设计,产生写地址、读取参考点、计算输出点等过程相互独立,乘加模块计算的同时,序列发生器可以生成写地址、参考点加载模块可以预读下一组参考点,灵活性大大提高;
[0079] 3、基于FPGA采用硬件加速方法,实现对双线性插值计算的硬件加速,进一步减少了计算时间,从而提升重采样计算性能。
[0080] 在上述的实施例中,提供了一种基于FPGA的双线性插值重采样实现方法,与之相对应的,本申请还提供一种基于FPGA的双线性插值重采样实现装置。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
[0081] 所述基于FPGA的双线性插值重采样实现装置包括:
[0082] 计算序列发生器、参考点加载模块、多个参考系数加载模块、乘加模块、多个缓存器和数据存储器;
[0083] 所述计算序列发生器分别通过单独的缓存器与所述数据存储器、参考点加载模块、多个参考系数加载模块和乘加模块一一对应连接;
[0084] 所述参考点加载模块还通过一个缓存器与所述乘加模块连接;
[0085] 所述多个参考系数加载模块还与所述乘加模块连接;
[0086] 所述乘加模块还与所述数据存储器连接。
[0087] 可选的,所述多个缓存器均为FIFO存储器。
[0088] 可选的,所述参考系数加载模块的数量为4个。
[0089] 可选的,所述数据存储器为块存储器。
[0090] 本申请实施例提供的基于FPGA的双线性插值重采样实现装置,与本申请前述实施例提供的基于FPGA的双线性插值重采样实现方法出于相同的发明构思,具有相同的有益效果。
[0091] 最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围,其均应涵盖在本申请的权利要求和说明书的范围当中。