发明内容
本发明提供一种并行多相位图像插值装置和方法,以解决现有插值装置或方法针对不同规格的图像通用性差且需改变硬件电路的问题。
本发明的第一个方面是提供一种并行多相位图像插值装置,包括:
局部存储器,用于存储源图像数据和行滤波器系数;
第一访存控制单元,用于获取局部存储器中的F行源图像数据并缓存到源图像数据缓冲单元;
第二访存控制单元,用于获取局部存储器中的F个行滤波器系数并缓存到行滤波器系数缓冲单元;
源图像数据缓冲单元,用于在第k时钟周期内分别向P个乘累加器输入第f行源图像数据的P个像素;
行滤波器系数缓冲单元,用于在第k时钟周期内向P个乘累加器广播第f行源图像数据对应的第f个行滤波器系数;
乘累加器,用于在第k个时钟周期内根据所述第f个行滤波器系数对所述第f行源图像数据执行乘累加运算得到中间结果;
第三访存控制单元,用于获取所述中间结果并存储到局部存储器;
状态机,用于为所述第一访存控制单元、第二访存控制单元、第三访存控制单元、源图像数据缓冲单元、插值滤波缓冲单元输出控制信号;
其中,k≥1,F≥1,P>1,1≤f≤F。
本发明的第二个方面是提供一种并行多相位图像插值方法,包括:
第一访存控制单元获取局部存储器中的F行源图像数据并缓存到源图像数据缓冲单元;
第二访存控制单元获取局部存储器中的F个行滤波器系数并缓存到行滤波器系数缓冲单元;
所述源图像数据缓冲单元在第k时钟周期内分别向P个乘累加器输入第f行源图像数据的P个像素;
所述行滤波器系数缓冲单元在第k时钟周期内向P个乘累加器广播第f行源图像数据对应的第f个行滤波器系数;
所述乘累加器在第k个时钟周期内根据所述第f个行滤波器系数对所述第f行源图像数据执行乘累加运算得到中间结果;
第三访存控制单元获取所述中间结果并存储到局部存储器;
判断f+1≤F是否成立,若成立则令f自加1并重复执行所述对第f行的操作直至f+1>F终止并得到第k个时钟周期的中间结果作为插值结果;
其中,k≥1,F≥1,1≤f≤F。
本发明的有益效果为:
本发明并行多相位图像插值装置支持任意阶的多相位滤波器,能在不改变硬件仅需对硬件重新进行配置的条件下实现对插值装置的重构,进而实现对不同图像数据的插值缩放,也即实现了一种可重构的并行多相位图像插值装置,能够满足不同应用场景需求。具体来说,首先、该装置仅有一种电路结构,可以支持任意阶的插值滤波器,对于不同图像可以在不同的时刻复用同一个电路结构;其次、该装置可以在不改变硬件,仅修改配置的情况,用于不同需求的应用场景;最后、该装置通过二维离散存储器,可以零开销实现图像转置,从而水平插值和垂直插值电路可复用。
具体实施方式
图1为本发明并行多相位图像插值装置实施例一的结构框图,如图1所示,本发明并行多相位图像插值装置,包括:
局部存储器3,用于存储源图像数据和行滤波器系数;
第一访存控制单元0,用于获取局部存储器中的F行源图像数据并缓存到源图像数据缓冲单元;
第二访存控制单元1,用于获取局部存储器中的F个行滤波器系数并缓存到行滤波器系数缓冲单元;
源图像数据缓冲单元4,用于在第k时钟周期内分别向P个乘累加器输入第f行源图像数据的P个像素;
行滤波器系数缓冲单元5,用于在第k时钟周期内向P个乘累加器广播第f行源图像数据对应的第f个行滤波器系数;
乘累加器6,用于在第k个时钟周期内根据所述第f个行滤波器系数对所述第f行源图像数据执行乘累加运算得到中间结果;
第三访存控制单元2,用于获取所述中间结果并存储到局部存储器;
状态机7,用于为所述第一访存控制单元、第二访存控制单元、第三访存控制单元、源图像数据缓冲单元、插值滤波缓冲单元输出控制信号;
其中,k≥1,F≥1,P>1,1≤f≤F。
优选的,所述局部存储器还用于计算待插值图像数据的坐标生成F行源图像数据和计算对应的F个行滤波器的插值系数并存储。
优选的,所述局部存储器还用于根据最简缩放比计算待插值图像数据的坐标生成F行源图像数据和计算对应的F个行滤波器的插值系数并存储。
优选的,所述局部存储器为二维离散存储器,相比传统插值装置,无需对源图像数据执行转置运算,减小了插值运算时间。
优选的,所述第一访存控制单元、第二访存控制单元或第三访存控制单元包括至少一个计数器、至少一个乘法器、至少一个加法器和至少一个配置寄存器。
优选的,所述源图像数据缓冲单元包括至少一个计数器、至少一个加法器、至少一个寄存器堆和至少一个配置寄存器。
优选的,所述行滤波器系数缓冲单元包括至少一个计数器、至少一个非门、至少一个寄存器组。
本发明公开的并行多相位图像插值装置中,包含一个二维离散的局部存储器,用于存储源图像数据,滤波器系数组,以及插值后图像数据;一个状态机,用于产生控制各单元的控制信号;一个访存控制单元0,用于将局部存储器中的源图像数据读入数据缓冲区;一个访存控制单元1,用于将局部存储器中的滤波器系数读入插值滤波器系数缓冲区;一个数据缓冲区,用于缓冲插值一行图像所需的F行源图像数据(F为插值滤波器的阶数,可重构),每个时钟周期输出一行行宽为P个像素的源图像数据,分别输入到P个乘累加器(MAC);一个插值滤波器系数缓冲区,用于缓冲插值一行数据所需的F个滤波器系数。每个时钟周期输出一个滤波器系数,并广播到P个乘累加器;P个乘累加器,接受图像数据和滤波器系数的输入,进行乘累加运算,F个时钟周期输出一行P个插值结果;一个访存控制单元2,用于将乘累加器(MAC)的输出写回局部存储器。该并行多相位图像插值装置可以同时并行处理P个像素的插值,并且可重构插值滤波器的阶数,从而在不改变硬件,仅修改配置的情况,用于不同需求的应用场景。
下面说明对插值算法计算过程的优化,如图7-a)所示,传统的二维图像插值电路中,如仅考察垂直插值,其对应的插值算法如图3所示,其中i,j为插值像素在输出图像中的坐标,OW、OH分别输出图像的宽度和高度。NUM_PHASE为插值滤波器组采用的相位总数,F为滤波器阶数。src_image为输入图像,out_image为输出图像其尺寸为OW*OH;c_table为插值系数表,其尺寸为NUM_PHASE*F,有NUM_PHASE个表项,每个表项是一个相位对应的一个F阶的滤波器系数。
pos为输出图像(i,j)位置的像素在源图像中的位置,pos_acc为插值的步长,其符号的含义可以参见图4。
如图3所示插值流程需要为每个像素计算坐标和相位,从而产生数据缓冲地址和插值系数缓冲地址,为简化计算,本实施例对如图3所示的算法流程进行了优化,其主要改进为:
第一、预先计算坐标和插值系数进行存储,再进行插值,插值像素过程中不用计算,只需要顺序访问存储,因为就垂直放大到1080而言,坐标和插值系数最多有1080种情况。对于720x480到720x1080的放大,采用传统的方法,需要720x1080次坐标计算,改进后可降低到1080次。
第二、利用最简缩放比进行坐标和系数的计算,这样能进一步减少计算,例如以720x480到720x1080的放大而言,其垂直缩放比为480->1080,但其最简缩放比为4->9,利用最简缩放比能将坐标计算量进一步减少到9次计算。计算量大大降低。也可以采用离线计算的方法将坐标和系数表一次性算出。
缩放比与最简缩放比的关系如表1所示,其中IH输入图像高度,OH为输出图像高度,N为最简缩放比中的输入因子,L为最简缩放比中的输出因子,loop为输出图像高度与最简缩放比输出因子的比值。
表1
如图5所示,优化后的图像插值算法流程与传统插值流程相比,其差别如表2所示:
表2
更新表(update_table)的计算过程如图6所示,从图6可以看出,坐标更新表update_table包含L个表项,计算只需要L次循环。
新的插值系数表c_table_new的计算如图8所示。假设插值滤波器组采用的是相位总数NUM_PHASE为64,滤波器阶数F为6阶,则原插值系数表c_table的尺寸为NUM_PHASE*F,即64x6的一个表,包含64个表项,每个表项是一个相位对应的一个6Tap的滤波器系数。新的插值系数表c_table_new的尺寸为LxF。
从图6可以看出,坐标更新表update_table包含L个表项,计算只需要L次循环。
坐标更新表和插值系数表可以在线计算也可以离线计算,为了简化电路结构,本实施例采用离线计算的方式。
下面对插值算法对应的电路结构作出说明,上述优化插值算法所对应的硬件结构如图1所示,该可重构的并行多相位图像插值装置包含一个局部存储器,用于存储源图像数据,滤波器系数组,以及插值后图像数据;一个状态机,用于产生控制各单元的控制信号一个访存控制单元0,用于将局部存储器中的源图像数据读入数据缓冲区;一个访存控制单元1,用于将局部存储器中的滤波器系数读入插值滤波器系数缓冲区;一个数据缓冲区,用于缓冲插值一行图像所需的F行源图像数据(F为插值滤波器的阶数,可重构),每个时钟周期输出一行行宽为P个像素的源图像数据,分别输入到P个乘累加器(MAC);一个插值滤波器系数缓冲区,用于缓冲插值一行数据所需的F个滤波器系数。每个时钟周期输出一个滤波器系数,并广播到P个乘累加器;P个乘累加器,接受图像数据和滤波器系数的输入,进行乘累加运算,F个时钟周期输出一行P个插值结果;一个访存控制单元2,用于将乘累加器(MAC)的输出写回局部存储器。
由于图1所示的插值装置支持任意阶滤波器,与传统二维图像的插值电路,如图7-a)所示,同时具有垂直插值滤波器电路和水平插值滤波器电路不同,在本实施例中,采用了垂直插值和水平插值在时间上复用同一套插值电路的方法。
为了复用同一套插值电路,传统的方法是:
步骤1,对图像进行垂直插值,将临时图像结果写回存储器;
步骤2,对临时图像进行转置;
步骤3,对转置后的临时图像进行垂直方向的插值,并写回存储器;
步骤4,对步骤3产生的结果进行转置,得到最终结果。
这种传统方法会在转置这一步中产生较大的时间开销,为了复用统一的电路进行插值,并且避免转置开销,本实施例中采用了二维离散存储器。二维离散存储的实现可参考专利“多粒度并行存储系统与存储器”;该存储器可以支持行读取模式和列读取模式,在行读取模式下,可每个时钟周期读入一行P个数据,进行垂直方向的插值,在列读取模式下,可每个时钟周期读入一列P个数据,进行水平方向的插值,故而本专利进行二维图像插值的方法为:
步骤1:将局部存储器的读取模式设为行读取模式,写回模式设为行写回。
步骤2:存储访存控制单元0产生读控制信号给局部存储器,并按照行读取模式对局部存储器进行数据读取,并进行垂直方向的插值。
步骤3:存储访存控制单元2产生行写回的写控制信号给局部存储器,并按照行写回模式将步骤2产生的数据写回局部存储器。
步骤4:将局部存储器的读取模式设为列读取模式,将写回模式设为列写回。
步骤5:存储访存控制单元0产生读控制信号给局部存储器,并按照列读取模式对步骤3写回局部存储器的数据进行读取,并进行水平方向的插值。
步骤6:存储访存控制单元2产生写控制信号给局部存储器,并按照列写回模式将步骤5产生的数据写回局部存储器。
本专利复用同一套电路进行垂直插值和水平插值的装置和方法仅用简单的配置实现不同的读取和写回方式,配置所需时间极少,避免了图像转置的时间开销。
由于垂直插值和水平插值复用了同一套电路,除读取写回模式不同之外其他均相同,所以为叙述方便,下面只讨论垂直方向的插值,并且以F=6、P=4为例进行阐述;其中P值决定了并行度,可根据时序要求进行选择。但一旦固定P并设计成硬件,P值不可更改;为插值滤波器的阶数,可以在硬件固定后由配置进行修改。
图像插值数据处理的顺序如图9所示,图9-a)为源图像,尺寸为8x4,图9-b)为插值后图像,尺寸为8x12,其中圆圈代表在源图像中存在的像素点,五角星代表插出的像素点;为了得到图9-b)的插值图像,本专利的处理顺序如图9-c),即每次可以并行处理4个像素,处理完4个像素后下移移行。
如图1所示的插值装置中的局部存储器拥有行模式和列模式,该插值装置中的访存控制单元0的结构参见图10。
各访存控制单元由计数器i、计数器j、两个乘法器、两个加法器组成,以及配置寄存器组成。访存控制单元接受状态机的片选信号I_FSM_R_CS,以及计数器使能信号,输出局部存储器的片选信号O_MC_CS和地址O_MC_ADDR,接受数据输入I_DATA,输出O_DATA;其中REG_START_ADDR,REG_ADDR_STEP1,REG_ADDR_STEP2为配置寄存器;其中计数器I对Clock进行计数,当输入的计数器使能信号I_FSM_COUNT_EN_I=1时,每个时钟计数器增1,计数到REG_COUNT_NUMBER_I-1清零重新计数;计数器J对计数器I的输出进行计数,当I_FSM_COUNT_EN_J=1,且计数器I的输出由REG_COUNT_NUMBER_I-1变到0时,计数器增1;计数到REG_COUNT_NUMBER_J-1清零重新计数。
利用图10所示的访存控制单元0可以按照图9d)的顺序产生地址。每个读片选信号可以读上来位宽为64bit(16bit*4)的数据,包含4个源图像数据像素;如将图像由720x480放大到720x1080,则寄存器配置如表3所示:
寄存器 |
值 |
备注 |
REG_ADDR_STEP1 |
720 |
=输入图像宽度 |
REG_ADDR_STEP2 |
4 |
=P |
REG_COUNT_NUMBER_I |
480 |
=输入图像高度 |
REG_COUNT_NUMBER_J |
180 |
=输入图像宽度/P |
表3
局部存储器中存储着插值系数表c_table_new,如图1所示的插值装置中的访存控制单元1将插值系数表装载进插值系数缓冲;其电路结构与访存控制单元0相同,但是其寄存器配置不同,如表4所示:
表4
如图1所示插值装置中的访存控制单元2将输出图像数据写回局部存储器,其电路结构与访存控制单元0相同。其寄存器配置如表5所示:
寄存器 |
值 |
备注 |
REG_ADDR_STEP1 |
720 |
=输出图像宽度 |
REG_ADDR_STEP2 |
4 |
=P |
REG_COUNT_NUMBER_I |
1080 |
=输出图像高度 |
REG_COUNT_NUMBER_J |
180 |
=输入图像宽度/P |
表5
如图1所示的插值装置中的数据缓冲其电路结构如图11所示,数据缓冲电路结构由一个计数器W,一个计数器S,一个计数器I,一个加法器和一个寄存器堆,以及配置寄存器组成。其中寄存器堆(Register Bank)包含32个位宽为P*BW的寄存器,P为并行度,BW为每个图像像素的位宽。在输入I_FSM_CS_R信号为1时,在Register bank的寄存器中,选择编号为raddr的寄存器输出,输出O_DBUFF_DATA的位宽为P*BW。读地址raddr的计算为:raddr=s+i;其中s为计数器S的输出,i为计数器I的输出。在输入I_FSM_W_CS为1时,将输入的I_MC_DATA写入Register Bank中编号为waddr的寄存器,写地址waddr为计数器W的输出。数据缓冲区的配置寄存器配置如表6所示。计数器I对时钟进行计数,当输入使能信号I_FSM_COUNT_I_EN=1时,开始计数,计数到REG_COUNT_I_NUMBER-1时,清零重新计数。计数器S和W对计数I的输出进行计数,当计数器I的输出由REG_COUNT_NUMBER-1时,计数器加1。
寄存器 |
值 |
备注 |
REG_COUNT_NUMBER_W |
6 |
=滤波器阶数F |
REG_COUNT_NUMBER_S |
6 |
=滤波器阶数F |
REG_COUNT_NUMBER_I |
6 |
=滤波器阶数F |
表6
可以看出,在滤波器阶数为6时,32个寄存器中,只使用了6个寄存器。
如图1所示的插值装置中的系数缓冲其电路结构如图12所示,插值系数缓冲的电路结构由计数I,计数器J,一个非门,和一个register bank组成;Register Bank只利用了2个寄存器,每个寄存器宽度为P*BW,P为并行度,BW为每个图像像素的位宽;在本实施例中为16*4=64bit;这种装置可以实现双缓冲的功能;当输入写使能信号I_FSM_W_CS为1时,将输入数据64bitI_MC_DATA写入编号为waddr的寄存器。raddr为读地址,表明了读的寄存器的编号,raddr_sub表明了一个寄存器P个字段中的哪个字段;即当输入读使能信号I_FSM_R_CS为1时,输出编号为raddr的寄存器中raddr_sub子段的数据,输出数据O_CBUFF_DATA的位宽为BW=16bit。其中读地址waddr和写地址raddr的关系是:waddr=not raddr;当输入计数使能信号I_FSM_COUNT_I_EN为1时,计数器I对时钟进行计数,当I_FSM_COUNT_J_EN=1时,计数器对计数器I的输出进行计数;系数缓冲区的配置见表7:
寄存器 |
值 |
备注 |
REG_COUNT_NUMBER_J |
2 |
=2(双缓冲) |
REG_COUNT_NUMBER_I |
6 |
=滤波器阶数F |
表7
如图1的插值装置中的MAC阵列的结构如图13所示,每个MAC接受I_DBUFF_DATA中的16位数据的输入和I_CBUFF_DATA的输入,进行乘累加运算,I_FSM_MAC_RST为清零信号;当I_FSM_MAC_RST=1时,输出结果O_MAC_DATA。
局部存储器中有三个独立的存储器port0,por1,port2,可以分别进行读写;当存储器用作读时,输入地址和读片选信号,输出数据;当存储器用作写时,输入地址和写片选信号,以及写数据。
如图1的插值装置中的状态机FSM负责产生其他各个部件的控制信号;如图1所示的插值装置中各个部件的连线如图14所示;其中FSM产生控制信号。
FSM的结构如图15所示,包括一个基本控制时序产生单元和条件时序产生单元,一个条件使能寄存器,一个条件寄存器;基本控制时序产生单元产生控制信号的基本时序,并生成条件使能的控制时序给条件时序产生单元,条件时序产生单元在条件使能信号为1时,读入条件寄存器的一个bit,将条件使能寄存器中bit为1对应的控制信号的条件置为条件寄存器输出的条件。
基本控制时序产生单元产生的输出信号时序如图16所示。
FSM一共输出了19个控制信号,设FSM输出为O_FSM_OUT,共19位,其中各个bit位代表的控制信号如表8所示,基本控制时序产生单元产生的输出信号为fsm_basic。
表8
条件使能寄存器REG_CONDITION_EN包括19个bit;每个bit位表示对应的控制信号是否受条件控制;在本实施例中,只有O_FSM_DBUFF_W_CS、O_FSM_DBUFF_COUNT_S_EN、O_FSM_DBUFF_COUNT_S_EN、O_FSM_MC0_CS这四个控制信号受条件控制,相应bit为1,其他bit为0,所以REG_CONDITION_EN的值为153。
在一个L周期内的j时刻(0<=j<L),条件condition的产生逻辑为:
condition(i)=(condition_en=1)REG_CONDITION_EN(i)*REG_CONDITION(j):1;
最后FSM的输出为:
O_FSM_OUT(i)=fsm_basic(i)&condition(i);
条件寄存器REG_CONDITION共有1024位,其中只有L位(L为最简缩放比中的输出因子)有效;这L位的值就是如图6所示的坐标更新表update_table。
本发明并行多相位图像插值装置支持任意阶的多相位滤波器,能在不改变硬件仅需对硬件重新进行配置的条件下实现对插值装置的重构,进而实现对不同图像数据的插值缩放,也即实现了一种可重构的并行多相位图像插值装置,能够满足不同应用场景需求。
图2为本发明并行多相位图像插值方法实施例一的结构框图,如图2所示,本发明并行多相位图像插值方法,包括:
S201、局部存储器计算待插值图像数据的坐标生成F行源图像数据和计算对应的F个行滤波器的插值系数并存储;
优选的,所述局部存储器计算待插值图像数据的坐标生成F行源图像数据和计算对应的F个行滤波器的插值系数并存储包括:
局部存储器根据最简缩放比计算待插值图像数据的坐标生成F行源图像数据和计算对应的F个行滤波器的插值系数并存储;
S202、第一访存控制单元获取局部存储器中的F行源图像数据并缓存到源图像数据缓冲单元;
S203、第二访存控制单元获取局部存储器中的F个行滤波器系数并缓存到行滤波器系数缓冲单元;
S204、所述源图像数据缓冲单元在第k时钟周期内分别向P个乘累加器输入第f行源图像数据的P个像素,也即P个像素的位置和像素值数据;
S205、所述行滤波器系数缓冲单元在第k时钟周期内向P个乘累加器广播第f行源图像数据对应的第f个行滤波器系数;
S206、所述乘累加器在第k个时钟周期内根据所述第f个行滤波器系数对所述第f行源图像数据执行乘累加运算得到中间结果;
S207、第三访存控制单元获取所述中间结果并存储到局部存储器;
S208、判断f+1≤F是否成立,若成立则令f自加1并重复执行所述对第f行的操作直至f+1>F终止并得到第k个时钟周期的中间结果作为插值结果;
其中,k≥1,F≥1,1≤f≤F。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。