基于双线性插值算法处理的图像缩放方法与流程

文档序号:16253293发布日期:2018-12-12 00:13阅读:396来源:国知局
基于双线性插值算法处理的图像缩放方法与流程

本发明属于图像缩放技术领域,特别涉及一种基于双线性插值算法处理的图像缩放方法,适用于以fpga实现占用较少资源对图像进行快速缩放的场景。

背景技术

图像是人类感知世界的视觉基础,是人类获取信息、表达信息的重要手段;现在研究较多的是数字图像,它是由连续函数或离散函数生成的抽象图像,能直接被计算机处理。图像缩放是数字图像处理的重要一环,在实际应用中经常要将图像进行放大或缩小;例如,等离子电视、液晶电视和发光二极管(led)显示屏等显示器需将接收到的图像分辨率进行缩放,使之与显示器的物理分辨率一致,才能在显示器上完整地显示视频图像。

图像缩放算法种类较多,几乎都是通过插值算法实现的,常用的图像插值算法中,最近邻插值放大算法的实现最为简单、方便,但它只是把原始像素简单复制到其邻域内,放大图像会出现明显的方块或锯齿,不能很好地保留原始图像的边缘信息;双线性插值是一种比较实用的放大方法,它能够较好地消除锯齿,放大后的图像平滑性好,缩放后的图像质量高,但是与最近邻插值相比,它的计算量较大,计算中涉及较多的乘除运算。

实际应用中,fpga内的逻辑资源有限,而算法越复杂占用的逻辑资源就越多,处理过程也会越慢,因此,基于双线性插值算法处理图像缩放的硬件系统在实际使用时往往无法满足较高的时钟频率,并且由于双线性插值算法占用的资源较多,无法在实际应用过程中进行多路并行处理。



技术实现要素:

针对上述现有技术存在的问题,本发明的目的在于提出一种基于双线性插值算法处理的图像缩放方法,该种基于双线性插值算法处理的图像缩放方法基于硬件设计,能够使用较少的资源对图像进行快速处理,处理的时钟频率可达到150mhz,并且能够在xilinx公司的xc7a200tsbg484-2芯片上测试通过。

为达到上述技术目的,本发明采用如下技术方案予以实现。

一种基于双线性插值算法处理的图像缩放方法,包括以下步骤:

步骤1,确定输入图像和目标图像,输入图像尺寸为a×b,目标图像尺寸为m×n,确定输入图像与目标图像在行、列方向上的缩放因子,进而得到优化后的行方向缩放因子和优化后的列方向缩放因子;

步骤2,根据优化后的行方向缩放因子和优化后的列方向缩放因子,得到缩放处理后的目标图像,所述缩放处理后的目标图像为一种基于双线性插值算法处理的图像缩放结果。

本发明的有益效果:

由于双线性插值算法中包含的乘法运算较多,现有的算法在硬件实现时仅能满足时钟频率为100mhz的时钟约束,并且为了达到实时对图像进行缩放的效果,往往会开辟较多的存储资源;本发明方法对双线性插值算法中的乘法运算进行了替换,在硬件实现时能够满足时钟频率为150mhz的时钟约束,并且在使用时能够针对不同情况下的图像缩放自适应的开辟最少的存储资源。

附图说明

下面结合附图和具体实施方式对本发明作进一步详细说明。

图1为本发明的一种基于双线性插值算法处理的图像缩放方法流程图;

图2为水平、垂直方向均进行缩小处理后得到的灰度图;

图3为水平方向进行缩小处理、垂直方向进行放大处理后得到的灰度图;

图4为水平方向进行放大处理、垂直方向进行缩小处理后得到的灰度图;

图5为水平、垂直方向均进行放大处理后得到的灰度图。

具体实施方式

参照图1,为本发明的一种基于双线性插值算法处理的图像缩放方法流程图;其中所述基于双线性插值算法处理的图像缩放方法,包括以下步骤:

步骤1,结合双线性插值算法在图像缩放中的应用,对该算法具体流程实现进行分析。

双线性插值应用于图像缩放时不同于基础的双线性插值算法,基础的双线性插值算法即给定确定的插值点,根据双线性插值算法基础的计算公式求出插值点的像素值;将双线性插值算法应用于图像缩放时并没有事先确定的插值点坐标,插值点的坐标计算取决于图像缩放的比例因子,即应用的双线性插值算法与基础的双线性插值算法相比需要在插值计算之前确定插值点的坐标。

假定输入图像尺寸为a×b,目标图像尺寸为m×n,目标图像在输入图像中;输入图像与目标图像在行、列方向上的缩放因子分别为yf表示输入图像与目标图像在行方向上的缩放因子,xf表示输入图像与目标图像在列方向上的缩放因子。

将输入图像与目标图像在行、列方向上的缩放因子yf、xf分别进行向下取整操作,得到取整后的行方向缩放因子yf'和取整后的列方向缩放因子xf',yf'和xf'分别为正整数。

步骤2,根据取整后的行方向缩放因子yf'和取整后的列方向缩放因子xf',得到缩放处理后的目标图像,所述缩放处理后的目标图像为一种基于双线性插值算法处理的图像缩放结果。

将双线性插值算法应用于图像缩放中的具体计算流程如下:

2.1目标图像中像素点坐标(i,j)位置上的像素值i(i,j)计算需要由其当前像素位置进行反推,1≤i≤m,1≤j≤n;经过分析像素点(i,j)对应于输入图像中像素点坐标为的位置,像素点坐标位置可能在输入图像中没有相应的像素值对应,即是输入图像中的虚像素位置。

在输入图像中找到附近的四个像素点位置,分别为(i×yf',j×xf')、(i×yf',(j×xf')+1)、((i×yf')+1,j×xf')、((i×yf')+1,(j×xf')+1),以四个像素点位置的像素值i(i×yf',j×xf')、i(i×yf',(j×xf')+1)、i((i×yf')+1,j×xf')和i((i×yf')+1,(j×xf')+1)作为目标图像中像素点坐标(i,j)位置上的参考像素值进行双线性插值,得到基于基本的双线性插值算法的目标图像中像素点坐标(i,j)位置对应输入图像中虚像素点的像素值本发明中,基于实际硬件实现对双线性插值算法公式进行化简处理,基本的双线性插值算法为:

由上述基础的双线性插值算法的公式可以看出,计算一个插值点的像素值需要8个乘法运算,在硬件实现中,乘除运算不仅会占用大量的资源而且运算过程中耗时较长,当时钟约束中时钟频率设置较高时,容易造成时序不满足的情况,对式(1)进行因式分解,挖掘其可分离性,能够将乘法运算减少到3个。

将双线性插值算法拆分为垂直方向上的插值计算与水平方向上的插值算法,垂直方向上先利用i(i×yf',j×xf')、i((i×yf')+1,j×xf')经过插值计算出

再利用i(i×yf',(j×xf')+1)、i((i×yf')+1,(j×xf')+1)经过插值计算出

其中,2≤i+1≤m。

最后利用垂直方向插值计算的结果,进行水平插值计算;进而得到目标图像中像素点坐标(i,j)位置对应输入图像中虚像素点的像素值

2.2硬件实现中基于双线性插值算法处理图像缩放时,输入图像数据往往存储于外部存储器或直接由外部硬件接口输入得到,按照硬件设计的经验,图像数据在传输过程中以行为单位输入,为了与输入图像的形式保持一致,在图像进行缩放处理之后也必须以行为单位输出,即目标点坐标以行为单位进行更新,令i=1,2,…,m,j=1,2,…,n遍历目标图像中的m×n个像素点坐标,依次进行双线性插值计算,进而得到目标图像中像素点坐标(1,1)位置对应输入图像中虚像素点的像素值至目标图像中像素点坐标(m,n)位置对应输入图像中虚像素点的像素值最终完成整幅目标图像的缩放处理,记为缩放处理后的目标图像。

步骤3,根据硬件实现的特点,将计算过程中涉及的浮点数处理为定点数的形式。

由步骤2可知,插值点坐标在确定的过程中需要计算输入图像与目标图像的缩放因子,即该值是否为整数依赖于输入图像和缩放处理后的目标图像尺寸变换是否为整数倍,当缩放处理后的目标图像缩放为整数倍时,输入图像与目标图像在行方向上的缩放因子yf和输入图像与目标图像在列方向上的缩放因子xf均为整数;当缩放处理后的目标图像缩放不为整数倍时,输入图像与目标图像在行方向上的缩放因子yf和输入图像与目标图像在列方向上的缩放因子xf均为浮点数,即输入图像的虚像素位置也有可能为浮点数。

以插值点上一行相应像素点(插值点的横左标为浮点数)或插值点当前行相应像素点(插值点的横坐标为整数)作为第一行参考像素点,插值点下一行相应像素点作为第二行参考像素点,将该虚像素位置的横纵坐标均向下取整可以得到输入图像中对应插值点的第一行参考像素点中左侧参考像素点位置;将该虚像素位置的横坐标向下取整,纵坐标向上取整可以得到输入图像中对应插值点的第一行参考像素点中右侧参考像素点位置;将该虚像素位置的横坐标向上取整,纵坐标向下取整可以得到输入图像中对应插值点的第二行参考像素点中左侧参考像素点位置;将该虚像素位置的横纵坐标均向上取整可以得到输入图像中对应插值点的第二行参考像素点中右侧参考像素点位置。

输入图像中虚像素点横坐标与第一行参考像素点横坐标之差即为行方向上的权重系数,输入图像中虚像素点纵坐标与左侧参考像素点纵坐标之差即为列方向上的权重系数,即权重系数的数值范围为[0,1],除特殊情况下权重系数取值为0或1的整数外,大多情况下权重系数均为浮点数。

通常在fpga中进行浮点运算时,相比整数运算会消耗更多的lut(查找表)、寄存器和乘法器,同时也会给map和par带来压力,从而导致整个设计的fmax降低,甚至有些fpga中不能直接对浮点数进行操作,只能采用定点数进行数值运算。

所谓定点小数就是小数点固定的隐含在某一位置上的数据,由于小数点的位置是固定的,所以没有必要储存该位置,而小数的具体位置完全由设计者自己决定,因此对于定点小数的处理完全可以采用普通整数的处理方式。将浮点数转换为定点数就是将要运算的浮点数扩大很多倍,然后取整,再用这个取整后的数进行运算,运算得到的结果再缩小相应的倍数即可。运算过程中所有数据均以整数的形式参与计算,因此设计者需要记住定点数中小数点的位置。

定点数中常见的处理为8位小数或16位小数,随着小数位数越多,运算结果的精度越高,实现时占用的资源也会越多,在设计时需要对小数的位宽权衡选择;本发明中采用16位小数的形式构成32位定点数,即数据中高16位为整数部分,低16位为小数部分;即对于本发明中涉及的浮点数运算,先将数据左移16位构成定点小数形式再参与运算,运算结束后对运算结果进行右移16位的操作得到最终计算结果。

步骤4,结合基于fpga的图像处理相关知识及具体实现时的硬件资源,将应用于图像缩放过程中双线性插值算法的具体计算方式进行明确。

(1)明确输入图像与目标图像在行方向上的缩放因子yf和输入图像与目标图像在列方向上的缩放因子xf的计算公式:

按照硬件设计的习惯,数据在计数时往往由零开始,即对于a×b的输入图像,行数范围为[0,a-1],列数范围为[0,b-1],为了保证本发明中算法的适用性更强,对双线性插值算法中计算公式作如下修改:

输入图像与目标图像在行方向上的缩放因子yf修改为:

输入图像与目标图像在列方向上的缩放因子xf修改为:

如步骤3所述,fpga中的运算均以数据类型为整数类型进行计算,为了避免输入图像在放大过程中,缩放因子因数据类型为整数类型而导致其值为零的情况,计算缩放因子时先将被除数设置为32位定点小数的形式,即将被除数左移16位进行放大,再进行除法运算;由此,缩放因子的计算公式进一步修改为:

输入图像与目标图像在行方向上的缩放因子yf修改为:

输入图像与目标图像在列方向上的缩放因子xf修改为:

在硬件实现过程中,除法运算不仅会占用大量的资源,计算过程也相当耗时,当时钟频率过高时,除法运算在一个时钟周期结束时未必能得到计算后的数据(运算速度与运算中的数据位宽有关);目前常用的图像处理过程中所使用的图像尺寸最大为2048×2048,即图像行数、列数的数据位宽为11位,缩放因子的除数部分为目标图像的尺寸,被除数部分为输入图像尺寸左移16位后的数据,修改后缩放因子的计算等价于27位数据除以11位数据的计算;该运算过程因为数据位宽较大,在时钟频率为150mhz,时钟周期为6.67ns时会出现时序不满足的情况,即经过一个时钟周期,除法运算无法完成计算过程。

硬件设计中对于除法运算常见的处理方式是将其替换为查表的形式,针对本发明中缩放因子的计算,可以对整个除法运算的结果进行查表,即根据输入图像的尺寸不同选择相应的表格,直接由表格获取缩放因子的数值,该数值为定点数的形式;也可以仅对除数进行查表,即将除数处理为该数的倒数形式,再转换为定点数的形式存储到表格中,计算缩放因子时将输入图像尺寸与由表格中取出的数据相乘。对比两种替换方式:前一种查表方式不需要再进行乘法运算,但是由于输入图像的尺寸在整个硬件实现的过程中是变化的值,以输入图像尺寸数据位宽为11位为例,需要构建2^11,即2048个表格与输入图像尺寸对应,表格在硬件中的存储需要占用相应的存储器资源,以目标图像尺寸数据位宽为11位为例,根据定点数中小数位宽设置为16位的情况下,一个表格所需的存储器资源大小为:

2^11×16=32768

即32k的存储器资源,2048个表格会耗费65536k的存储器资源,甚至超过了芯片内存储器资源的总量;后一种查表方式仅需要一个表格,即32k的存储器资源,本发明采用后一种查表形式作为除法运算的替换形式。修改后的缩放因子计算公式为:

输入图像与目标图像在行方向上的缩放因子yf修改为输入图像与目标图像在行方向上的优化缩放因子

输入图像与目标图像在列方向上的缩放因子xf修改为输入图像与目标图像在列方向上的优化缩放因子

(2)替换输入图像中虚像素位置的计算公式

在步骤2中,阐述了双线性插值算法应用于图像缩放时需要在基础的双线性插值算法前增加确定插值点坐标的步骤,插值点坐标的确定过程为:以目标图像中像素点位置坐标为原像,映射到输入图像上为虚像素点位置坐标的过程。目标图像与输入图像间存在缩放因子的比例关系,一般来讲就是根据目标图像m×n个像素点的对输入图像进行等间隔划分,每一个间隔的两端均为插值点的坐标,目标图像中像素点坐标(i,j)即为输入图像中虚像素点位置坐标将其中的缩放因子进行相应替换,即目标图像中像素点坐标(i,j)对应输入图像中的虚像素点坐标为

虚像素点坐标计算过程中,i、j为目标图像像素点坐标的更新,缩放因子与当前输入图像、目标图像的尺寸有关,对于一帧图像而言,缩放因子为固定值,目标图像像素点坐标更新为当前值加一的形式进行更新,即虚像素点坐标的计算可以使用累加运算替换乘法运算。

在硬件实现的过程中,乘除运算的资源占用均大于加减运算的资源占用,因此将乘法运算替换为累加运算能大幅度减少本发明中硬件实现的资源占用率,即对需要遍历的虚像素点坐标的计算进行处理,假定得到缩放处理后的目标图像使用了m×n个时钟周期,当前时钟周期列方向上的坐标为x'f,那么下一时钟周期列方向上的坐标为假定当前时钟周期行方向上的坐标为y'f,那么下一时钟周期行方向上的坐标为进一步处理后的虚像素点坐标计算不再需要每一周期计算乘法,而是计算加法即可。-

对于两种运算方式的计算精度而言:乘法运算在计算的过程中不会积累误差,每次计算结果的误差均与定点小数位数的选择有关;累加运算在计算过程中可能会积累误差,经过硬件测试,当选择定点小数的位数为16位时,除目标图像像素点坐标更新至最后一行或最后一列,虚像素位置坐标不能经过累加运算更新至输入图像的最后一行或最后一列这种情况外,累加运算的计算结果均与乘法运算的计算结果一致。为了使累加运算替换乘法运算的过程中不存在附加的误差,需要对虚像素点坐标进行判断,当目标图像像素点坐标更新至最后一行或最后一列时,将虚像素点坐标进行相应的赋值,否则虚像素点坐标为累加运算的计算结果。

步骤5,根据与硬件实现匹配的双线性插值算法的具体计算方式进行硬件设计。

在硬件设计的过程中需要结合硬件中的资源进行设计,根据硬件设计的经验,硬件中的bram(块存储器)资源最为短缺,因此在设计之初,需要根据bram资源的占用率最小为原则进行硬件设计;基于双线性插值算法的图像缩放在进行硬件实现时,由于已经对双线性插值算法进行了优化,将其明确为几个较简单的计算公式,因此在实现过程中具体计算部分较容易实现,主要的设计为数据流的控制。

硬件实现图像处理的过程中,输入的图像数据以行为单位,由前所述,插值点像素值在计算时需要借助周围邻近的4个参考像素值,因此对应插值点的第一行参考像素点整行全部存储结束,第二行参考像素点的两个参考像素值也已经存储的情况下,才能进行当前插值点像素值的计算;基于此计算方式,硬件设计中需要开辟相应的存储器缓存输入图像中至少一行的数据。

对双线性插值计算拆分为垂直方向插值计算与水平方向插值计算后,当仅进行水平方向插值计算,或垂直方向上虚像素点的位置均位于输入图像中的像素点位置,即垂直方向的插值处理仅需要对输入图像行数进行相应选择而不需要具体计算时,插值点像素值计算过程中需要的参考像素值仅为同一行前后两个参考像素点的像素值,整个硬件的设计过程中不需要开辟额外的存储器来缓冲插值点所需的参考像素值。

对于图像缩放处理中图像在垂直方向缩小的情况,输入图像两行数据之间最多插入一行虚像素点,仅对垂直方向而言,相同的两个参考像素点仅被使用一次,因此按照资源最少的情况,仅需要开辟缓存一行输入图像数据大小的存储器即可,如果输入图像中连续两行数据均作为参考像素值使用,则由存储器中读出上一行参考数据的同时存储下一行的参考数据。

对于图像在垂直方向放大的情况,输入图像两行数据之间可能插入较多的虚像素点,按照输入输出数据格式不改变的原则,由于输入图像以行为单位进行数据的传递,在对图像进行缩放处理后的输出图像也应以行为单位进行输出。

因此,当输入图像两行数据中插入不止一行虚像素点时,按照行的顺序对虚像素点的像素值进行计算,该行像素点的像素值均计算结束再计算下一行虚像素点的像素值;所以在硬件实现的过程中参考像素有可能被多次使用,最少需要开辟缓存两行输入图像数据大小的存储器。

具体实现的过程中,硬件内部的工作时钟频率可以与外部输入数据的时钟频率及后端输出数据的时钟频率不同,通常情况下能够满足:内部工作的时钟频率与输入图像数据的时钟频率之间的倍数关系不小于输出图像像素点总量与输入图像像素点总量之间的倍数关系。这样可以保证仅进行水平方向放大处理时,也不需要开辟较大的缓冲区来平滑处理速率与输入数据速率不匹配的情况。

经过以上分析,本发明中的设计方法通用性较强,可以应用于图像缩放过程中的多种情况且满足任何情况下使用资源最少的原则;将图像缩放处理过程进行垂直方向及水平方向的拆分,根据其具体使用bram的情况,可以分为以下几种情况:

(1)仅进行水平方向缩放或垂直方向缩放不需要具体计算时,不需要开辟缓存输入图像数据的存储器;

(2)垂直方向进行缩小处理时,需要开辟缓存输入图像中一行数据大小的存储器;

(3)垂直方向进行放大处理时,需要开辟缓存输入图像中两行数据大小的存储器。

本发明的整个硬件系统除了上述为实现具体插值计算提供参考像素值的数据准备模块外,为了平滑因输入时钟频率与内部工作时钟频率不一致,导致瞬时数据流量较大的情况,在数据准备模块前端开辟有较小内存的缓冲区;为了平滑因内部工作时钟频率与输出时钟频率不一致,导致瞬时数据流量较大的情况,在目标图像像素值计算模块之后开辟有较小内存的缓冲区;为了进一步优化整个硬件系统中的资源占用,开辟的缓冲区可以在实际应用的过程中利用参数进行选择,设置其存储器形式为lutram(占用逻辑资源搭建的存储器)或bram的形式。

由于本发明设计的硬件系统具有通用性,因此输入图像尺寸、缩放处理后的目标图像尺寸、像素值的数据位宽等均以参数的形式进行设置,在使用时可以按照当前环境自定义设置;另外,对于处理图像的类型,本发明中的像素值仅为一个通道,当使用为处理彩色图像的缩放时,仅需要同时调用三个本发明的硬件系统,构成三通道即可。

本发明的测试结果仅以单通道的灰度图像为例,测试结果如图2至图5所示:

(1)图2为水平、垂直方向均进行缩小处理:输入128×128的灰度图像,缩放后输出图像为60×60的灰度图像;

(2)图3为水平方向进行缩小处理、垂直方向进行放大处理:输入128×128的灰度图像,缩放后输出图像为100×150的灰度图像;

(3)图4为水平方向进行放大处理、垂直方向进行缩小处理:输入128×128的灰度图像,缩放后输出图像为200×100的灰度图像;

(4)图5为水平、垂直方向均进行放大处理:输入128×128的灰度图像,缩放后输出图像为300×200的灰度图像。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围;这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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