融合大模板图的模板匹配并行实现方法及装置与流程

文档序号:13513460阅读:232来源:国知局
融合大模板图的模板匹配并行实现方法及装置与流程

本发明涉及归一化相关图像模板匹配领域,特别涉及一种融合大模板图的匹配并行实现方法及装置。



背景技术:

模板匹配通过计算表征目标的模板图与实时图中搜索区域内所有位置的相似性测度来进行目标定位,该目标同模板图有类似的尺寸和图像。由于归一化相关系数对亮度和对比度变化具有不变性,因此它是模板匹配广泛采用的一种测度。假定实时图和模板图分别由a、b表示,其尺寸分别为k×l和m×n个像素。在任一搜索位置(u,v),0≤u≤k-m,0≤v≤l-n,归一化相关系数(ncc-normalizedcross-correlation)定义为:

其中∑∑表示为模板图像的均值,为在当前搜索位置实时图与模板图重叠部分的均值。可以看出,该运算就是在实时图中平移模板图,对实时图和模板图重叠点进行归一化相乘,然后进行累加操作。

已经提出许多技术来加速模板匹配过程,由于这些技术不需要对所有位置进行匹配,因此大幅度的降低了计算量,但是这些技术通常由于局部的极值点干扰导致错误的匹配。实际上,由于模板匹配计算是针对图像各个像素进行相关运算,因此该算法本身能够通过并行的方法来加速。此外已经提出了一些多处理器并行计算方法来加速模板匹配。但是对于很多小型化、微功耗需求的嵌入式应用,多处理器并行计算方法仍无法满足实际应用要求。

近年来,随着电子技术和制造工艺的快速发展,现场可编程门阵列(fpga)的容量越来越大、速度越来越快,这使得fpga具有了一般微处理器所无法比拟的强大并行计算,因此fpga特别适用于实现模板匹配计算。

很多自动目标识别任务为了提高精度,在与目标接近的最终任务阶段,往往采用较大的模板图,如一些任务中实时图往往只比模板图略大。对于大小为512*512的实时图,一个典型模板图大小可能大于400*400。一般并行模板匹配实现方法直接采用模板图行数个并行通道,一般fpga无法同时满足如此多的资源、体积、精度及功耗需求;即使能够利用具有更多资源的芯片采用多通道方式实现,而任务早期和中期只需要小模板图,如80*80,导致整个芯片资源利用率不高。



技术实现要素:

本发明所要解决的技术问题是针对背景技术的缺陷,提出一种融合大模板图的匹配并行实现方法及装置,实现如何提供一种小模板图实现同时适应大模板图的归一化相关系数计算方法,从而可以解决上述任务不同阶段大小模板图匹配的问题。

本发明的上述技术问题是通过以下技术方案得以实现的:

一种融合大模板图的模板匹配并行实现方法,包括以下步骤:

a、在外部微处理器输入参数和启动命令系统启动以后进行初始化,并且设置u=0,v=0,c=0,其中u代表当前行,v代表当前列,c代表当前块;判断模板图是否大于所实现的并行处理通道数p,当模板图不大于p时,执行步骤c1~c6小模板图模式工作流程,否则执行步骤b1~b7大模板图模式工作流程;

小模板图模式工作流程如下:

c1、从外部存储器中读取每一行模板图数据存储到对应的内部模板图数据ram缓冲块中同时进行模板图灰度值总和模板图灰度值平方总和计算;读取模板图相同行数的实时图数据分别到对应的内部实时图数据ram缓冲块中,同时计算第0行第0列搜索位置处实时图灰度值总和实时图灰度值平方总和同时分别存储到acc缓冲、a2cc缓冲中,其中当前行、当前列初始化为u=0,v=0,m、n分别代表模块图中的行数和列数;

c2、计算当前行第0列模板图实时图灰度值乘积总和同时存储到abcc缓冲中;从acc缓冲、a2cc缓冲、abcc缓冲中同时输出当前行当前列实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和,同时计算当前行当前列归一化互相关结果;

c3、由实时图数据ram缓冲块数据及当前行第0列搜索位置处实时图灰度值总和、实时图灰度值平方总和,采用一加一减两步操作计算搜索位置当前行第1列的实时图灰度值总和及实时图灰度值平方总和同时存储到acc缓冲、a2cc缓冲中;

c4、由步骤c2到步骤c3相同的方式,依次计算当前行后续各列v归一化相关系数直到所有列计算完成;

c5、读入下一行实时图数据存储到数据已经无效的内部实时图ram缓冲块中,同时计算当前行第0列的实时图灰度值总和实时图灰度值平方总和同时存储到acc缓冲、a2cc缓冲中;

c6、采用步骤c2到步骤c5相同的方式,依次计算出后续各行各列归一化相关系数;

大模板图模式工作流程如下:

b1、从外部存储器中读取第u+p*c到u+p*c+p-1行实时图数据到对应的内部ram缓冲块中,计算第u行第0列搜索处第c块实时图灰度值总和

实时图灰度值平方总和

同时从acc(v=0)、a2cc(v=0)缓冲当前列位置v读取已经存储起来的前c-1块的累加值和当前第c块的acc(u,v,c)、a2cc(u,v,c)相加后存储到acc、a2cc在v=0的缓冲对应位置;从外部存储器中读取第p*c到p*c+p-1行模板图数据到对应的内部ram缓冲块中,同时利用累加运算进行前c块模板图灰度值总和模板图灰度值平方总和计算;

b2、计算当前行第0列第c块模板图实时图灰度值乘积总和从abcc缓冲当前列位置v读取已经存储起来的前c-1块的累加值和当前第c块的abcc(u,v,c)相加后存储到abcc缓冲对应位置;

b3、由实时图数据ram缓冲块数据及当前行第0列搜索位置处第c块实时图灰度值总和、实时图灰度值平方总和,采用一加一减两步操作计算搜索位置当前行第1列第c块的实时图灰度值总和及实时图灰度值平方总和从acc缓冲、a2cc缓冲当前列位置v读取已经存储起来的前c-1块的累加值和当前第c块的acc(u,v,c)、a2cc(u,v,c)相加后存储到acc缓冲、a2cc缓冲对应位置;

b4、由步骤b2到步骤b3相同的方式,依次计算当前行后续各列v第c块实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和,从缓冲中读取此前所有块的累加值与新计算结果相加,并且存储到相应的acc缓冲、a2cc缓冲、abcc缓冲对应列v位置中;

b5、v重新初始化为0,由步骤b2到步骤b4相同的方式,依次计算当前行各列v各块实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和,从缓冲相应位置读取此前所有块的累加值与新计算结果相加,并且存储到相应的acc缓冲、a2cc缓冲、abcc缓冲中,由此得到当前行各列实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和;

b6、由acc缓冲、a2cc缓冲、abcc缓冲中依次输出当前行各列实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和,同时计算当前行各列归一化互相关结果;

b7、块序c重新初始化为0,采用步骤b1到步骤b6,依次计算出后续各行各列归一化相关系数。

进一步的,所述归一化相关系数公式如下:

其中,a、b分别表示实时图和模板图,其尺寸分别为k×l、m×n个像素,其中k代表是实时图的行数,l代表实时图的列数,m代表模块图的行数,n代表模块图的列数;(u,v)为任一搜索位置,0≤u≤k-m,0≤v≤l-n;∑∑表示为模板图像的灰度平均值,为当前搜索位置(u,v)处实时图与模板图重叠区域的灰度平均值,行列的序号都是从0开始的。

进一步的,步骤a中并行处理通道数p由较小模板图行数决定,大模板图中,c是每一搜索位置处分块数目c的序号。

进一步的,步骤c1所述的模板图数据读入到对应的内部ram缓冲块,是将每一行n列的灰度值存储到一个ram块中,共存入m行,即占用了m个ram块,每个ram块占用其中的n个存储单元;实时图数据读入到对应的内部ram缓冲块,是将每一行l列的灰度值存储到一个ram块中,共存入m行,同样占用了m个ram块,每个ram块占用其中的l个存储单元;

步骤c1所述的模板图灰度值总和的计算是在读入模板图数据时,通过时序控制模块控制一个累加器实现,累加器的输入端连接到模板图数据输入端,其输出即为模板图灰度值总和;

步骤c1所述的模板图灰度值平方总和的计算是在读入模板图数据时,通过时序控制模块控制一个平方运算模块和一个累加器实现,平方运算模块的输入端连接到模板图数据输入端,平方运算模块的输出连接到累加器的输入端,累加器输出即为模板图灰度值平方总和;

步骤c1中所述的第0行第0列搜索位置处的实时图灰度值总和的计算,是通过时序控制模块控制一个行数据累加模块在每一行实时图数据读入时,对实时图第0行第0列搜索位置处每一行数据进行累加,然后通过一个列累加器对这些行数据累加模块输出结果逐行进行累加,并且和该列累加器累加结果经过m步延迟后结果相减获得,同时结果存储到acc缓冲中;

步骤c1中所述的第0行第0列搜索位置处的实时图灰度值平方总和的计算,是通过时序控制模块控制一个行数据累加模块在每一行实时图数据读入时,对实时图第0行第0列搜索位置处每一行数据逐个平方后进行累加,然后通过一个列累加器对这些行数据平方累加模块输出结果逐行进行累加,并且和该列累加器累加结果经过m步延迟后结果相减获得,同时结果存储到a2cc缓冲中;

步骤c2和步骤c4中的模板图与实时图当前搜索位置的灰度值乘积总和的计算,实现如下:模板图像ram缓冲块的所有输出端连接到一个多路选通开关,多路选通开关的输出连接到乘法模块中的一个乘法器的一端,乘法器的另一端对应连接到实时图像ram缓冲块的输出端;采用模板图最大行数m个这样的并行通道进行并行运算,然后各个通道输出端连接到一个并加模块的输入端,并加模块的输出端连接到一个累加模块,在计算时,时序控制模块控制选通开关使得对应的模板图数据与实时图数据进行乘积运算,改变模板图像和实时图像ram缓冲块的地址,逐列输出模板图和实时图的对应数据进行乘积运算,然后经过并加模块对当前列各行数据进行求和,而后由累加模块对并加模块输出的结果逐列求和后,获得当前列各个搜索位置的同时结果存储到abcc缓冲中;

步骤c2和步骤c4所述计算归一化相关系数是在由acc缓冲、a2cc缓冲、abcc缓冲中同时输出当前行当前列实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和以后,相应的可以由乘法器、平方运算、加、减法器计算出来,归一化相关系数计算公式中的分母由两个求根模块进行求根运算,然后再对两者进行相乘获得,然后归一化相关系数计算公式中的分子和分母由除法运算得到归一化相关系数;

步骤c2和步骤c4所述的搜索位置当前行归一化相关系数的计算,是模板图像第0到m-1行与实时图第0到m-1行数据对应计算,搜索位置第0列归一化相关系数的计算为模板图像第0到n-1列与实时图像第0到n-1列数据对应计算;搜索位置第1列归一化相关系数的计算为模板图像第0到n-1列与实时图像第1到n列数据对应计算;此时后续的求平方根、浮点除法等后续运算同步流水进行,以此重复,直到当前行归一化相关系数计算完成为止;

步骤c3和步骤c6中当前行第1列开始后续各列v,v≥1,每一个实时图灰度值总和计算,是从搜索位置第1列开始,通过时序控制模块同时控制所有实时图数据缓冲ram块依次输出实时图中模板图重叠区域相对于前一列搜索位置新进的一列数据和刚移出的一列数据,经过并加器后,由累加器在当前输出值的基础上,累加新进的一列数据并加结果减去刚移出一列数据并加结果,然后累加器输出结果与已经计算出的当前行第0列的实时图灰度值总和相加得到同时结果存储到acc缓冲中,此时,该累加器在第0列搜索位置处的值初始化为0,当前操作主要为一加一减两步操作,累加器加上相对于前一个搜索位置新进的一列数据的并加结果,减去相对于前一个搜索位置刚移出的一列数据的并加结果,其它运算通过逻辑同步完成;

步骤c3和步骤c6中当前行第1列开始后续各列v,v≥1,每一个实时图灰度值平方总和计算,是从搜索位置第1列开始,通过时序控制模块同时控制所有实时图数据缓冲ram块依次输出实时图中模板图重叠区域相对于前一列搜索位置新进的一列数据和刚移出的一列数据,每一行数据分别由平方运算模块求平方,经过并加器并加后,由累加器在当前输出值的基础上,累加新进的一列数据平方并加结果减去刚移出一列数据平方并加结果,最后由加法器与已经计算出的当前行第0列搜索位置处的相加即可获得当前列的同时结果存储到a2cc缓冲中,此时该累加器在第0列搜索位置处的值初始化为0,当前操作主要为一加一减两步操作,累加器加上相对于前一个搜索位置新进的一列数据平方的并加结果,减去相对于前一个搜索位置刚移出的一列数据平方的并加结果,其它运算通过逻辑同步完成;

步骤c5所述从外部ram读入新一行的实时图数据到相应的内部ram缓冲块中,为第一行相关系数计算完成后,读入一行新的实时图数据覆盖不用的实时图ram块数据,在后续各行计算时需要通过时序控制模块重新切换多路选通开关使模板图ram缓冲块输出与实时图ram缓冲块输出顺序变化对应;

步骤c5中所述在读入实时图下一行数据时,同时由步骤c1中同一模块以相同方式计算出当前行(u)第0列的实时图灰度值总和的值,后续列实时图灰度值总和亦是按前述步骤c3中一加一减两步操作方式依次计算得出;

步骤c5中所述在读入实时图下一行数据时,同时由步骤c1中同一模块以相同方式计算出当前行(u)第0列的实时图灰度值平方总和的值,后续列实时图灰度值平方总和亦是按前述步骤c3中一加一减两步操作方式依次计算得出;

步骤c6所述计算出后续各行归一化互相关系数,是指计算实时图像第2行至第k-m+1行归一化相关系数,第一行相关系数计算完成后,依次读入一行新的实时图数据覆盖不用的实时图ram缓冲块数据,并且通过时序控制模块重新选择模板图ram缓冲块输出多路选通开关使其与之对应,这样相当于模板图像在待匹配图像中下移一行,然后按照步骤c2和步骤c3方式进行计算,依次得到每行的归一化相关系数;

步骤c1到c6中的acc缓冲、a2cc缓冲、abcc缓冲是为融合大模板图额外增加的数据缓冲器;小模板图模式时,上述步骤结合数据缓冲器相应的流程控制方式,大模板图模式时,用于缓冲l-n+1列的数据。

进一步的,步骤b1中的计算采用与步骤c1模板图灰度值平方总和、模板图灰度值平方总和相同的计算模块,在第0行第0列搜索位置处多块数据读入完毕时完成模板图灰度值总和、模板图灰度值平方总和计算;

步骤b1中第u行第v列搜索位置处第c块实时图灰度值总和实时图灰度值平方总和的计算,采用步骤c1中相同的模块保持其中的延迟环节不使能,即输出为0,只输出累加后的值实现;

步骤b2中计算当前行第0列第c块模板图实时图灰度值乘积总和采用步骤c2相同的并行计算模块按相同的方式进行计算,计算完毕后从abcc缓冲中读取已经存储起来的前c-1块的累加值和当前第c块的abcc(u,v,c)相加后存储到abcc缓冲中;

步骤b3中搜索位置当前行第1列第c块的实时图灰度值总和及实时图灰度值平方总和的计算采用步骤c3相同的模块按相同的方式进行计算,计算完毕后从acc缓冲、a2cc缓冲当前列位置v读取已经存储起来的前c-1块的累加值和当前第c块的acc(u,v,c)、a2cc(u,v,c)相加后存储到acc缓冲、a2cc缓冲对应位置;

步骤b4当前行后续各列v第c块实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和计算、缓冲读取、累加及存储具体参考b2和b3的说明;

步骤b5当前行各列v各块实时图灰度值总和,、实时图灰度值平方总和、模板图实时图灰度值乘积总和计算、缓冲读取、累加及存储具体参考b2、b3和b4的说明,最终由此得到当前行各列实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和;

步骤b6中由acc缓冲、a2cc缓冲、abcc缓冲中依次输出当前行各列实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和以后,相应的可以由乘法器、平方运算、加、减法器计算出来,归一化相关系数计算公式中的分母由两个求根模块进行求根运算,然后再对两者进行相乘获得,然后归一化相关系数计算公式中的分子和分母由除法运算得到归一化相关系数;

进一步的,包括高速相关运算器、模板图实时图数据外部存储器、结果存储器和微处理器,其特征是:所述高速相关运算器分别与模板图实时图数据外部存储器、结果存储器、微处理器相连,模板图实时图数据外部存储器、结果存储器也与微处理器相连,所述高速相关运算器由归一化相关系数计算模块、外部通信接口模块以及时序控制模块组成;归一化相关系数计算模块用于归一化相关系数的计算,外部通信接口模块通过寄存器与处理器进行参数输入输出、指令输入、状态查询输出,时序控制模块控制整个归一化相关系数计算的工作流程,并与各个模块中的ram的地址及控制线、多路选择器的选通地址、寄存器的使能端控制和地址信号相连,模板图实时图数据外部存储器、结果存储器分别存储原始图像数据以及运算结果,微处理器由高速相关运算器的外部通信接口模块通过寄存器访问的方式进行参数输入输出、指令输入和状态查询输出,从而命令高速相关运算器进行相应的操作,同时也进行原始图像数据的准备工作,高速相关运算器把结果存储到结果存储器中,并且从模板图实时图数据外部存储器中读取数据。

进一步的,所述高速相关运算器的归一化相关系数计算模块包括模板图灰度值求和模块、模板图灰度值平方求和模块、实时图灰度值求和模块、实时图灰度值平方求和模块和实时图模板图灰度值乘积求和模块、后续计算模块、实时图模板图灰度值总和缓冲、实时图灰度值总和缓冲和实时图灰度值平方总和缓冲,

模板图在时序电路控制下从模板图实时图数据存储器输入到模板图ram缓冲块,同时输入到模板图灰度值求和模块和模板图灰度值平方求和模块计算模板图灰度值的bcc与b2cc;实时图在时序电路控制下从模板图实时图数据存储器输入到实时图数据缓冲ram,并输入到实时图灰度值求和模块和实时图灰度值平方求和模块,这两个模块计算每块实时图对应的acc和a2cc,并存储到实时图灰度值总和缓冲和实时图灰度值平方总和缓冲;模板图ram缓冲块和实时图数据缓冲ram中的数据送入到实时图模板图灰度值乘积求和模块,计算相应的abcc,并存储到模板图灰度值总和缓冲;

其中,模板图灰度值求和模块由一个第一累加器组成;

模板图灰度值平方求和模块由一个平方运算模块和一个第二累加器相连而成;实时图灰度值求和模块由与实时图灰度值平方求和模块共用的p路实时图数据缓冲ram块、第1列第一累加模块、第一并加器、第三累加器和第一加法器组成;实时图灰度值平方求和模块由与实时图灰度值求和模块共用的p路实时图数据缓冲ram、第1列第二累加模块、平方运算阵列、平方运算模块、第二并加器、第四累加器和第二加法器组成;实时图模板图灰度值乘积求和模块由和模块共用的p路实时图数据缓冲ram、p路模板图ram缓冲块、p个p选1多路选择器、p路乘法器、并加模块和第三累加器组成;后续计算模块由乘法器、平方运算模块、加法器、减法器和分子分母定点浮点转换模块、分母方根运算模块、浮点除法运算模块组成;实时图模板图灰度值总和缓冲的输出和模板图大小m*n的乘积,以及实时图灰度值总和缓冲的输出和模板图灰度值求和模块输出的乘积分别连接到减法器的被减数端和减数端,减法器的输出连接到分子浮点转换模块;实时图灰度值平方总和缓冲的输出和模板图大小m*n的乘积,以及实时图灰度值总和缓冲的输出通过一个平方运算模块,分别连接到减法器的被减数端和减数端,减法器的输出端连接到分母方根运算模块;模板图灰度值平方求和模块的输出和模板图大(m*n的乘积,以及模板图灰度值求和模块通过一个平方运算模块,分别连接到减法器的被减数端和减数端,减法器的输出端连接到分母方根运算模块;分母方根运算模块的输出送入到乘法器,计算分母并输入到分母浮点转换模块;分子分母负电转换模块的输出送入浮点除法运算模块,该模块将计算得到的归一化相关系数存储到外部存储器。其中,p为由任务要求、系统成本、体积折中决定的逻辑实现器件所能实现的并行处理通道决定。

本发明采用以上技术方案与现有技术相比,具有以下技术效果:

本发明通过在通过合理加入中间数据结果缓冲以及针对大小模板图情况定制不同工作流程方式,使得该架构同时适用于大小模板图情况,特别是对于为满足体积及功耗需求选择的fpga芯片资源只够实现小模板图并行通道的情况,提高了资源利用率,降低了成本和体积,能够适应任务不同阶段不同尺寸模板图匹配,由于基于归一化相关的模板匹配还广泛应用于图像对齐、双目立体视觉、视频编码等领域,因此该实现方法和装置具有广阔的应用前景。

附图说明

图1是本发明的原理结构框图;

图2是本发明的工作流程初始化阶段;

图3是本发明的小模板图模式工作流程;

图4是本发明的大模板图模式工作流程;

图5是本发明用于体现第1列第一累加模块和第1列第二累加模块实现的原理结构图;

图6是本发明的模板匹配原理示意图;

图7是本发明的原理结构框图;

图8是本发明的结构框图。

具体实施方式

以下结合附图对本发明作进一步详细说明。

一种融合大模板图的模板匹配并行实现方法,所用的归一化相关系数公式如下:

a表示实时图,b表示模板图,其尺寸分别为k×l和m×n个像素,(u,v)为任一搜索位置,k代表是实时图的行数,l代表实时图的列数,m代表模块图的行数,n代表模块图的列数,0≤u≤k-m,0≤v≤l-n。∑∑表示为模板图像的均值,为搜索位置(u,v)处实时图与模板图重叠部分的均值,u代表当前列,v代表当前列,c代表当前块,下述行列的序号都是从0开始的。

为了简单起见,进行下述变量定义:bcc=∑∑b(i,j),b2cc=∑∑(b(i,j)2,acc(u,v)=∑∑a(i+u,j+v),a2cc(u,v)=∑∑a(i+u,j+v)2,abcc(u,v)=∑∑a(i+u,j+v)b(i,j),即bcc表示模板图灰度值总和,b2cc表示模板图灰度值平方总和,acc(u,v)表示当前搜索位置实时图灰度值总和,a2cc(u,v)表示当前搜索位置实时图灰度值平方总和,abcc(u,v)表示当前搜索位置实时图模板图灰度值乘积总和。归一化相关系数可进一步简写为:

由上式分子和分母可以看出,归一化相关系数的计算需要大量的乘累加操作,因此非常适合并行实现。为简便起见,此处的定义和缩写在下文的描述、图形及表中同样有效。

实时图像以及模板图像的行数和列数(即,k≤kmax,l≤lmax,m≤mmax,n≤nmax)都是可以由外部微处理器输入的可变参数,其中kmax、lmax、mmax、nmax是由任务需求所决定的最大可输入图像的行列数。本发明所提出的融合大模板图的零均值归一化相关图像模板匹配并行实现方法的原理结构框图如图1所示。归一化相关系数计算完成以后取最大值、阈值处理等操作由微处理器37来完成。为了清晰起见,图1主要给出了数据流相关的结构图,各个操作符号的功能说明已经在图例中给出。图中,时序控制模块8主要用于控制整个归一化相关系数计算的工作流程。外部通信接口模块7主要用于与微处理器37进行通信,即进行参数(包括k、l、m、n)、命令输入及状态输出。归一化相关系数计算模块36为核心运算模块,包括abcc计算模块3、acc计算模块4、a2cc计算模块5、bcc计算模块2、b2cc计算模块1及后续计算模块6。

参考图2到图4,本发明的融合大模板图模板匹配并行实现方法包括如下几步,下面具体结合原理结构框图说明这些步骤中子模块的实现方法及工作流程:

a、在外部微处理器输入参数和启动命令系统启动以后进行初始化,并且设置u=0,v=0,c=0;判断模板图是否大于所实现的并行处理通道数p,小于等于则执行步骤c1~c6的小模板图模式工作流程,否则执行步骤b1~b7的大模板图模式工作流程。

c1:从外部存储器中读取每一行模板图数据存储到对应的内部模板图数据ram缓冲块中,同时计算模板图灰度值总和模板图灰度值平方总和读取模板图相同行数(m行)实时图数据分别到对应的内部实时图数据ram缓冲块中,同时计算第0行第0列搜索位置(u=0,v=0)处的实时图灰度值总和实时图灰度值平方总和同时存储到acc缓冲、a2cc缓冲中。其中当前行、列序号初始化为u=0,v=0。

由于在每一行的每一个搜索位置处的归一化相关系数的计算只需模板图行数(m)行的实时图,因此可以采用一组p个大小为1×nmax的模板图ram缓冲块21(如图1中的oram[0],...,oram[p])及p个大小为1×lmax的实时图ram缓冲块20(如图1中的rram[0],...,rram[p-1])。在开始计算时,首先从外部存储器中读入实时图数据和模板图数据到对应的内部ram缓冲块中。具体是将模板图每一行的n个灰度值数据存储到一个ram缓冲块中,共存入p行;将实时图每一行的l个灰度值数据存储到一个ram缓冲块中,共存入p行。p由任务要求、系统成本、体积折中决定的逻辑实现器件所能实现的并行处理通道确定,考虑成本,其一般由较小模板图行数确定。

对于一个固定的模板图,在每一个模板匹配位置(u,v)处,bcc和b2cc在整幅图搜索空间内只计算一次。因此可以在模板图数据从外部存储器(图1中的exter-roram)9中输入到内部的ram缓冲块21(orama[0],...,orama[p-1])的同时计算bcc和b2cc。

bcc由bcc计算模块2实现,该模块包括一个累加器14。累加器14的输入端连接到模板图实时图数据外部存储器9的输出端,在读入模板图数据时通过时序控制其输出即为模板图灰度值总和。

b2cc由b2cc计算模块1实现,该模块包括一个平方运算模块12和一个累加器13。平方运算模块12的输入端连接到模板图实时图数据外部存储器9的输出端,平方运算模块12的输出连接到累加器13的输入端,在读入模板图数据时通过时序控制累加器13的输出即为模板图灰度值平方总和。

搜索位置第u行第0列的实时图灰度值总和的计算,是通过时序控制模块控制一个行数据累加模块在每一行实时图数据读入时,对实时图第u行第0列搜索位置处每一行数据进行累加,然后通过一个列累加器对这些行数据累加模块输出结果逐行进行累加,并且和该列累加器累加结果经过m步(模板图行数步)延迟后结果相减获得。具体是由第1列累加1模块24来实现,该模块具体的原理实现结构如图5所示,每一行第一列acc的计算都是由这个模块实现的。这个模块由2个累加器(行数据累加模块和列累加模块)、一组延迟寄存器和一个为适应不同模板图行数变化而选用的p输入选1的多路选择器组成,行数据累加模块在每一行实时图数据读入时,对每一行前n个数据进行累加,因此得到列累加模块在行数据累加模块得到累加值时对该累加值进行累加,然后与经过m步(模板图行数步)延迟的列累加器累加结果相减获得第u行第0列搜索位置处的acc(u,0):

因此,本发明在实时图数据从外部存储器9(图1中的exter-roram)读入到内部ram缓冲块20(rram[0],...,rram[m-1])的过程中计算acc(u,0)。

搜索位置第u行第0列的实时图灰度值平方总和的计算,是通过时序控制模块控制一个行数据累加模块在每一行实时图数据读入时,对实时图第u行第0列搜索位置处的每一行数据平方后进行累加,然后通过一个列累加器对这些行数据平方累加模块输出结果逐行进行累加,并且和该列累加器累加结果经过m步(模板图行数步)延迟后结果相减获得。具体由a2cc计算模块5中的平方模块27和第1列累加2模块28实现。第1列累加2模块与第1列累加1模块的结构和工作流程相同。即本发明在实时图数据从外部存储器9(图1中的exter-roram)读入到内部ram缓冲块20(rram[0],...,rram[p-1])的过程中计算acc(u,0)的同时计算a2cc(u,0)。

c2:计算搜索位置(u,v)(v=0)处模板图实时图灰度值乘积总和同时存储到abcc缓冲中;从acc缓冲、a2cc缓冲、abcc缓冲中同时输出第u行第v列实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和,同时计算当前行当前列归一化互相关结果。

1)abcc计算模块

模板图与实时图当前搜索位置的灰度值乘积总和的计算,由abcc计算模块3实现。

与前述相一致,采用p个并行乘法通道来进行并行运算。因此通过合理时序控制在一个时钟周期里就可以计算m(m≤p)个乘累加,这样,在n个时钟周期以后,可以得到一个搜索位置上的abcc。

在开始计算时,首先从外部存储器中读入实时图数据和模板图数据到对应的内部ram缓冲块中。当从第2行进行搜索时,新来的一行实时图数据可以覆盖无用的第1个缓冲块,此时实时图第1个ram缓冲块(rram[0])和模板图的第1块(orram[0])不对应,而是与模板图的最后一块(oram[m-1])相对应,第2个实时图缓冲块对应模板图的第1个缓冲块,以此类推。当进行第3行搜索时,新来的一行实时图数据可以覆盖第2个无用的ram缓冲块,此时第1个实时图缓冲块对应第m-1个模板图缓冲块(oram[m-2]),第2个实时图缓冲块对应第m个模板图缓冲块(oram[m-1]),第3个才对应模板图的第1个缓冲块(oram[0]),以此类推。为了使实时图和模板图的每个ram缓冲块数据能够相对应,本发明利用多路选通开关(mux)从m个模板图缓冲块中选择一个缓冲块与实时图的每个缓冲块相对应。总共需要m个这样的多路选通开关来对数据进行重排。利用多路选通开关对实时图和模板图进行重排都是可以的,由于模板图的缓冲块较小,从而布线路径会简单一些,因此本发明采用对模板图进行重排,如图1所示。

abcc计算模块3由实时图ram缓冲块20、模板图ram缓冲块21、多路选通开关16、乘法器17、并加模块18和累加器19组成。模板图ram缓冲块21的所有输出端连接到一个多路选通开关16的输入端,多路选通开关的输出连接到乘法器17的一端,乘法器17的另一端对应连接到存储实时图像的ram缓冲块的输出端。利用模板图最大行数(mmax)个并行通道进行并行运算,然后各个通道输出端连接到一个并加模块18(padd1),最终连接到一个累加模块19(accu3)上。

在具体计算时,时序控制模块8控制选通开关16使得对应的模板图数据与实时图数据进行乘积运算,改变模板图和实时图ram缓冲块的地址,逐列输出模板图和实时图的对应数据进行乘积运算,然后经过并加模块18对当前列的各个数据进行求和,而后由累加模块19对并加模块18输出的结果逐列求和后,获得当前列各个搜索位置的

2)归一化相关系数后续计算

归一化相关系数后续由后续计算模块6实现,在acc缓冲、a2cc缓冲、abcc缓冲输出当前搜索位置实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和后相应的可以由乘法器和加、减法器计算出来。归一化相关系数公式的分母先由两个求根模块和分别进行求根运算,然后由乘法器模块进行乘积运算,这样可以降低数据宽度。归一化相关系数公式的分子和分母首先由定点浮点转换模块30和31转化为浮点数,最终通过浮点除法运算模块32进行浮点除法运算就可以得到浮点格式的归一化相关系数。

搜索位置第0行处的归一化相关系数计算,是模板图像第0到m-1行与实时图第0到m-1行数据对应计算,搜索位置第0列处归一化相关系数的计算为模板图像第0到n-1列与实时图像第0到n-1列数据对应计算。搜索位置第1列处归一化相关系数的计算为模板图像第0到n-1列与实时图像第1到n列数据对应计算,即模板图像在实时图像中右移一列,并计算该处的此时后续的求平方根、浮点除法等归一化相关系数后续计算同步流水进行,以此重复运行,直到当前行(第0行)归一化相关系数计算完成。根据实际需要可选择32位浮点或者64位浮点运算。

c3:由实时图数据ram缓冲块数据及第u行第v列(v=0)搜索位置处实时图灰度值总和、实时图灰度值平方总和,采用一加一减两步操作计算搜索位置第u行第v列(v=1)的实时图灰度值总和及实时图灰度值平方总和同时存储到acc缓冲、a2cc缓冲中。

1)后续acc计算

后续搜索位置(u,v)(v≥1)的每一个实时图灰度值总和的计算,是从搜索位置开始,通过时序控制模块同时控制所有实时图数据缓冲ram块依次输出实时图中模板图重叠区域相对于前一搜索位置(u,v-1)的新进的列数据和移出的列数据,经过并加器后,由累加器在当前输出值的基础上,累加新进的列数据并加结果减去移出的列数据并加结果,然后累加器输出结果与前一搜索位置(u,v-1)的实时图灰度值总和相加得到此时,该累加器在第0列搜索位置(v=0)时初始化为0。当前操作主要为一加一减两步操作,累加器加上相对于前一个搜索位置的新进列数据的并加结果,减去相对于前一个搜索位置的移出列数据的并加结果,其它运算通过逻辑同步完成。

由具体的模板匹配过程图6可以看出,当前位置搜索(u,v0+1)的acc计算和前一搜索位置(u,v0)相比多了一列新数据(图6中的新列)和少了一列旧数据(图6中的旧列),因此在当前给定搜索位置(u,v0+1),可以通过时序控制逻辑同时控制所有实时图ram缓冲块20,依次输出实时图的第v0+n列和第v0列数据,经过并加器后,由累加器累加上第v0+n列数据并加结果并且减去第v0列数据并加结果同时与搜索位置(u,v0)处的累加器结果求和,得到acc(u,v0+1)。同时存储到acc缓冲相应位置中。

因此后续的实时图灰度值总和acc(u,v)由acc计算模块4和a2cc(u,v)计算模块5共用的内部实时图数据ram缓冲块20、并加模块22(padd2)、累加器23(accu4)和第1列累加1模块24实现。所有内部实时图数据ram缓冲块20输出端对应连接到并加模块22的输入端,并加模块22的输出端连接到累加器23的输入端。累加器的输出加上第1列累加1模块24的输出即可得到后续列的实时图灰度值总和acc(u,v)。

2)后续a2cc计算

从搜索位置(u,v)(v≥1)起后续的a2cc(u,v)的计算以与acc(u,v)相同的方式实现。在当前给定搜索位置(u,v0+1),在时序控制模块控制所有实时图数据缓冲ram块20依次输出实时图中模板图的第v0列数据和第v0+n列数据的同时,对每个数据分别由平方运算模块求平方后,经过并加器并加,而后由累加器累加第v0+n列数据平方并加结果减去第v0列数据平方并加结果,最后由加法器与搜索位置(u,v0)处的相加即可获得当前列的同时存储到a2cc缓冲相应位置中。

因此后续的实时图灰度值平方总和a2cc(u,v)由acc计算模块4和a2cc(u,v)计算模块5共用的内部实时图数据ram缓冲块20(rram[0],...,rram[p-1])、每行1个平方运算模块26、并加器25(padd3)、累加器29(accu5)、平方模块27和第1列累加2模块28组成。所有内部实时图数据缓冲ram块20(rram[0],...,rram[p-1])的输出端对应连接到各行平方运算26输入端,各行平方运算26输出端连接到并加器25的输入端,并加器25的输出端连接到累加器29的输入端。累加器29的输出加上第1列累加2模块28的输出即可得到后续列的实时图灰度值平方总和a2cc(u,v)。

rram2可由双端口ram实现,以实现同时读出两个数据;在没有双端口ram时可由两块ram实现。

c4:以步骤c2到步骤c3的方式,依次计算当前行后续各列的归一化相关系数直到所有列计算完成。

该步骤由前述步骤c2和c3的实现细节进行实现。

c5:读入下一行(u+m)实时图数据存储到数据无效的内部实时图ram缓冲块中,同时计算当前行(第u行)第0列(v=0)的实时图灰度值总和实时图灰度值平方总和同时存储到acc缓冲、a2cc缓冲中。

由步骤c2中所述,从外部ram读入新一行的实时图数据到相应的内部ram缓冲块中,为一行相关系数计算完成后,读入一行新的实时图数据覆盖无用的实时图ram块数据,在后续计算时需要通过时序控制模块8重新切换多路选通开关使模板图ram缓冲块输出与实时图ram缓冲块输出顺序变化对应。

在读入实时图新一行数据时,同时由步骤c1中所述方式相应的计算出当前行第0列的实时图灰度值总和和实时图灰度值平方总和的值,后续列实时图灰度值总和与实时图灰度值平方总和按步骤c3中所述方式依次计算得出,同时存储到acc缓冲、a2cc缓冲相应位置中。

c6:采用步骤c2到步骤c5的方式,依次计算出后续各行各列归一化相关系数。

计算实时图像第2行至第k-m+1行的归一化相关系数,上一行相关系数计算完成后,依次读入一行新的实时图数据覆盖失效的实时图ram缓冲块数据,并且通过时序控制模块重新选择模板图ram缓冲块输出多路选通开关使其与实时图ram缓冲块数据相对应,这样相当于模板图像在待匹配图像中下移一行,这样按照步骤c2到步骤c5相同的方式进行计算,依次得到每行的归一化相关系数。

b1:从外部存储器中读取第u+p*c到u+p*c+p-1行实时图数据到对应的内部ram缓冲块,同时计算搜索位置(u,0)处第c块实时图灰度值总和实时图灰度值平方总和同时从acc、a2cc缓冲的当前列(v=0)对应位置处读取前c-1块的累加值,将该累加值与acc(u,v,c)、a2cc(u,v,c)相加后存储到acc、a2cc缓冲的对应位置。从外部存储器中读取第p*c到p*c+p-1行模板图数据到对应的内部ram缓冲块中,同时利用累加运算计算前c块模板图灰度值总和模板图灰度值平方总和

的计算采用与步骤c1中模板图灰度值平方总和、模板图灰度值平方总和相同的计算模块,在第0行第0列搜索位置处的c块数据读入完毕时完成模板图灰度值总和、模板图灰度值平方总和计算。

搜索位置(u,v)处的第c块实时图灰度值总和实时图灰度值平方总和的计算,采用与步骤c1相同的模块且保持其中延迟环节不使能(即输出为0),只输出累加后的值来实现。

b2:计算搜索位置为(u,v)(v=0)处的第c块模板图实时图灰度值乘积总和从abcc缓冲当前列v对应位置读取的前c-1块的累加值与当前第c块的abcc(u,v,c)相加后存储到abcc缓冲对应位置。

搜索位置为(u,v)(v=0)处第c块模板图实时图灰度值乘积总和的计算采用与步骤c2相同的并行计算模块abcc按相同方式计算,计算时选通开关保证模板图和实时图缓冲块之间的数据对应。计算完毕后从abcc缓冲中读取前c-1块的累加值和abcc(u,v,c)相加后存储到abcc缓冲中。

b3:由实时图数据ram缓冲块数据及搜索位置(u,v)(v=0)处的第c块实时图灰度值总和、实时图灰度值平方总和,采用一加一减两步操作来计算搜索位置(u,v)(v=1)处第c块的实时图灰度值总和及实时图灰度值平方总和从acc缓冲、a2cc缓冲当前列v对应位置读取前c-1块的累加值和acc(u,v,c)、a2cc(u,v,c)相加后存储到acc缓冲、a2cc缓冲对应位置。

搜索位置(u,v)(v=1)处第c块的实时图灰度值总和及实时图灰度值平方总和的计算采用步骤c3相同的模块按相同方式进行计算。计算完毕后从acc缓冲、a2cc缓冲当前列v对应位置读取前c-1块的累加值和第c块的acc(u,v,c)、a2cc(u,v,c)相加后存储到acc缓冲、a2cc缓冲对应位置。

b4:由步骤b2到步骤b3相同方式,依次计算当前行后续各列v第c块实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和,从缓冲读取所有块的累加值与新计算结果相加,并且存储到相应的acc缓冲、a2cc缓冲、abcc缓冲列v对应位置。

当前行后续各列v第c块实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和计算、缓冲读取、累加及存储是由步骤b2到步骤b3相同的方式,具体参考步骤b2和b3的说明。

b5:v重新初始化为0,由步骤b2到步骤b4相同的方式,依次计算当前行各列v处的各块实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和,从缓冲相应位置读取此前所有块累加值与新计算结果相加,并且存储到相应acc缓冲、a2cc缓冲、abcc缓冲中,由此得到当前行各列搜索位置处的实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和。

当前行各列v的各块实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和计算、缓冲读取、累加及存储由步骤b2到步骤b4相同的方式,具体参考步骤b2、b3、b4的说明。最终由此得到当前行各列实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和。

b6:由acc缓冲、a2cc缓冲、abcc缓冲依次输出当前行各列实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和,同时计算当前行各列的归一化互相关结果。

由acc缓冲、a2cc缓冲、abcc缓冲依次输出当前行各列搜索位置处的实时图灰度值总和、实时图灰度值平方总和、模板图实时图灰度值乘积总和后,相应的可以由乘法器、平方运算、加、减法器计算出来。归一化相关系数计算公式中的分母由两个求根模块进行求根运算,然后再对两者进行相乘得到。然后归一化相关系数计算公式中的分子和分母由除法运算得到归一化相关系数。

b7:块序c重新初始化为0,采用步骤b1到步骤b6相同方式,依次计算出后续各行各列归一化相关系数。

采用步骤b1到步骤b6相同的方式,依次计算出后续各行各列归一化相关系数,即基于实时图灰度值总和、实时图灰度值平方总和、实时图模板图灰度值缓冲,由前述步骤首先分别进行当前行搜索位置处第c块实时图灰度值、模板图灰度值、实时图灰度值平方总和、模板图灰度值平方总和、实时图模板图灰度值计算、缓冲读取、累加及存储直到所有块完成,然后计算各列的归一化相关系数直到完成,而后计算当前行各列的归一化相关系数。这样采用步骤b1到步骤b6相同的方式,依次计算出后续各行各列归一化相关系数。

其中本发明中外部实时图和模板图数据存储在了一块存储器(exter-roram)中,此时读取分为两步;也可考虑分别存储在两块ram中,此时可同时进行读取,可根据实际情形对上述实现方法和步骤进行适量合并。

一种融合大模板图的模板匹配并行实现装置,如图7所示,为高效模板匹配装置,由高速相关运算器10、模板图实时图数据外部存储器9、结果存储器11和微处理器37构成,高速相关运算器10分别与模板图实时图数据外部存储器9、结果存储器11、微处理器37相连,模板图实时图数据外部存储器9、结果存储器11也与微处理器37相连。高速相关运算器10由归一化相关系数计算模块36、外部通信接口模块7以及时序控制模块8组成。归一化相关系数计算模块36主要用于归一化相关系数的计算。外部通信接口模块7主要通过寄存器与处理器进行参数输入输出、指令输入、状态查询输出。时序控制模块8主要基于上述步骤控制整个归一化相关系数计算的工作流程,它与各个模块中的ram的地址及控制线、多路选择器的选通地址、寄存器的使能端等控制和地址信号相连。模板图实时图数据外部存储器9、结果存储器11分别存储原始图像数据以及运算结果,微处理器37由高速相关运算器10的外部通信接口模块7通过寄存器访问的方式进行参数输入输出、指令输入和状态查询输出,从而命令高速相关运算器10进行相应的操作,同时也进行原始图像数据的准备工作。高速相关运算器10把结果存储到结果存储器11中,并且从模板图实时图数据外部存储器9中读取数据。

如图1所示,高效模板匹配装置中高速相关运算器10的归一化相关系数计算模块36包括模板图灰度值求和模块2,模板图灰度值平方求和模块1,实时图灰度值求和模块4、实时图灰度值平方求和模块5和实时图模板图灰度值乘积求和模块3、后续计算模块6、实时图模板图灰度值总和缓冲41、实时图灰度值总和缓冲42、实时图灰度值平方总和缓冲43;模板图灰度值求和模块2由一个第一累加器14组成,模板图灰度值平方求和模块1由一个平方运算模块12和一个第二累加器13相连而成;实时图灰度值求和模块4由与实时图灰度值平方求和模块5共用的p路实时图数据缓冲ram块20、第1列第一累加模块24、并加器22、第三累加器23和加法器组成;实时图灰度值平方求和模块5由与实时图灰度值求和模块4共用的p路实时图数据缓冲ram20、第1列第二累加模块28、平方运算阵列26、平方运算模块27、并加器25、第四累加器29和加法器组成。实时图模板图灰度值乘积求和模块3由和模块4共用的p路实时图数据缓冲ram20、p路模板图ram缓冲块21、p个p选1多路选择器16、p路乘法器17、并加模块18和累加器19组成。后续计算模块由乘法器、平方运算模块、加法器、减法器和分子分母定点浮点转换模块、分母方根运算模块、浮点除法运算模块32组成。其中,p为由任务要求、系统成本、体积折中决定的逻辑实现器件所能实现的并行处理通道决定,考虑成本,其一般由较小模板图行数决定。

模板图在时序电路控制下从模板图实时图数据存储器输入到模板图ram缓冲块,同时输入到模板图灰度值求和模块和模板图灰度值平方求和模块计算模板图灰度值的bcc与b2cc;

实时图在时序电路控制下从模板图实时图数据存储器输入到实时图数据缓冲ram,并输入到实时图灰度值求和模块和实时图灰度值平方求和模块,这两个模块计算每块实时图对应的acc和a2cc,并存储到实时图灰度值总和缓冲和实时图灰度值平方总和缓冲;

模板图ram缓冲块和实时图数据缓冲ram中的数据送入到实时图模板图灰度值乘积求和模块,计算相应的abcc,并存储到模板图灰度值总和缓冲;

实时图模板图灰度值总和缓冲的输出和模板图大小m*n的乘积,以及实时图灰度值总和缓冲的输出和模板图灰度值求和模块输出的乘积分别连接到减法器的被减数端和减数端,减法器的输出连接到分子浮点转换模块;

实时图灰度值平方总和缓冲的输出和模板图大小m*n的乘积,以及实时图灰度值总和缓冲的输出通过一个平方运算模块,分别连接到减法器的被减数端和减数端,减法器的输出端连接到分母方根运算模块;

模板图灰度值平方求和模块的输出和模板图大(m*n的乘积,以及模板图灰度值求和模块通过一个平方运算模块,分别连接到减法器的被减数端和减数端,减法器的输出端连接到分母方根运算模块;

分母方根运算模块的输出送入到乘法器,计算分母并输入到分母浮点转换模块;

分子分母负电转换模块的输出送入浮点除法运算模块,该模块将计算得到的归一化相关系数存储到外部存储器。

其中,p为由任务要求、系统成本、体积折中决定的逻辑实现器件所能实现的并行处理通道决定。

高效模板匹配装置工作流程如下:首先微处理器37把原始模板图和实时图数据存入模板图实时图数据外部存储器9中,然后向高速相关运算器10输入图像的尺寸参数,而后输入启动命令启动归一化相关运算,高速相关运算器10会将运算结果存储到结果存储器。在运算过程中通过寄存器访问的方式查询运算的进程状态。在运算完成以后,微处理器37会从高速相关运算器10收到完成的中断信号,为可靠起见,微处理器37进一步查询高速相关运算器10的完成标志,在确保完成以后从结果存储器11读取归一化相关系数计算结果进行后续处理工作。

高效模板匹配装置中所包含的高速相关运算器可以利用fpga实现,也可利用vlsi实现。高速相关运算器中实时图像以及模板图像的行数和列数都是可以由外部微处理器输入的可变的参数,而最终实现的并行通道数目,包括内部实时图和模板图ram缓冲块的数目,是由任务要求、系统成本、体积折中决定的逻辑实现器件所能实现的并行处理通道数(可以小于任务要求的最大行数)确定。

下面是算法的具体实施实例:

本发明的实施实例是以altera公司的现场可编程门阵列stratixii系列ep2s90f780i4芯片为平台。图像灰度值为8位,模板图和实时图的大小参数是可变的:2≤m≤400,2≤n≤400,2≤k≤512,2≤l≤512。相应的,我们采用小模板图的行数80作为并行通道数,大模板图行数为400。采用quartusii8.0sp1软件作为基本的逻辑分析、综合、逻辑布局布线工具,采用verilog和vhdl语言混合硬件编程的方式进行逻辑设计。系统的全局时钟频率采用70mhz,由pll根据外部输入的20mhz时钟产生。具体采用32位浮点归一化相关系数输出。

依据本发明,具体实例图像模板匹配的实施如下:

1)依据两个图像的具体大小,搭建图像匹配系统

高速相关运算器按照图1在fpga芯片上实现,完成归一化相关系数的计算。模板图实时图的ram缓冲块由实例化ram实现,多路选择器、乘法运算、平方运算、加法运算、减法运算、求方根运算、定点浮点转换、浮点除法运算都由qartusii根据所用的fpga相应进行实例化。时序控制模块通过状态机的方式实现,从而控制整个系统的运行。在分母求方根运算和分子转化为浮点数之前,所有的数据计算都进行了位扩展以保证不出现精度损失。

2)采用verilog和vhdl语言混合编程的方式进行逻辑设计

步骤a、在外部的微处理器输入参数和启动命令系统启动以后进行初始化;判断模板图是否大于所实现的并行处理通道数80,小于等于执行c1~c7小模板图相应的工作流程,否则,执行大模板图相应的工作流程。

步骤c1:读入模板图像80*80个数据到a组对应的每一个内部ram缓冲块中,读入前80行实时图像512*80个数据分别存储到对应的内部ram缓冲块,同时计算bcc和b2cc和第0行第0列搜索位置上的acc和a2cc,并且存储到acc和a2cc缓冲中

对于模板图像和实时图像,分别设置80个ram缓冲块,每一行信息存储到一个ram缓冲块中,由于灰度值为8位二进制数据,每个ram缓冲块的大小分别为400*8(位)和512*8(位),前80行实时图像同时依次存入实时图数据缓冲ram中,总计512*80*8(位)。这样对于实时图,在开始时读入的是第1至80行数据。bcc在模板图像数据读入过程中通过bcc计算模块计算出来,同时b2cc在模板图像数据读入过程中通过b2cc计算模块计算出来。第1行第1列搜索位置上的acc和a2cc由第1列累加1模块和第1列累加2模块实现。acc缓冲和a2cc缓冲的大小分别为433*17(位)和433*25(位)。

步骤c2:计算abcc(u,v),存储到abcc缓冲中,从缓冲中输出并且计算归一化相关系数,并且将结果存储到外部存储器中。

对于abcc的计算,时序控制模块控制当前计算组模板图和实时图每一个ram缓冲块地址同时输出一列数据,同时控制多路选择器选择对应的模板图与实时图数据进行乘积运算,然后经过对所有行乘积结果同时求和的并加和对并加结果逐列求和的累加实现。abcc缓冲的大小分别为433*25(位)。同时按照流水的方式由后续计算模块计算出归一化相关系数,并且存储到外部存储器中。

步骤c3:计算acc(u,v)和a2cc(u,v),并且存储到acc和a2cc缓冲中

对于每一行从第1列(0为起始序号)开始,acc和a2cc可由时序控制模块控制acc计算模块和a2cc计算模块实现,具体从实时图数据缓冲ram(rram2)中顺序读出新进的一列数据和移出的旧的一列数据相减并且对结果值进行累加而后和当前行第一列的acc求和计算。

步骤c4:由步骤c2到步骤c3相同的方式,依次计算当前行后续各列v归一化相关系数直到所有列计算完成。

步骤c5:从外部ram读入新一行的实时图数据到相应的内部ram缓冲块中,同时存入到实时图数据缓冲ram中,同时计算当前行第0列的acc(u,0)和a2cc(u,0)值,同时存储到acc缓冲、a2cc缓冲中。

对于实时图像,当开始进行第2行搜索时,新来的第m+1行实时图数据覆盖已经不用的第1个缓冲块,以此类推。当进行第3行搜索时,新来的一行实时图数据可以覆盖第2个已经不用的ram缓冲块,此时第1个实时图缓冲块对应第m-1个模板图缓冲块(oram[m-2]),第2个实时图缓冲块对应第m个模板图缓冲块(oram[m-1]),第3个才对应模板图的第1个缓冲块(oram[0]),以此类推。时序控制模块控制选通开关使得模板图数据与实时图数据对应。

当前行第1列搜索位置上acc(u,1)和a2cc(u,1)由第1列累加1模块和第1列累加2模块在新一行实时图数据读入过程中同时计算出来。

步骤c6:重复(2)~(3),依次计算直到433行数据计算完毕。

大模板图相应的工作流程和实现方式这儿不再赘述。

3)资源利用情况

由qartusii编译报告,总的资源利用在67%。aluts占用了56%,regs40%,内存位数20%,dsp块59%。可见,在包含了求平方根、定点到浮点转换、浮点除法等运算情况下,整个fpga芯片占用的逻辑资源不多,因而本发明所提方案是完全可以实现的。

4)实际的实验结果

在实际系统中,融合大模板图的归一化相关图像模板匹配并行实现方法的基本构成如图8所示。图中,exter-roram、exter-ram分别为缓存模板图实时图数据和运算结果的外部存储器。微处理器采用adi公司的dsp芯片ts201。addr和data为地址和数据总线,rd、wr、cs为外部存储器读写控制信号。

首先ts201作为核心处理器把模板图实时图数据存入外部双端口ram(exter-roram)中,然后向fpga输入图像的尺寸参数,其后输入启动命令启动模板匹配运算。在运算完成以后,ts201会收到完成的中断信号,为可靠起见,ts201需要查询fpga的完成标志,在确保完成以后进行后续工作。

在不同参数情况下用不同实际图像数据对该装置进行了长期的稳定性测试,归一化相关系数计算的结果与理论计算值相一致,并且能够稳定可靠的工作。

上述仅用altera公司的现场可编程门阵列stratixii系列ep2s90f780i4以70mhz系统全局时钟频率进行了实施验证,实际方案可以采用更高的时钟频率和更先进的fpga芯片进行综合验证,从而获得功耗和速度上的进一步提高。

因为fpga通常用作vlsi专用集成电路的验证和开发平台,因此所提出的高速相关运算器可以同样进一步由vlsi实现和验证。

本具体实施例仅仅是对本发明的解释,其并不是对本发明的限制,本领域技术人员在阅读完本说明书后可以根据需要对本实施例做出没有创造性贡献的修改,但只要在本发明的权利要求范围内都受到专利法的保护。

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