基于FPGA的图像缩放处理方法及装置与流程

文档序号:12787262阅读:302来源:国知局
基于FPGA的图像缩放处理方法及装置与流程

本发明涉及图像处理技术领域,特别涉及一种基于FPGA的图像缩放处理方法及装置。



背景技术:

随着对图像数据质量要求越来越高,需要对图像数据进行缩放处理,目前图像数据缩放领域,缩放的算法多种多样,但归根到底都是通过对原图像数据进行插值实现的,主要的插值算法有:最近邻插值算法、双线性插值算法和立方卷积插值算法。基于插值算法实现的难易程度和最终的缩放效果来综合考虑,目前图像数据缩放大多数采用的是双线性插值算法。

在利用FPGA(Field-Programmable Gate Array,现场可编程门阵列)通过双线性插值算法进行图像数据缩放时,目前需要用外部存储器,如SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存储器),这样一方面增加了硬件成本,增加布线难度,另一方面,需要从外部存储器中读取数据,增加FPGA控制逻辑,降低FPGA逻辑速度,从而降低数据读取速度,影响图像数据缩放效率,即图像数据缩放效率低等。



技术实现要素:

基于此,有必要针对增加成本以及缩放效率低的问题,提供一种减小成本且提高缩放效率的基于FPGA的图像缩放处理方法及装置。

一种基于FPGA的图像缩放处理方法,包括如下步骤:

获取原图像数据,并以预设放入速度将所述原图像数据放入FPGA内部缓存;

以与所述预设放入速度对应的读取速度从所述内部缓存中读取原图像数据,并根据插值算法以及读取的原图像数据,进行插值计算,获得图像插值数据;

根据所述图像插值数据,获得缩放后的图像数据。

一种基于FPGA的图像缩放处理装置,包括:

存放模块,用于获取原图像数据,并以预设放入速度将所述原图像数据放入FPGA内部缓存;

图像插值数据获取模块,用于以与所述预设放入速度对应的读取速度从所述内部缓存中读取原图像数据,并根据插值算法以及读取的原图像数据,进行插值计算,获得图像插值数据;

缩放后的图像数据获取模块,用于根据所述图像插值数据,获得缩放后的图像数据。

上述基于FPGA的图像缩放处理方法及装置,获取原图像数据,并以预设放入速度将原图像数据放入FPGA内部缓存,以与预设放入速度对应的读取速度从内部缓存中读取原图像数据,并根据插值算法以及读取的原图像数据,进行插值计算,获得图像插值数据,根据图像插值数据,获得缩放后的图像数据。由于将原图像数据放入FPGA内部缓存中缓存,无需利用外部存储器来存储,减少硬件成本,且后续读取原图像数据时可从FPGA内部缓存中进行读取,无需再从外部存储器中读取,加快数据读取速度,从而可提高整体图像缩放效率。另外,以与预设放入速度对应的读取速度从内部缓存中读取原图像数据,即以合理地读取速度对原图像数据进行读取,可确保读取的速度避免由于读取速度太慢导致数据丢失,提高缩放处理效率。

附图说明

图1为一实施例的基于FPGA的图像缩放处理方法的流程图;

图2为另一实施例的基于FPGA的图像缩放处理方法的流程图;

图3为双线性插值原理图;

图4为FPGA的组成结构示意图;

图5为一实施例的基于FPGA的图像缩放处理方法装置的模块示意图;

图6为另一实施例的基于FPGA的图像缩放处理方法装置的模块示意图。

具体实施方式

请参阅图1,提供一种实施例的基于FPGA的图像缩放处理方法,包括如下步骤:

S110:获取原图像数据,并以预设放入速度将原图像数据放入FPGA内部缓存。

原图像是指待处理图像,在本实施例中,是对图像进行缩放处理,也就是说原图像为待缩放图像,由于图像是由像素点组成,从而,原图像数据是指原图像像素点值,在需要对原图像进行缩放处理时,首先需要获取原图像数据,即获取原图像的像素点值。在本实施例中,通过FPGA实现图像缩放处理,为了提高FPGA处理速度,FPGA将原图像数据放入FPGA内部缓存中,无需利用外部存储器进行存储,减小成本,后续在进行读取时,直接从FPGA内部缓存中读取,无需从外部存储器中读取,提高读取速递,从而提高后续对图像缩放处理效率。另外,在缓存控制逻辑汇总,为了实现用FPGA内部缓存来缓存数据并且数据不会丢失,必须精确从FPGA内部缓存中读取数据的读取速度,速度太慢会导致数据丢失,速度太快会加大FPGA实现的难度,造成不必要的资源来那个费,从而为了后续需要以合理地读取速度读取数据,以预设放入速度将原图像数据放入FPGA内部缓存。

S120:以与预设放入速度对应的读取速度从内部缓存中读取原图像数据,并根据插值算法以及读取的原图像数据,进行插值计算,获得图像插值数据。

以与预设放入速度对应的读取速度进行读取原图像数据,也就是说,以合理地速度对原图像数据进行读取,既可确保数据不会丢失又可确保读取速度。在获得读取的原图像数据后,根据插值算法进行插值计算,获得图像插值数据。

S130:根据图像插值数据,获得缩放后的图像数据。

在对图像进行缩放时,实际上是对图像的插值处理,插值算法有多种,通过插值算法对原图像数据进行插值处理获得图像插值数据后,也就可获得对原图像数据进行缩放后的图像数据。

上述基于FPGA的图像缩放处理方法,获取原图像数据,并以预设放入速度将原图像数据放入FPGA内部缓存,以与预设放入速度对应的读取速度从内部缓存中读取原图像数据,并根据插值算法以及读取的原图像数据,进行插值计算,获得图像插值数据,根据图像插值数据,获得缩放后的图像数据。由于将原图像数据放入FPGA内部缓存中缓存,无需利用外部存储器来存储,减少硬件成本,且后续读取原图像数据时可从FPGA内部缓存中进行读取,无需再从外部存储器中读取,加快数据读取速度,从而可提高整体图像缩放效率。另外,以与预设放入速度对应的读取速度从内部缓存中读取原图像数据,即以合理地读取速度对原图像数据进行读取,既可确保读取的速度避免由于读取速度太慢导致数据丢失,提高缩放处理效率,又可避免由于读取速度太快加大实现难度造成资源浪费的问题。

请参阅图2,在其中一个实施例中,FPGA内部缓存包括第一内部缓存、第二内部缓存以及第三内部缓存,且第一内部缓存、第二内部缓存以及第三内部缓存分别只存储单位行图像数据。

在本实施例中,获取原图像数据,并将原图像数据放入FPGA内部缓存的步骤包括:

S211:获取原图像数据。以单位行为步长以及预设行顺序方向,将原图像数据的单位行图像数据放入第一内部缓存、第二内部缓存以及第三内部缓存中空闲的缓存。

其中,预设行顺序方向包括从最小行至最大行的行顺序方向或从最大行至最小行的行顺序方向。具体地,在本实施例中,采用最小行至最大行的顺序方向。由于图像的大小由行和例大小共同决定,图像的最小行为图像数据的原点对应的行,最大行为图像数据的最大坐标点对应的行。比如,原图像数据大小为M*N,M行N列大小的图像,最小行即为原图像的第一行,最大行即为原图像的第M行。原图像数据包括多行图像数据,例如,M*N大小的原图像数据,其包括M行图像数据,以单位行为步长以及预设行顺序方向,将原图像数据的单位行图像数据放入第一内部缓存、第二内部缓存以及第三内部缓存中空闲的缓存,也就是实现将原图像数据按照单位行步长将单位行图像数据放入FPGA内部缓存中。

在本实施例中,以与预设放入速度对应的读取速度从内部缓存中读取原图像数据,并根据插值算法对读取的原图像数据进行插值计算,获得图像数据插值数据的步骤包括:

S221:当第一内部缓存、第二内部缓存以及第三内部缓存均存储有的单位行图像数据时,以读取速度从FPGA内部缓存中读取存储时间较长的前两个单位行图像数据,并将存储时间最长的单位行图像数据从FPGA内部缓存中删除。

S222:根据插值算法以及读取的存储时间较长的前两个单位行图像数据,进行插值计算,获得初始图像插值数据。

S223:判断原图像数据是否放入完毕。

若否,返回以单位行为步长以及预设行顺序方向将原图像数据放入第一内部缓存、第二内部缓存以及第三内部缓存中空闲的缓存的步骤。

若是,则执行以下步骤:

S224:读取FPGA内部缓存中剩余的两个单位行图像数据,根据插值算法以及读取的FPGA内部缓存中剩余的两个单位行图像数据,进行插值计算,获得剩余图像数据插值数据,图像数据插值数据为剩余图像数据插值数据和各初始图像插值数据。

具体地,单位行为单行,由于图像可表示为像素点值的矩阵,从而可以行列大小表示图像的大小,行数据表示图像矩阵中的行像素点值。原图像数据包括多行图像数据,行数由原图像数据的大小决定,例如,原图像数据的大小为M*N,即有M行的图像数据和N列图像数据。在对原图像数据进行插值计算时,为了提高处理速度,将原图像数据以单位行为步长存放到FPGA内部缓存中,FPGA内部缓存包括第一内部缓存、第二内部缓存以及第三内部缓存,每单位行图像数据放入到对应的单个内部缓存中。

例如,初始时,第一内部缓存、第二内部缓存以及第三内部缓存均为空闲,空闲是指缓存中没有存放任何数据,将原图像的第一行的图像数据开始输入的时候存入到第一内部缓存,第二行的图像数据开始输入的时候存入第二内部缓存,第三行的图像数据输入的时候存入到第三内部缓存,由于第一内部缓存、第二内部缓存以及第三内部缓存分别只存储单个单位行图像数据,此时,FPGA不再接收图像数据存储,以读取速度从内部缓存中读取存储时间较长的前两个单位行图像数据(即第一行的图像数据和第二行的图像数据),并将存储时间最长的单位行图像数据(即第一行的图像数据)从FPGA内部缓存中删除,并且根据插值算法,第一行的图像数据和第二行的图像数据,进行插值计算,获得第一行的图像数据和第二行的图像数据对应的初始图像插值数据,此时,由于第一行的图像数据从FPGA内部缓存中删除了,即第一内部缓存空闲了,若原图像数据还未放入完毕,则返回以单位行为步长将图像数据放入第一内部缓存、第二内部缓存以及第三内部缓存中空闲的缓存的步骤继续存放原图像数据,即将第四行的图像数据放入到第一内部缓存中,此时,上述FPGA内部缓存中第二内部缓存和第三内部缓存中的数据存储时间较长,即将第二行的图像数据和第三行的图像数据读取,并第二行的图像数据从FPGA内部缓存中删除,并且根据插值算法以及读取的第二行的图像数据和第三行的图像数据,进行插值计算,获得第二行的图像数据和第三行的图像数据对应的初始图像插值数据。此时,由于第二行的图像数据已删除,第二内部缓存是空闲的,第一内部缓存存储了第四行的图像数据,第三缓存存储了第三行的图像数据,若原图像数据还未放入完毕,则返回以单位行为步长将图像数据放入第一内部缓存、第二内部缓存以及第三内部缓存中空闲的缓存的步骤继续存放原图像数据,即将第五行的图像数据放入到第二内部缓存中,轮循,直到原图像数据放入完毕,此时,FPGA内部缓存中还有存储时间较晚的两行的图像数据未被删除,也未被读取,即读取FPGA中未读取的两个单位行图像数据,根据插值算法以及读取的FPGA中未读取的两个单位行图像数据,进行插值计算,获得剩余图像数据插值数据,图像数据插值数据为剩余图像数据插值数据和各初始图像插值数据。

为了避免FPGA从外部存储器中读取原图像数据,提高读取效率,将原图像数据存储在FPGA内部缓存中,以便后续快速读取,由于FPGA内部缓存的存储空间不大,每个内部缓存仅可存储单位行图像数据(本实施例中为单行),为了避免空间不足带来的影响,通过上述轮循环的方式进行插值计算,实现图像缩放处理,即在每个内部缓存中存储单行的图像数据,每计算一次插值计算后删除一行存储时间最长的图像数据,以给出空闲的缓存空间,以便下一行的图像数据存放,这样无需等到所有原图像数据都存放完毕后再进行插值计算,提高插值计算效率,从而提高图像缩放效率。

在其中一个实施例中,上述以与预设放入速度对应的读取速度从内部缓存中读取原图像数据之前,还包括步骤:

获取原图像数据的初始大小以及原图像数据缩放后的预设目标大小,并根据预设放入速度、原图像数据的初始大小以及预设目标大小,获取从FPGA内部缓存中读取原图像数据的读取速度。

在缓存控制逻辑中,为了实现FPGA内部缓存来缓存数据并且数据不会丢失,必须要精确计算从FPGA内部缓存中读取数据的读取速度,速度太慢会导致数据的丢失,速度太快会加大FPGA实现的难度,造成不必要的资源浪费。以640x1136分辨率(原图像数据的初始大小)的原图像放大成720x1280分辨率(预设目标大小)的图像为例,假设原图像数据放入FPGA内部缓存的预设放入速度为S1,则获取读取速度S2的公式为:

S2=(720/640)*(1280/1136)*S1。

在其中一个实施例中,插值算法包括双线性插值算法,FPGA内部缓存为FPGA内部SRAM,第一内部缓存为第一内部SRAM、第二内部缓存为第二内部SRAM以及第三内部缓存为第三内部SRAM。

考虑到插值算法实现的难易度以及缩放效果,采用双线性插值算法对图像进行缩放处理。在双线性差值的算法中,新生成的图片的元素是由原始图片位置在新元素周围四个相邻的点通过加权平均计算出来。这样就可以保留新生成的元素与周围元素的相关性,使得图像在边沿有较好的缩放效果。如图3所示,像素点A,B,C,D为原图像元素(原图像像素点),E为新图像元素(缩放后的图像像素点),元素值都为8位位宽的数据。则新图像元素E的像素点值E(x+dx,y+dy)的计算方法为:

E(x+dx,y+dy)=(1-dx)(1-dy)A(x,y)+dx(1-dy)B(x,y)+(1-dx)dyC(x,y)+dxdyA(x,y)。

从上面的公式可以看出,用FPGA来计算新图像元素需要8个乘法器,两个减法器,3个加法器。其中,A(x,y)为A的坐标,B(x,y)为B的坐标,C(x,y)为C的坐标,D(x,y)为D的坐标,dx为新图像元素E与像素A的横坐标距离,dy为新图像元素E与像素B的纵坐标距离。

FPGA内部缓存为FPGA内部SRAM,SRAM为静态随机存储器,不需要刷新电路即能保存它内部存储的数据,可提高整体的工作效率。第一内部缓存为第一内部SRAM(SRAM1)、第二内部缓存为第二内部SRAM(SRAM2)以及第三内部缓存为第三内部SRAM(SRAM3)。每次计算一个插值点的像素值,必须要用到周围四个点的像素值,FPGA内部缓存必须可以缓存三行的图像数据,需要采用FPGA本身自带的3个双端口SRAM来实现缓存。

FPGA在一个实施例中的组成结构图如图4所示,该FPGA包括FPGA逻辑控制模块、分别与FPGA逻辑控制模块连接的FPGA内部缓以及插值计算模块,SRAM1、SRAM2以及SRAM3均分别与FPGA逻辑控制模块连接。在FPGA逻辑控制模块中包括基于FPGA的图像缩放处理装置,该基于FPGA的图像缩放处理装置应用于基于FPGA的图像缩放处理方法,即基于FPGA的图像缩放处理方法通过FPGA逻辑控制模块执行。

通过FPGA逻辑控制模块控制FPGA内部缓存的数据存放以及读出数据送入插值计算模块进行插值计算。因为FPGA内部缓存中每种缓存仅可以存三行数据,因此需要在循环存储处理,当第一行图像数据开始输入的时候存入SRAM1,第二行图像数据开始输入的时候存入SRAM2,第三行图像数据开始输入的时候存入SRAM3,对第一行图像数据和第二行图像数据进行读取进行插值计算,删除第一行图像数据后,SRAM1空闲,第四行图像数据开始输入的时候存入SRAM1,轮循。

同时,当第三行图像数据开始存入SRAM3时,从SRAM1和SRAM2中取出图像数据进行插值计算新的插值数据。当第四行图像数据存入SRAM1的时候,从SRAM2和SRAM3取出图像数据计算新的插值数据。当第五行图像数据存入SRAM2的时候,从SRAM3和SRAM1取出图像数据计算新的插值数据。当第六行图像数据开始存入SRAM3时,从SRAM1和SRAM2中取出数据计算新的插值数据,轮循,直到图像数据读取完毕。通过上述轮循过程,就可以实现用3个双端口的SRAM来缓存三行图像数据,达到实现双线性插值计算的目的。

在其中一个实施例中,上述根据插值算法以及读取的原图像数据,进行插值计算,获得图像插值数据之前,还包括步骤:

将每个读取的原图像数据的位宽调整为预设的位宽,更新读取的原图像数据。

其中,预设的位宽为8位。通过上述公式在进行插值运算时,可以看到双线性插值算法中,需要用到乘法器,乘法器的位宽将会很大程度上决定改算法的放大效果。但是乘法器的位宽会受到FPGA的运算速度和资源的制约,因为必须要选择一个合适的乘法器的位宽,使它既能达到放大效果又可以满足FPGA的运行速度。

由于像素点之间的距离为1,结合双线性插值算法原理图可以看出,dx、dy、(1-dx)以及(1-dy)都是介于0到1之间的小数。因为FPGA不支持小数运算,所以必须将它转化为整数运算。原始元素值A(x,y),B(x,y),C(x,y),D(x,y)是固定为8位位宽的数据,所以把小数转化为整数的位宽将会决定乘法器的位宽,也会决定算法的放大效果。在历史试验中,测试了将小数转化为4位,6位,8位,10位位宽的乘法器的放大效果,实践表明乘法器的位宽越大,放大的效果越好,但是放大效果与位宽宽度并不是线性递增的关系,当位宽的宽度在10位以上(包括10位),放大效果没有显著的改善,并且10位位宽的乘法器会造成FPGA整体运算效率的降低,因此,在综合FPGA资源、放大效果和FPGA运算速度三大因素之后,采用8位位宽的乘法器放大效果可以达到要求,从而,根据插值算法以及读取的原图像数据,进行插值计算,获得图像插值数据之前,将每个读取的原图像数据的位宽调整为8位,更新读取的原图像数据。

请参阅图5,一种基于FPGA的图像缩放处理装置,其特征在于,包括:

存放模块510,用于获取原图像数据,并以预设放入速度将原图像数据放入FPGA内部缓存。

图像插值数据获取模块520,用于以与预设放入速度对应的读取速度从内部缓存中读取原图像数据,并根据插值算法以及读取的原图像数据,进行插值计算,获得图像插值数据。

缩放后的图像数据获取模块530,用于根据图像插值数据,获得缩放后的图像数据。

请参阅图6,在其中一个实施例中,FPGA内部缓存包括第一内部缓存、第二内部缓存以及第三内部缓存,且第一内部缓存、第二内部缓存以及第三内部缓存分别只存储单位行图像数据。

存放模块包括:

获取模块611,用于获取原图像数据。

存储模块612,用于以单位行为步长以及预设行顺序方向,将原图像数据的单位行图像数据放入第一内部缓存、第二内部缓存以及第三内部缓存中空闲的缓存。

其中,预设行顺序方向包括从最小行至最大行的行顺序方向或从最大行至最小行的行顺序方向。具体地,在本实施例中,采用最小行至最大行的顺序方向。

图像插值数据获取模块包括:

读取模块621,用于当第一内部缓存、第二内部缓存以及第三内部缓存均存储有单位行图像数据时,以读取速度从FPGA内部缓存中读取存储时间较长的前两个单位行图像数据,并将存储时间最长的单位行图像数据从FPGA内部缓存中删除。

初始图像插值数据获取模块622,用于根据插值算法以及读取的存储时间较长的前两个单位行图像数据,进行插值计算,获得初始图像插值数据。

判断模块623,用于判断原图像数据是否放入完毕。

返回模块624,用于判断模块的判断结果为否时,返回存储模块以单位行为步长以及预设行顺序方向,将原图像数据的单位行图像数据放入第一内部缓存、第二内部缓存以及第三内部缓存中空闲的缓存。

剩余图像数据插值获取模块625,用于判断模块的判断结果为是时,读取FPGA中剩余的两个单位行图像数据,根据插值算法以及读取的FPGA中剩余的两个单位行图像数据,进行插值计算,获得剩余图像数据插值数据,图像数据插值数据为剩余图像数据插值数据和各初始图像插值数据。

在其中一个实施例中,上述基于FPGA的图像缩放处理装置,还包括速度获取模块。

速度获取模块,用于图像插值数据获取模块以与预设放入速度对应的读取速度从内部缓存中读取原图像数据之前获取原图像数据的初始大小以及原图像数据缩放后的预设目标大小,并根据预设放入速度、原图像数据的初始大小以及预设目标大小,获取从FPGA内部缓存中读取原图像数据的读取速度。

在其中一个实施例中,插值算法包括双线性插值算法,FPGA内部缓存为FPGA内部SRAM,第一内部缓存为第一内部SRAM、第二内部缓存为第二内部SRAM以及第三内部缓存为第三内部SRAM。

在其中一个实施例中,上述基于FPGA的图像缩放处理装置还包括更新模块。

更新模块,用于图像插值数据获取模块根据插值算法以及读取的原图像数据,进行插值计算,获得图像插值数据之前将每个读取的原图像数据的位宽调整为预设的位宽,更新读取的原图像数据。

上述基于FPGA的图像缩放处理方法装置为实现上述基于FPGA的图像缩放处理方法的装置,技术特征一一对应,在此不再赘述。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1