CN103310228B - 基于归一化相关系数的模板匹配高速并行实现方法和装置 - Google Patents

基于归一化相关系数的模板匹配高速并行实现方法和装置 Download PDF

Info

Publication number
CN103310228B
CN103310228B CN201310208097.0A CN201310208097A CN103310228B CN 103310228 B CN103310228 B CN 103310228B CN 201310208097 A CN201310208097 A CN 201310208097A CN 103310228 B CN103310228 B CN 103310228B
Authority
CN
China
Prior art keywords
real
time
mrow
row
gray value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201310208097.0A
Other languages
English (en)
Other versions
CN103310228A (zh
Inventor
王邢波
王小涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing Post and Telecommunication University
Original Assignee
Nanjing Post and Telecommunication University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing Post and Telecommunication University filed Critical Nanjing Post and Telecommunication University
Priority to CN201310208097.0A priority Critical patent/CN103310228B/zh
Publication of CN103310228A publication Critical patent/CN103310228A/zh
Application granted granted Critical
Publication of CN103310228B publication Critical patent/CN103310228B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Complex Calculations (AREA)
  • Image Analysis (AREA)

Abstract

本发明公开了一种基于归一化相关系数的模板匹配高速并行实现方法和装置,该方法步骤是读入实时图和模板图数据到对应的内部RAM缓冲块和实时图数据缓冲RAM中,同时进行模板图灰度值总和模板图灰度值平方总和计算和搜索位置(0,0)处实时图灰度值总和实时图灰度值平方总和计算;然后同时计算搜索位置第1行后续各列的搜索位置第1行各列模板图实时图灰度值乘积总和及归一化相关系数;进一步同时读入新一行的实时图数据到对应内部RAM缓冲块和实时图数据缓冲RAM对应位置中,同时计算当前行第1列的值;依次计算出后续各行归一化相关系数。该装置由高速相关运算器、外部数据结果存储器和微处理器构成。

Description

基于归一化相关系数的模板匹配高速并行实现方法和装置
技术领域
本发明涉及图像模板匹配技术领域,特别涉及一种基于归一化相关系数的模板匹配高速并行实现方法和装置。
背景技术
模板匹配主要用来定位图像中的一个目标,它广泛应用于图像对齐、边缘检测、双目立体视觉等图像处理领域,并且这些图像处理手段已经在导弹目标识别、卫星图像监控、医疗图像融合、基于双目立体视觉的测量等军用民用领域中得到广泛应用。
模板匹配主要是通过计算搜索位置处已知模板图与实时图搜索区域之间的相似性测度来定位与模板图有类似尺寸和图像的目标。由于归一化互相关系数对亮度和对比度变化具有不变性,其算法相对简单并且具有很高的精度,因此迄今为止它是模板匹配中应用最广泛的一种测度。假设实时图由A表示,模板图由B表示,其尺寸分别为K×L和M×N个像素。在任一搜索位置(u,v)(0≤u≤K-M,0≤v≤L-N)的归一化互相关系数(NCC-NormalizedCross-Correlation)定义为:
其中∑∑表示为模板图的灰度均值,为在当前搜索位置的实时图与模板图重叠部分的灰度均值。由此可以看出,实际上该运算就是在实时图中平移模板图,并对实时图和模板图重叠点进行归一化相乘,然后进行累加操作。
为了获得精确定位,模板匹配需要在实时图中搜索与模板图相重合的每一个区域,因此对于一个通常的应用,需要搜索的位置数目往往非常多。对于自动目标识别、跟踪等实时应用领域,基于归一化互相关测度的模板匹配计算量相对还是太大从而导致其应用受到很大限制。
目前已经提出许多技术来加速模板匹配计算,由于这些技术不需要对所有位置进行匹配,因此大幅度的降低了计算量,但是这些技术通常由于局部的极值点干扰导致错误的匹配。事实上,由于模板匹配的计算是针对图像各个像素进行相关运算,因此该方法本身能够通过并行的方法来加速。另外也提出了一些多处理器系统来加速模板匹配的计算。但是对于要求小型化、微功耗的嵌入式应用,多处理器方法无法满足实际应用要求,并且也不经济。
近年来,随着电子技术和制造工艺的快速发展,现场可编程门阵列(FPGA)的容量越来越大、速度越来越快,这使得FPGA具有了一般微处理器所无法比拟的强大的并行性,因此FPGA特别适用于实现模板匹配计算。
专利申请号为200910069272.6高速图像匹配方法及装置提出的是一种实现归一化互相关系数方法,该方法实现结构简单,但具体实现流程需要太多的切换,乘累加模块的输入需要切换多个输入,这将增加逻辑资源消耗、增加布线的难度,导致布线路径较长从而降低系统可能达到的最高内核速度,同时增加了功耗;输出的只是中间累加结果,这将导致需要更多的外部存储空间或者需要DSP紧密配合运算,从而占用大量的DSP运行时间,导致DSP的控制和通信的复杂度,降低DSP运行的实时性。而本发明能够解决上面的问题。
发明内容
本发明针对上述现有技术的不足,提出了一种基于归一化相关系数的模板匹配高速并行实现方法,该方法可由现场可编程门阵列(FPGA)或超大规模集成电路(VLSI)通过并行方式来高速高精度地计算归一化互相关系数,能够进一步减少逻辑资源消耗,降低功耗和成本,同时提高运算速度;采用该方法的设备能够实现精度高、参数设置灵活、实时性强的高速模板匹配。
本发明解决上述技术问题所采用的技术方案是:
基于归一化相关系数的模板匹配高速并行实现方法和装置,高速并行实现方法包括有如下步骤:
步骤1:读入实时图和模板图数据到对应的内部RAM缓冲块中,同时实时图数据存储到用于计算实时图灰度值总和与实时图灰度值平方总和的实时图数据缓冲RAM中,同时进行模板图灰度值总和模板图灰度值平方总和的计算和第1行第1列搜索位置处实时图灰度值总和实时图灰度值平方总和的计算;
步骤2:计算搜索位置第1行后续各列的实时图灰度值总和同时计算当前位置实时图灰度值平方总和搜索位置第1行各列模板图实时图灰度值乘积总和及归一化相关系数;
步骤3:读入新一行的实时图数据到数据已经无效的内部RAM缓冲块,同时该新一行实时图数据读入到用于计算实时图灰度值总和与实时图灰度值平方总和的实时图数据缓冲RAM中覆盖已经无效的数据,同时计算当前行第1列的实时图灰度值总和实时图灰度值平方总和值;
步骤4:采用上述步骤2、步骤3相同的方式,依次计算出后续各行归一化相关系数。
上述模板匹配方法所用的归一化相关系数公式如下:
A表示实时图,B表示模板图,其尺寸分别为K×L和M×N个像素。(u,v)为任一搜索位置,0≤u≤K-M,0≤v≤L-N。ΣΣ表示为模板图像的灰度平均值,为当前搜索位置(u,v)处实时图与模板图重叠部分的灰度平均值。
步骤1所述的模板图数据读入到对应的内部RAM缓冲块,是将每一行N列的灰度值存储到一个RAM块中,共存入M行,即采用了M个RAM块,每个RAM块包含N个存储单元;实时图数据读入到对应的内部RAM缓冲块,是将每一行L列的灰度值存储到一个RAM块中,共存入M行,同样采用了M个RAM块,每个RAM块包含L个存储单元;实时图数据存储到用于计算实时图灰度值总和和实时图灰度值平方总和的实时图数据缓冲RAM中,总计存入M行N列数据,即该块RAM包含M×N个存储单元。
步骤1所述的模板图灰度值总和的运算在读入模板图数据时,通过时序控制模块控制一个累加器实现。累加器的输入端连接到模板图数据输入端,其输出即为模板图灰度值总和。
步骤1所述的模板图灰度值平方总和的运算在读入模板图数据时,通过时序控制模块控制一个平方运算模块和累加器实现。平方运算模块的输入端连接到模板图数据输入端,平方运算模块的输出连接到累加器的输入端,累加器输出即为模板图灰度值平方总和。
步骤1中所述的搜索位置第1行第1列的实时图灰度值总和的计算,是通过时序控制模块控制一个行数据累加模块在读入每一行实时图数据时,对实时图第1行第1列搜索位置处每一行数据进行累加,然后通过一个列累加器对这些行数据累加模块输出结果逐列进行累加,并且和经过M步(模板图行数步)延迟的列累加器累加结果相减获得。
步骤1中所述的搜索位置第1行第1列的实时图灰度值平方总和的计算,是通过时序控制模块控制一个行数据累加模块在每一行实时图数据读入时,对实时图第1行第1列搜索位置处每一行数据平方后进行累加,然后通过一个列累加器对这些行数据累加模块输出结果逐列进行累加,并且和经过M步(模板图行数步)延迟的列累加器累加结果相减获得。
步骤2中后续各列每一个实时图灰度值总和计算,是从搜索位置第2列开始,通过时序控制模块控制实时图数据缓冲RAM同时依次逐行输出实时图与模板图重叠区域中相对于前一个搜索位置新进的一列数据和刚移出的一列数据,由减法器作差后,再通过累加器逐行求和,并且与前一列搜索位置处的该累加器结果值求和(即该累加器从第2列开始保留所有的累加值),然后由加法器与已经计算出的当前行第1列搜索位置处的相加即可获得当前列的
步骤2中后续各列每一个实时图灰度值平方总和计算,是从搜索位置第2列开始,通过时序控制模块控制实时图数据缓冲RAM同时依次逐行输出实时图与模板图重叠区域中相对于前一个搜索位置新进的一列数据和刚移出的一列数据,分别由平方运算模块求平方后再由减法器作差,然后通过累加器逐行求和,并且与前一列搜索位置处的该累加器结果值求和(即该累加器从第2列开始保留所有的累加值),最后由加法器与已经计算出的当前行第1列搜索位置处的相加即可获得当前列的
步骤2中模板图与实时图当前搜索位置的灰度值乘积总和的计算如下实现。模板图RAM缓冲块的所有输出端连接到一个多路选通开关,多路选通开关的输出连接到乘法模块中的一个乘法器的一端,乘法器的另一端对应连接到实时图像RAM缓冲块的输出端;采用模板图最大行数(M)个这样的并行通道进行并行运算,然后各个通道输出端连接到一个并加模块的输入端,并加模块的输出端连接到一个累加模块。在具体计算时,时序控制模块控制选通开关使得对应的模板图数据与实时图数据进行乘积运算,改变模板图像和实时图像RAM缓冲块的地址,逐列输出模板图和实时图的对应数据进行乘积运算,然后经过并加模块对当前列各行数据进行求和,然后由累加模块对并加模块输出结果逐列求和,获得当前列各个搜索位置的
步骤2所述计算归一化相关系数是在 计算出来以后,相应的 可以由乘法器、平方运算、加、减法器计算出来。归一化相关系数计算公式中的分母由两个求根模块进行求根运算,然后再对两者进行相乘获得。然后归一化相关系数计算公式中的分子和分母由定点转化为浮点,最终通过一个浮点除法运算得到浮点数据类型的归一化相关系数。
步骤2所述的搜索位置第1行归一化相关系数的计算,是模板图像第1到M行与实时图第1到M行数据对应计算,搜索位置第1列归一化相关系数的计算为模板图像第1到N列与实时图像第1到N列数据对应计算,同时计算第2列的模板图像在实时图像中右移一列,并计算该处的同时计算第3列的此时后续的求平方根、浮点除法等后续运算同步流水进行,以此重复,直到第一行归一化相关系数计算完成。
步骤3所述从外部RAM读入新一行的实时图数据到相应的内部RAM缓冲块中,为第一行相关系数计算完成后,读入一行新的实时图数据覆盖不用的实时图RAM块数据,在后续各行计算时需要通过时序控制模块重新切换多路选通开关使模板图RAM缓冲块输出与实时图RAM缓冲块输出顺序变化对应。同时该新一行实时图数据读入到实时图数据缓冲RAM中覆盖已经无效的数据。
步骤3中所述在读入实时图新一行数据时,同时由前述方式相应的计算出当前行第1列的实时图灰度值总和的值,后续列实时图灰度值总和亦是按前述方式依次计算得出。
步骤3中所述在读入实时图新一行的数据时,此时会由前述方式相应的计算出当前行第1列的实时图灰度值平方总和的值,后续列实时图灰度值平方总和亦是按前述方式依次计算得出。
步骤4所述计算出后续各行归一化互相关系数,是指计算实时图像第2行至第K-M+1行归一化相关系数,第一行相关系数计算完成后,依次读入一行新的实时图数据覆盖不用的实时图RAM缓冲块数据和对应的实时图数据缓冲RAM中的数据,并且通过时序控制模块重新选择模板图RAM缓冲块输出多路选通开关使其与之对应,这样相当于模板图像在待匹配图像中下移一行,然后按照步骤2和步骤3方式进行计算,依次得到每行的归一化相关系数。
本发明还提出了一种基于归一化相关系数的模板匹配高速并行方法的装置,该装置是由高速相关运算器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中读取数据。
高速模板匹配装置中高速相关运算器10的归一化相关系数计算模块36包括模板图灰度值求和模块2,模板图灰度值平方求和模块1,实时图灰度值求和模块4、实时图灰度值平方求和模块5、实时图模板图灰度值乘积求和模块3和后续计算模块6。模板图灰度值求和模块2由一个累加器14组成,模板图灰度值平方求和模块1由一个平方运算模块12和一个累加器13相连而成。实时图灰度值求和模块4由与实时图灰度值平方求和模块5共用的实时图数据缓冲RAM21、第1列累加模块24、减法器22、累加器23和加法器组成。实时图灰度值平方求和模块5由与实时图灰度值平方求和模块4共用的实时图数据缓冲RAM21、第1列累加模块28、平方运算模块26、27、38、减法器25、累加器29和加法器组成。实时图模板图灰度值乘积求和模块3由实时图RAM缓冲块20、模板图RAM缓冲块15、多路选通开关16、乘法器17、并加模块18和累加器19组成。后续计算模块由乘法器、加、减法器和分子分母定点浮点转换模块(30、31)、分母方根运算模块(33、34)、浮点除法运算模块32组成。
高速模板匹配装置工作流程为:首先微处理器37把原始模板图和实时图数据存入模板图实时图数据存储器9中,然后向高速相关运算器10输入图像的尺寸参数,而后输入启动命令启动归一化相关运算。在运算过程中通过寄存器访问的方式查询运算的进程状态。在运算完成以后,微处理器37会从高速相关运算器10收到完成的中断信号,为可靠起见,微处理器37进一步查询高速相关运算器10的完成标志,在确保完成以后从结果存储器读取归一化相关系数计算结果进行后续处理工作。
高速模板匹配装置中所包含的高速相关运算器可以利用FPGA实现,也可利用VLSI实现。高速相关运算器中实时图像以及模板图像的行数和列数都是可以由外部微处理器输入的可变的参数,而最终实现的并行通道数目,包括内部实时图和模板图RAM缓冲块的数目,是由任务要求决定的最大的行数。
本发明的有益效果:
1、本发明的实现方法通过合理、精细的设计,有效地减少了系统逻辑资源消耗,加快了运行速度,从而降低了功耗。
2、本发明缩短了布线路径,提高了FPGA内核所能达到的最大运行速度。
3、本发明降低了对外部微处理器的要求,并且该实现缩小了系统的体积。
附图说明
图1是基于归一化相关系数的模板匹配高速并行实现方法的原理结构框图。
图2是基于归一化相关系数的模板匹配高速并行实现方法的工作流程图。
图3是累加器的结构图。
图4是图1中第1列累加模块实现原理结构图。
图5是模板匹配原理示意图。
图6是(a)累加-并加运算;(b)并加-累加运算。
图7是并加实现结构图。
图8是基于归一化相关系数的高速并行模板匹配装置原理结构框图。
图9是高速相关运算器的时序仿真波形结果图。
图10是基于归一化相关系数的模板匹配高速并行实现装置结构框图。
具体实施方式
下面结合说明书附图对本发明的技术方案作进一步说明。
本发明所用的归一化互相关系数公式如下:
A表示实时图,B表示模板图,其尺寸分别为K×L和M×N个像素。(u,v)为任一搜索位置(u,v),0≤u≤K-M,0≤v≤L-N。∑∑表示为模板图像的均值,为在当前搜索位置实时图与模板图重叠部分的均值。
为了简单起见,进行下述变量定义: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)表示当前搜索位置实时图模板图灰度值乘积总和。归一化互相关系数可进一步简写为:
根据上述公式的分子和分母可知,归一化互相关的计算需要大量的乘累加操作,相对而言,控制逻辑需求很少,因此非常适合用FPGA来实现。为简便起见,此处的定义和缩写在下文的描述、图形及表中同样有效。
实时图像以及模板图像的行数和列数(即,K≤Kmax,L≤Lmax,M≤Mmax,N≤Nmax)都是可以由外部微处理器输入的可变参数,其中Kmax、Lmax、Mmax、Nmax为由任务需求决定的最大可输入的行列数,也是本发明所采用的并行通道数目。本发明所提出的基于归一化相关系数的模板匹配高速并行实现方法的原理结构框图如图1所示。归一化相关系数计算完成以后取最大值或阈值处理操作由微处理器37来完成。为了清晰起见,图1主要给出了数据流相关的结构图,各个操作符号的功能说明已经在图例中给出。图中,时序控制模块8主要用于控制整个归一化相关系数计算的工作流程。外部通信接口模块7主要用于与微处理器9进行通信,即进行参数(包括K、L、M、N)、命令输入及状态输出。归一化相关系数计算模块36为核心运算模块,包括ABcc计算模块3、Acc计算模块4、A2cc计算模块5、Bcc计算模块2、B2cc计算模块1及后续计算模块6。
如图2所示,本发明的基于归一化相关系数的模板匹配高速并行实现方法包括如下4步。下面具体结合原理结构框图说明这些步骤中子模块的实现方法及工作流程。
(1)读入实时图和模板图数据到对应的内部RAM缓冲块中,同时实时图数据存储到用于计算实时图灰度值总和和实时图灰度值平方总和的实时图数据缓冲RAM中,同时进行模板图灰度值总和模板图灰度值平方总和计算和第1行第1列搜索位置处实时图灰度值总和实时图灰度值平方总和计算。
由于每一行中每一个位置上的归一化相关系数的计算只需模板图行数(M)行的实时图,因此我们可以采用Mmax个大小为1×Nmax的模板图RAM缓冲块15(如图1中的ORAM[0],...,ORAM[Mmax-1])及Mmax个大小为1×Lmax的实时图RAM缓冲块20(如图1中的RRAM[0],...,RRAM[Mmax-1])。在开始计算时,首先从外部存储器中读入实时图数据和模板图数据到对应的内部RAM缓冲块中。具体是将模板图每一行N列的灰度值数据存储在一个RAM缓冲块中,共存入M行;将实时图每一行L列的灰度值数据存储在一个RAM缓冲块中,共存入M行。
对于一个固定的模板图,在每一个模板匹配位置(u,v),Bcc和B2cc在整幅图搜索空间内只计算一次。因此可以在模板图数据从外部RAM(图1中的Exter-RORAM)9中输入到内部RAM缓冲块15(ORAM[0],...,ORAM[M-1])的同时把Bcc和B2cc计算出来。
Bcc由Bcc计算模块2实现,该模块包括一个累加器14。累加器14的输入端连接到模板图实时图数据存储器9的输出端,其输出即为模板图灰度值总和。
累加器的具体结构如图3所示。主要包括一个加法器和一个延迟寄存器(DFF),在外部时钟(clk)和使能信号(ena)的控制下累加器对输入(data[n..0])进行累加。
B2cc由B2cc计算模块1实现,该模块包括一个平方运算模块12和一个累加器13。平方运算模块12的输入端连接到模板图实时图数据存储器9的输出端,平方运算模块12的输出连接到累加器13的输入端,累加器13的输出即为模板图灰度值平方总和。
搜索位置第1行第1列的实时图灰度值总和的计算,是通过时序控制模块控制一个行数据累加模块在每一行实时图数据读入时,对实时图第1行第1列搜索位置处每一行数据进行累加,然后通过一个列累加器对这些行数据累加模块输出结果逐列进行累加,并且和经过M步(模板图行数步)延迟的列累加器累加结果相减获得。具体是由第1列累加1模块24来实现,该模块具体的原理实现结构如图4所示,每一行第一列Acc的计算都是由这个模块实现的。这个模块由2个累加器(行数据累加模块和列累加模块)、一组延迟寄存器和一个为适应不同模板图行数参数变化而选用的Mmax输入的多路选通开关组成,行数据累加模块在每一行实时图数据读入时,对每一行前N个数据进行累加,因此我们得到列累加模块在行数据累加模块得到累加值时对该累加值进行累加,然后与经过M步(模板图行数步)延迟的列累加器累加结果相减获得每一行第一个搜索位置的Acc(u,1):
因此,本发明在实时图数据从外部RAM9(图1中的Exter-RORAM)读入到FPGA内部RAM缓冲块20(RRAM[0],...,RRAM[M-1])和内部实时图数据缓冲RAM21(RRAM2)的过程中计算Acc(u,1)。
搜索位置第1行第1列的实时图灰度值平方总和的计算,是通过时序控制模块控制一个行数据累加模块在每一行实时图数据读入时,对实时图第1行第1列搜索位置处每一行数据平方后进行累加,然后通过一个列累加器对这些行数据累加模块输出结果逐列进行累加,并且和经过M步(模板图行数步)延迟的列累加器累加结果相减获得。具体由A2cc计算模块5中的平方模块27和第1列累加2模块28实现。第1列累加2模块与第1列累加1模块的结构和工作流程相同。即本发明在实时图数据从外部RAM9(图1中的Exter-RORAM)读入到FPGA内部RAM缓冲块20(RRAM[0],...,RRAM[M-1])和内部实时图数据缓冲RAM21(RRAM2)的过程中计算Acc(u,1)的同时计算A2cc(u,1)。
(2)计算搜索位置第1行后续各列的实时图灰度值总和同时计算当前位置实时图灰度值平方总和搜索位置第1行各列模板图实时图灰度值乘积总和及归一化相关系数。
1)后续Acc计算
后续各列每一个实时图灰度值总和的计算,是从搜索位置第2列开始,通过时序控制模块控制实时图数据缓冲RAM同时依次逐行输出实时图与模板图重叠区域相对于前一个搜索位置新进的一列数据和刚移出的一列数据,由减法器作差后,通过累加器逐行求和,并且与前一列搜索位置处的该累加器结果值求和,即该累加器从第2列开始保留所有的累加值,然后由加法器与已经计算出的当前行第1列搜索位置处的相加即可获得当前列的
由具体的模板匹配过程图5可以看出,当前位置(u,v0+1)的Acc计算和前一位置(u,v0)只是多了一列新的数据(图5中的新列)和少了一列旧的数据(图5中的旧列),因此在当前给定搜索位置(u,v0+1),可以通过时序控制逻辑控制实时图数据缓冲RAM21(RRAM2)同时依次逐行输出实时图中模板图重叠区域相对于前一个搜索位置(u,v0)新进的一列数据(对应实时图中第v0+N列)和刚移出的一列数据(对应实时图中第v0列),由减法器作差后,对当前差值逐行求和,并且与前一列已经计算出的Acc(u,v0)进行相加即可获得当前搜索位置处的Acc(u,v0+1)。即
向前推移可以得到:
因此Acc(u,v0+1)可由累加器从第2列开始逐行累加作差值,然后由加法器与已经计算出的当前行第1列搜索位置处的Acc(u,0)相加得到。
因此后续列的实时图灰度值总和Acc(u,v)由Acc计算模块4中的与A2cc(u,v)计算模块5共用的内部实时图数据缓冲RAM21(RRAM2)、一个减法器22和一个累加器23(Accu4)组成。内部实时图数据缓冲RAM21(RRAM2)的两个输出端连接到减法器22的输入端,减法器22的输出端连接到累加器23的输入端。累加器的输出加上第1列累加1模块24的输出即可得到后续列的实时图灰度值总和Acc(u,v)。
2)后续A2cc计算
从每一行的第2个搜索位置开始,A2cc(u,v)以与Acc(u,v)同样的方式实现。在当前给定搜索位置(u,v0+1),与A2cc(u,v)同时通过时序控制逻辑控制实时图数据缓冲RAM21(RRAM2)同时依次逐行输出实时图中模板图重叠区域相对于前一个搜索位置(u,v0)新进的一列数据(对应实时图中第v0+N列)和刚移出的一列数据(对应实时图中第v0列),求平方后由减法器作差,然后对当前差值逐行求和,并且与前一列搜索位置处的该累加器结果值求和,最后由加法器与已经计算出的当前行第1列搜索位置处的A2cc(u,0)相加即可获得当前列的A2cc(u,v)。
因此后续列的实时图灰度值总和A2cc(u,v)由A2cc计算模块5中的与Acc(u,v)计算模块4共用的内部实时图数据缓冲RAM21(RRAM2)、2个平方运算模块26、一个减法器25和一个累加器29(Accu5)组成。内部实时图数据缓冲RAM21(RRAM2)的两个输出端连接到两个平方运算26输入端,平方运算26输出端连接到减法器25的输入端,减法器25的输出端连接到累加器20的输入端。累加器的输出加上第1列累加2模块28的输出即可得到后续列的实时图灰度值总和A2cc(u,v)。
RRAM2可由双端口RAM实现,以实现同时读出两个数据;在没有双端口RAM时可由两块RAM实现。
3)ABcc计算模块
模板图与实时图当前搜索位置的灰度值乘积总和的计算,由ABcc计算模块3实现。
由归一化相关系数公式,采用模板图最大的行数(Mmax)个并行的乘法通道来进行并行运算。因此通过合理的时序控制(M≤Mmax)在一个时钟周期里就可以计算M个乘累加,这样,在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)从Mmax个模板图缓冲块中选出当前的第1块来与第1个实时图缓冲块对应,选出当前的第2块来与第2个实时图缓冲块对应,以此类推。总共需要Mmax个这样的多路选通开关来对数据进行重排。通过选通对实时图和模板图进行重排都是可以的,由于模板图的缓冲块较小,从而其布线路径会简单一些,因此本发明采用对模板图进行重排,如图1所示。
ABcc计算模块3由实时图RAM缓冲块20、模板图RAM缓冲块15、多路选通开关16、乘法器17、并加模块18和累加器19组成。模板图RAM缓冲块15的所有输出端连接到一个多路选通开关16的输入,多路选通开关的输出连接到的一个乘法器17的一端,乘法器17的另一端对应连接到存储实时图像的RAM缓冲块的输出端。通过采用模板图最大行数(Mmax)个这样的并行通道进行并行运算,然后各个通道输出端连接到一个并加模块18(PAdd1),最终连接到一个累加模块19(Accu3)上。
在具体计算时,时序控制模块8控制选通开关16使得对应的模板图数据与实时图进行乘积运算,改变模板图和实时图RAM缓冲块的地址,逐列输出模板图和实时图的对应数据进行乘积运算,然后经过并加模块18对当前列各行数据进行求和,而后由累加模块19对并加模块18输出的结果逐列求和后,获得当前列各个搜索位置的
本发明采用了先并加后累加,其结果与先累加然后并加的方式结果是一样的,但前者能够省掉M-1个重复的累加器(Accu),如图6(b)所示。从而降低了资源的消耗。
其中的并加结构如图7所示,多个输入通道在一步操作中就可以获得相加结果,在加入延迟寄存器缓冲后,并加可以实现流水输出。
4)归一化相关系数后续计算
归一化相关系数后续计算是由后续计算模块6实现的,在 计算出来以后,相应的可以由乘法器和加、减法器计算出来。归一化相关系数公式的分母先由两个求根模块33和34分别进行求根运算,然后由乘法器模块35进行相乘,这样可以降低数据宽度。归一化相关系数公式的分子和分母首先由定点浮点转换模块30和31转化为浮点,最终通过一个浮点除法运算模块32进行浮点除法就可以得到浮点格式的归一化相关系数。
搜索位置第1行归一化相关系数的计算,是模板图像第1到M行与实时图第1到M行数据对应计算,搜索位置第1列归一化相关系数的计算为模板图像第1到N列与实时图像第1到N列数据对应计算,同时计算第2列的模板图像在实时图像中右移一列,并计算该处的同时计算第3列的此时后续的求平方根、浮点除法等后续运算同步流水进行,以此重复,直到第一行归一化相关系数计算完成。根据实际需要可选择32位浮点或者64位浮点。
(3)读入新一行的实时图数据到数据已经无效的内部RAM缓冲块,同时该新一行实时图数据读入到用于计算实时图灰度值总和和实时图灰度值平方总和的实时图数据缓冲RAM中覆盖已经无效的数据,同时计算当前行第1列的实时图灰度值总和实时图灰度值平方总和值。
由步骤2中所述,从外部RAM读入新一行的实时图数据到相应的内部RAM缓冲块中,完成第一行相关系数计算后,读入一行新的实时图数据覆盖不用的实时图RAM块数据,在后续各行计算时需要通过时序控制模块8重新切换多路选通开关使模板图RAM缓冲块输出与实时图RAM缓冲块输出顺序对应。同时该新一行实时图数据读入到实时图数据缓冲RAM中覆盖已经无效的数据。
在读入实时图新一行数据时,同时由步骤2中所述方式计算出当前行第1列的实时图灰度值总和和实时图灰度值平方总和的值,后续列实时图灰度值总和与实时图灰度值平方总和按步骤2中所述方式依次计算得出。
(4)采用步骤2、步骤3相同的方式,依次计算出后续各行归一化相关系数。
计算实时图像第2行至第K-M+1行归一化相关系数,第一行相关系数计算完成后,依次读入一行新的实时图数据覆盖不用的实时图RAM缓冲块数据和对应的实时图数据缓冲RAM中的数据,并且通过时序控制模块重新选择模板图RAM缓冲块输出多路选通开关使其与之对应,这样相当于模板图像在待匹配图像中下移一行,然后按照步骤2和步骤3方式进行计算,依次得到每行的归一化相关系数。
在接收到外部微处理器输入参数和启动命令系统启动以后,首先进行初始化,并且设置m=0,n=0,如图2所示的工作步骤可具体化和细分为下述串行的6步操作完成,其中每一步的子过程是同步进行的。
第1步:(1.1)模板图数据由外部模板图实时图数据存储器(Exter-RORAM)读入到内部模板图RAM缓冲块ORAM[0..M-1]中;同时(1.2)由Bcc计算模块进行模板图累加计算Bcc;(1.3)由B2cc计算模块累加(Bij)2计算B2cc;
第2步:(2.1)第1~M行实时图数据由模板图实时图数据存储器(Exter-RORAM)读入到对应的内部RAM缓冲块RRAM[0..M-1])中,同时存储到实时图数据缓冲RAM(RRAM2)相应位置中;同时(2.2)由第1列累加1模块和第1列累加2模块计算Acc(0,0)和A2cc(0,0);
第3步:(3.1)利用Acc计算模块和A2cc计算模块计算Acc(m,n)、A2cc(m,n);同时(3.2)利用ABcc计算模块计算ABcc(m,n);
第4步:n=n+1,如果n<L-N+1,返回第3步,否则继续执行到第5步;
第5步:m=m+1,如果m<K-M+1,继续执行到第6步,否则结束整个计算流程,并且修改完成状态寄存器。
第6步:(6.1)从外部模板图实时图数据存储器(Exter-RORAM)读入实时图第(M+m)行数据到相应的内部RAM缓冲块中;同时存储到实时图数据缓冲RAM(RRAM2)相应位置中;同时(6.2)分别由第1列累加1模块和第1列累加2模块计算Acc(m,1)和A2cc(m,1)值;计算上一列的归一化相关系数C(m,n)并且存入外部结果存储器中(Exter-RAM);继续执行到第3步。
其中本发明中外部实时图和模板图数据存储在一块RAM模板图实时图数据存储器(Exter-RORAM)中,此时读取分为两步;也可考虑存储在两块RAM中的情形,此时可同时进行读取。前两步对应技术方案的步骤1。第3步对应步骤2。第4步和第5步由时序控制相应后续列和行的计算,对应步骤4。第6步对应步骤3。
由上述步骤可知,归一化相关系数计算需要K*L+M*N+(K-M+1)*(L-N+1)*(N)个时钟周期,因此总的计算时间为(K*L+M*N+(K-M+1)*(L-N+1)*(N))/fclk,fclk为系统工作频率。
图8为一种基于归一化相关系数的高速并行模板匹配方法的装置,该装置由高速相关运算器10、模板图实时图数据存储器9、结果存储器11和微处理器37构成。高速相关运算器10与模板图实时图数据存储器9、结果存储器11、微处理器37相连,模板图实时图数据存储器9、结果存储器11也与微处理器37相连。如图1所示,高速相关运算器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。模板图灰度值求和模块2由一个累加器14组成,模板图灰度值平方求和模块1由一个平方运算模块12和一个累加器13相连而成。实时图灰度值求和模块4由与实时图灰度值平方求和模块5共用的实时图数据缓冲RAM21、第1列累加模块24、减法器22、累加器23和加法器组成。实时图灰度值平方求和模块5由与实时图灰度值平方求和模块4共用的实时图数据缓冲RAM21、第1列累加模块28、平方运算模块26、27、38、减法器25、累加器29和加法器组成。实时图模板图灰度值乘积求和模块3由实时图RAM缓冲块20、模板图RAM缓冲块15、多路选通开关16、乘法器17、并加模块18和累加器19组成。后续计算模块由乘法器、加、减法器和分子分母定点浮点转换模块(30、31)、分母方根运算模块(33、34)、浮点除法运算模块32组成。
高速模板匹配装置工作流程如下:首先微处理器37把原始模板图和实时图数据存入模板图实时图数据存储器9中,然后向高速相关运算器10输入图像的尺寸参数,而后输入启动命令启动归一化相关运算。在运算过程中通过寄存器访问的方式查询运算的进程状态。在运算完成以后,微处理器37会从高速相关运算器10收到完成的中断信号。为可靠起见,微处理器37进一步查询高速相关运算器10的完成标志,在确保完成后从结果存储器11读取归一化相关系数计算结果进行后续处理工作。
高速模板匹配装置中所包含的高速相关运算器可以利用FPGA实现,也可利用VLSI实现。高速相关运算器中实时图像以及模板图像的行数和列数都是可以由外部微处理器输入的可变参数,而最终实现的并行通道数目,包括内部实时图和模板图RAM缓冲块的数目,是由任务要求决定的最大的行数。
下面是算法的具体实施实例。
本发明的实施实例是以Altera公司的现场可编程门阵列Stratix II系列EP2S90F780I4芯片为平台。图像灰度值为8位,模板图和实时图的大小参数是可变的:2≤M≤80,2≤N≤80,2≤K≤512,2≤L≤512。相应的,我们采用模板图最大的行数80作为并行通道数。当前针对最大图像参数进行实施。采用Quartus II8.0sp1软件作为基本的逻辑分析、综合、逻辑布局布线工具,采用Verilog和VHDL语言混合硬件编程的方式进行逻辑设计。系统的全局时钟频率采用70MHz,由PLL根据外部输入的20MHz时钟产生。具体采用32位浮点归一化相关系数输出。
依据本发明,具体模板匹配实例如下实施。
1)依据两个图像的具体大小,搭建图像匹配系统,
高速相关运算器按照图1在FPGA芯片上实现,完成归一化相关系数的计算。模板图实时图的RAM缓冲块由实例化RAM实现,实时图数据缓冲RAM由实例化双端口RAM实现,多路选通开关、乘法运算、平方运算、加法运算、减法运算、求方根运算、定点浮点转换、浮点除法运算都由Qartus II根据所用的FPGA进行实例化。时序控制模块通过状态机的方式控制整个系统的运行。
2)采用Verilog和VHDL语言混合编程的方式进行逻辑设计
步骤1:读取模板图像80*80个数据以及实时图像前80行的80*512个数据并分别存储到对应的RAM缓冲块,前80行实时图像同时依次存入实时图数据缓冲RAM中,同时计算Bcc和B2cc和第1行第1列搜索位置上的Acc和A2cc。
对于模板图像和实时图像,分别设置80个RAM缓冲块,每一行信息存储到一个RAM缓冲块中,由于灰度值为8位二进制数据,每个RAM缓冲块的大小分别为80*8(位)和512*8(位),前80行实时图像同时依次存入实时图数据缓冲RAM中,总计80*512*8(位)。对于实时图,开始时读入的是第1至80行数据。Bcc在模板图像数据读入过程中通过Bcc计算模块计算出来,同时B2cc在模板图像数据读入过程中通过B2cc计算模块计算出来。第1行第1列搜索位置上的Acc和A2cc由第1列累加1模块和第1列累加2模块实现。
步骤2:计算当前行各列的Acc(m,n)和A2cc(m,n),同时计算ABcc(m,n)。
对于每一行从第2列开始,Acc和A2cc可由时序控制模块控制Acc计算模块和A2cc计算模块实现,具体为从实时图数据缓冲RAM(RRAM2)中顺序读出新进的一列数据和移出的旧的一列数据相减并且对结果值进行累加,然后与当前行第一列的Acc进行求和计算。
对于ABcc的计算,时序控制模块控制模板图和实时图每一个RAM缓冲块同时读出一列数据,同时控制选通开关使得对应的模板图数据与实时图进行乘积运算,然后对所有行乘积结果同时求和的并加以及对并加结果逐列求和的累加后获得。
步骤3:从外部RAM读入新一行的实时图数据到相应的内部RAM缓冲块中,同时存入到实时图数据缓冲RAM中,同时计算当前行第1列的Acc(m,1)和A2cc(m,1)值,计算上一列的相关结果。
对于实时图像,当进行第2行搜索时,新来的第M+1行实时图数据覆盖已经不用的第1个缓冲块。以此类推,当进行第3行搜索时,新来的一行实时图数据可以覆盖第2个已经不用的RAM缓冲块,此时第1个实时图缓冲块对应第M-1个模板图缓冲块(ORAM[M-2]),第2个实时图缓冲块对应第M个模板图缓冲块(ORAM[M-1]),第3个实时图缓冲块才对应模板图的第1个缓冲块(ORAM[0])。时序控制模块控制选通开关使模板图数据与实时图数据对应。
当前行第1列搜索位置上Acc(m,1)和A2cc(m,1)由第1列累加1模块和第1列累加2模块在新一行实时图数据读入过程中同时计算出来。
步骤4:重复(2)~(3),依次计算直到433行数据计算完毕。
3)资源消耗、内核速度及时间消耗
由Qartus II时序分析总结和编译报告,资源利用情况和FPGA内核最大可达的时钟频率如表1所示。可见,在包含了求平方根、定点到浮点转换、浮点除法等运算情况下,整个FPGA芯片占用的逻辑资源不多,因而本发明所提方案是完全可以实现的。
表1 资源利用情况及最大可达的时钟运行速度
对于大小为80×80的模板图和大小为512×512的实时图,采用70MHz系统全局时钟频率下,模板图和实时图分别读入的情况下,高速相关运算器完成所有搜索位置归一化相关系数运算所用计算时间(包含外部RAM数据读取时间)为:
(K*L+M*N+(K-M+1)*(L-N+1)*(N))/fclk=
(512*512+80*80+(512-80+1)*(512-80+1)*N)/70000000=218ms。
由于采用80个并行通道,高速相关运算器仅用218ms就可以完成。因此在可编程逻辑器件上并行实现基于归一化相关系数的模板匹配可大大节约时间,提高匹配速度。
4)Quartus波形仿真结果
为了验证所提出的高速相关运算器的基本功能,另外选用大小为17×17的模板图和大小为40×40的实时图,17和40是输入的可变参数。实时图数据为由0开始递增的数据,而模板图数据是由64开始递增的数据。当数据超过当前位宽所能表示的最大值时,不考虑溢出的位数,也就是数据将在0~255的范围之内。
具体的时序仿真波形如图9所示。其中,端口Bcc,B2cc,Acc,A2cc和ABcc与前面定义的相同,输出端口Result_S,Result_E和Result_M分别表示浮点格式的NCC计算结果的符号位、指数项和尾数项。可以看出,除了一点精度上的损失外,由Quartus II8.0得到的仿真结果与如表2所示的用Matlab所计算的结果是一致的。
表2 由Matlab计算得到的结果
数据输出 Result_M Acc A2cc ABcc
0 7.2717890e+006 33608 5434712 4277336
1 5.9456620e+006 33641 5436681 4266280
2 4.6373932e+006 33674 5438716 4255480
3 3.3471433e+006 33707 5440817 4244936
4 2.0750735e+006 33740 5442984 4234648
5 8.2134461e+005 33773 5445217 4224616
5)实际的实验结果
在实际系统中,基于归一化相关系数的模板匹配高速并行实现装置的基本构成如图10所示。图中,Exter-RORAM、Exter-RAM分别为缓存模板图实时图数据和运算结果的外部RAM。微处理器采用ADI公司的DSP芯片TS201。Addr和Data为地址和数据总线,RD、WR、CS为外部RAM读写控制信号。
首先TS201作为核心处理器把模板图实时图数据存入外部双端口RAM(Exter-RORAM)中,然后向FPGA输入图像的尺寸参数,其后输入启动命令启动模板匹配运算。在运算完成以后,TS201会收到完成的中断信号,为可靠起见,TS201需要查询FPGA的完成标志,在确保完成以后进行后续工作。
在不同参数情况下用不同实际图像数据对该装置进行了长期的稳定性测试,归一化相关系数计算的结果与实际计算值相一致,并且能够稳定可靠的工作。
同时还利用TS201对系统运算时间进行了评估,处理时间和前面的理论计算结果一致。对于大小为80×80的模板图和大小为512×512的实时图,70MHz系统全局时钟频率下,所用时间为218ms。
因为FPGA通常用作VLSI专用集成电路的验证和开发平台,因此所提出的高速相关运算器可以进一步由VLSI实现。

Claims (1)

1.一种基于归一化相关系数的模板匹配高速并行实现方法,其特征在于,所述方法由现场可编程门阵列FPGA或超大规模集成电路VLSI通过并行的方式计算归一化互相关系数,包括如下步骤:
步骤1:读入实时图和模板图数据到对应的内部RAM缓冲块中,同时实时图数据存储到用于计算实时图灰度值总和和实时图灰度值平方总和的实时图数据缓冲RAM中,同时进行模板图灰度值总和模板图灰度值平方总和的计算和第1行第1列搜索位置处实时图灰度值总和实时图灰度值平方总和的计算;
步骤2:计算第1行后续各列搜索位置的实时图灰度值总和同时计算当前位置实时图灰度值平方总和搜索位置第1行各列模板图实时图灰度值乘积总和及归一化相关系数;
步骤3:读入新一行的实时图数据到数据已经无效的内部RAM缓冲块,同时该新一行实时图数据读入到用于计算实时图灰度值总和和实时图灰度值平方总和的实时图数据缓冲RAM中覆盖已经无效的数据,同时计算当前行第1列的实时图灰度值总和、实时图灰度值平方总和值;
步骤4:采用上述步骤2、步骤3相同的方式,依次计算出后续各行归一化相关系数;
所述模板匹配高速并行方法的装置中,高速相关运算器(10)的归一化相关系数计算模块(36)包括模板图灰度值求和模块(2)、模板图灰度值平方求和模块(1)、实时图灰度值求和模块(4)、实时图灰度值平方求和模块(5)和实时图模板图灰度值乘积求和模块(3)、后续计算模块(6);模板图灰度值求和模块(2)由一个累加器(14)组成,模板图灰度值平方求和模块(1)由一个平方运算模块(12)和一个累加器(13)相连而成;实时图灰度值求和模块(4)由与实时图灰度值平方求和模块(5)共用的实时图数据缓冲RAM(21)、第1列累加模块(24)、减法器(22)、累加器(23)和加法器组成;实时图灰度值平方求和模块(5)由与实时图灰度值平方求和模块(4)共用的实时图数据缓冲RAM(21)、第1列累加模块(28)、平方运算模块(26、27、38)、减法器(25)、累加器(29)和加法器组成;实时图模板图灰度值乘积求和模块(3)由实时图RAM缓冲块(20)、模板图RAM缓冲块(15)、多路选通开关(16)、乘法器(17)、并加模块(18)和累加器(19)组成;后续计算模块由乘法器、加法器、减法器和分子分母定点浮点转换模块(30、31)、分母方根运算模块(33、34)、浮点除法运算模块(32)组成;
所述模板匹配高速并行装置的工作流程为:首先微处理器(37)把原始模板图和实时图数据存入模板图实时图数据存储器(9)中,然后向高速相关运算器(10)输入图像的尺寸参数,而后输入启动命令启动归一化相关运算;在运算过程中通过寄存器访问的方式查询运算的进程状态;在运算完成以后,微处理器(37)会从高速相关运算器(10)收到完成的中断信号,为可靠起见,微处理器(37)进一步查询高速相关运算器(10)的完成标志,在确保完成以后从结果存储器读取归一化相关系数计算结果进行后续处理工作;
所述方法进行下述变量定义: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)表示当前搜索位置实时图模板图灰度值乘积总和,所述归一化相关系数表示为:
<mrow> <mi>C</mi> <mrow> <mo>(</mo> <mi>u</mi> <mo>,</mo> <mi>v</mi> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mrow> <mo>&amp;lsqb;</mo> <mi>M</mi> <mo>&amp;CenterDot;</mo> <mi>N</mi> <mo>&amp;CenterDot;</mo> <mi>A</mi> <mi>B</mi> <mi>c</mi> <mi>c</mi> <mrow> <mo>(</mo> <mi>u</mi> <mo>,</mo> <mi>v</mi> <mo>)</mo> </mrow> <mo>-</mo> <mi>A</mi> <mi>c</mi> <mi>c</mi> <mrow> <mo>(</mo> <mi>u</mi> <mo>,</mo> <mi>v</mi> <mo>)</mo> </mrow> <mi>B</mi> <mi>c</mi> <mi>c</mi> <mo>&amp;rsqb;</mo> </mrow> <mrow> <msup> <mrow> <mo>{</mo> <mi>M</mi> <mo>&amp;CenterDot;</mo> <mi>N</mi> <mo>&amp;CenterDot;</mo> <mi>A</mi> <mn>2</mn> <mi>c</mi> <mi>c</mi> <mrow> <mo>(</mo> <mi>u</mi> <mo>,</mo> <mi>v</mi> <mo>)</mo> </mrow> <mo>-</mo> <msup> <mrow> <mo>(</mo> <mi>A</mi> <mi>c</mi> <mi>c</mi> <mo>(</mo> <mi>u</mi> <mo>,</mo> <mi>v</mi> <mo>)</mo> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>}</mo> </mrow> <mrow> <mn>1</mn> <mo>/</mo> <mn>2</mn> </mrow> </msup> <msup> <mrow> <mo>{</mo> <mi>M</mi> <mo>&amp;CenterDot;</mo> <mi>N</mi> <mo>&amp;CenterDot;</mo> <mi>B</mi> <mn>2</mn> <mi>c</mi> <mi>c</mi> <mo>-</mo> <msup> <mrow> <mo>(</mo> <mi>B</mi> <mi>c</mi> <mi>c</mi> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>}</mo> </mrow> <mrow> <mn>1</mn> <mo>/</mo> <mn>2</mn> </mrow> </msup> </mrow> </mfrac> <mo>;</mo> </mrow>
其中M,N分别表示模板的行和列数;
步骤1所述的模板图数据读入到对应的内部RAM缓冲块,是将每一行N列的灰度值存储到一个RAM块中,共存入M行,即采用了M个RAM块,每个RAM块包含N个存储单元;实时图数据读入到对应的内部RAM缓冲块,是将每一行L列的灰度值存储到一个RAM块中,共存入M行,同样采用了M个RAM块,每个RAM块包含L个存储单元;实时图数据存储到用于计算实时图灰度值总和和实时图灰度值平方总和的实时图数据缓冲RAM中,总计存入M行N列数据,即该块RAM包含M×N个存储单元;
步骤1所述的模板图灰度值总和的计算在读入模板图数据时,通过时序控制模块控制一个累加器实现;累加器的输入端连接到模板图数据输入端,其输出即为模板图灰度值总和;
步骤1所述的模板图灰度值平方总和的计算在读入模板图数据时,通过时序控制模块控制一个平方运算模块和累加器实现;平方运算模块的输入端连接到模板图数据输入端,平方运算模块的输出连接到累加器的输入端,累加器输出即为模板图灰度值平方总和;
步骤1中所述的第1行第1列搜索位置的实时图灰度值总和的计算,是通过时序控制模块控制一个行数据累加模块在每一行实时图数据读入时,对实时图第1行第1列搜索位置处每一行数据进行累加,然后通过一个列累加器对这些行数据累加模块输出结果逐列进行累加,并且和经过M步,即模板图行数步延迟的列累加器累加结果相减获得;
步骤1中所述的第1行第1列搜索位置的实时图灰度值平方总和的计算,是通过时序控制模块控制一个行数据累加模块在每一行实时图数据读入时,对实时图第1行第1列搜索位置处每一行数据平方后进行累加,然后通过一个列累加器对这些行数据累加模块输出结果逐列进行累加,并且和经过M步,即模板图行数步延迟的列累加器累加结果相减获得;
步骤2中后续各列每一个实时图灰度值总和计算,是从搜索位置第2列开始,通过时序控制模块控制实时图数据缓冲RAM同时依次逐行输出实时图中模板图重叠区域相对于前一个搜索位置新进的一列数据和刚移出的一列数据,由减法器作差后,通过累加器逐行求和,并且与前一列搜索位置处的该累加器结果值求和,即该累加器从第2列开始保留所有的累加值,然后由加法器与已经计算出的当前行第1列搜索位置处的相加即可获得当前列的
步骤2中后续各列每一个实时图灰度值平方总和计算,是从搜索位置第2列开始,通过时序控制模块控制实时图数据缓冲RAM同时依次逐行输出实时图中模板图重叠区域相对于前一个搜索位置新进的一列数据和刚移出的一列数据,分别由平方运算模块求平方后由减法器作差,然后通过累加器逐行求和,并且与前一列搜索位置处的该累加器结果值求和,即该累加器从第2列开始保留所有的累加值,最后由加法器与已经计算出的当前行第1列搜索位置处的相加即可获得当前列的
步骤2中的模板图与实时图当前搜索位置的灰度值乘积总和的计算,具体实现为:模板图像RAM缓冲块的所有输出端连接到一个多路选通开关,多路选通开关的输出连接到乘法模块中的一个乘法器的一端,乘法器的另一端对应连接到实时图像RAM缓冲块的输出端;采用模板图最大行数(M)个这样的并行通道进行并行运算,然后各个通道输出端连接到一个并加模块的输入端,并加模块的输出端连接到一个累加模块;在具体计算时,时序控制模块控制选通开关使得对应的模板图数据与实时图数据进行乘积运算,改变模板图像和实时图像RAM缓冲块的地址,逐列输出模板图和实时图的对应数据进行乘积运算,然后经过并加模块对当前列各行数据进行求和,而后由累加模块对并加模块输出的结果逐列求和后,获得当前列各个搜索位置的
步骤2所述计算归一化相关系数是在 计算出来以后,相应的 可以由乘法器、平方运算、加法器和减法器计算出来;归一化相关系数计算公式中的分母由两个求根模块进行求根运算,然后再对两者进行相乘获得;然后归一化相关系数计算公式中的分子和分母由定点转化为浮点,最终通过一个浮点除法运算得到浮点数据类型的归一化相关系数;
步骤2所述的搜索位置第1行归一化相关系数的计算,是模板图像第1到M行与实时图第1到M行数据对应计算,搜索位置第1列归一化相关系数的计算为模板图像第1到N列与实时图像第1到N列数据对应计算,同时计算第2列的模板图像在实时图像中右移一列,并计算该处的同时计算第3列的此时后续的求平方根、浮点除法后续运算同步流水进行,以此重复,直到第一行归一化相关系数计算完成;
步骤3所述读入新一行的实时图数据到相应的内部RAM缓冲块中,为第一行相关系数计算完成后,读入一行新的实时图数据覆盖不用的实时图RAM块数据,在后续各行计算时需要通过时序控制模块重新切换多路选通开关使模板图RAM缓冲块输出与实时图RAM缓冲块输出顺序变化对应,同时该新一行实时图数据读入到实时图数据缓冲RAM中覆盖已经无效的数据;
步骤3中所述在读入实时图新一行数据时,同时由前述方式相应的计算出当前行第1列的实时图灰度值总和的值,后续列实时图灰度值总和亦是按前述方式依次计算得出;
步骤3中所述在读入实时图新一行的数据时,此时会由前述方式相应的计算出当前行第1列的实时图灰度值平方总和的值,后续列实时图灰度值平方总和亦是按前述方式依次计算得出;
步骤4所述计算出后续各行归一化互相关系数,是指计算实时图像第2行至第K-M+1行归一化相关系数,第一行相关系数计算完成后,依次读入一行新的实时图数据覆盖不用的实时图RAM缓冲块数据和对应的实时图数据缓冲RAM中的数据,并且通过时序控制模块重新选择模板图RAM缓冲块输出多路选通开关使其与之对应,这样相当于模板图像在待匹配图像中下移一行,然后按照步骤2和步骤3方式进行计算,依次得到每行的归一化相关系数;
所述装置是由高速相关运算器(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)中读取数据;
所述模板的匹配方法用的是归一化相关系数,所用的归一化相关系数公式如下:
<mfenced open = "" close = ""> <mtable> <mtr> <mtd> <mrow> <mi>C</mi> <mrow> <mo>(</mo> <mi>u</mi> <mo>,</mo> <mi>v</mi> <mo>)</mo> </mrow> <mo>=</mo> <mfrac> <mrow> <mi>&amp;Sigma;</mi> <mi>&amp;Sigma;</mi> <mo>&amp;lsqb;</mo> <mi>A</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>+</mo> <mi>u</mi> <mo>,</mo> <mi>j</mi> <mo>+</mo> <mi>v</mi> <mo>)</mo> </mrow> <mo>-</mo> <mover> <mrow> <mi>A</mi> <mrow> <mo>(</mo> <mi>u</mi> <mo>,</mo> <mi>v</mi> <mo>)</mo> </mrow> </mrow> <mo>&amp;OverBar;</mo> </mover> <mo>&amp;rsqb;</mo> <mo>&amp;times;</mo> <mo>&amp;lsqb;</mo> <mi>B</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>)</mo> </mrow> <mo>-</mo> <mover> <mi>B</mi> <mo>&amp;OverBar;</mo> </mover> <mo>&amp;rsqb;</mo> </mrow> <mrow> <msup> <mrow> <mo>{</mo> <mi>&amp;Sigma;</mi> <mi>&amp;Sigma;</mi> <msup> <mrow> <mo>&amp;lsqb;</mo> <mi>A</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>+</mo> <mi>u</mi> <mo>,</mo> <mi>j</mi> <mo>+</mo> <mi>v</mi> <mo>)</mo> </mrow> <mo>-</mo> <mover> <mrow> <mi>A</mi> <mrow> <mo>(</mo> <mi>u</mi> <mo>,</mo> <mi>v</mi> <mo>)</mo> </mrow> </mrow> <mo>&amp;OverBar;</mo> </mover> <mo>&amp;rsqb;</mo> </mrow> <mn>2</mn> </msup> <mo>}</mo> </mrow> <mrow> <mn>1</mn> <mo>/</mo> <mn>2</mn> </mrow> </msup> <msup> <mrow> <mo>{</mo> <mi>&amp;Sigma;</mi> <mi>&amp;Sigma;</mi> <msup> <mrow> <mo>&amp;lsqb;</mo> <mi>B</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>)</mo> </mrow> <mo>-</mo> <mover> <mi>B</mi> <mo>&amp;OverBar;</mo> </mover> <mo>&amp;rsqb;</mo> </mrow> <mn>2</mn> </msup> <mo>}</mo> </mrow> <mrow> <mn>1</mn> <mo>/</mo> <mn>2</mn> </mrow> </msup> </mrow> </mfrac> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mo>=</mo> <mfrac> <mrow> <mo>&amp;lsqb;</mo> <mi>M</mi> <mi>N</mi> <mo>&amp;CenterDot;</mo> <mi>&amp;Sigma;</mi> <mi>&amp;Sigma;</mi> <mi>A</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>+</mo> <mi>u</mi> <mo>,</mo> <mi>j</mi> <mo>+</mo> <mi>v</mi> <mo>)</mo> </mrow> <mi>B</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>)</mo> </mrow> <mo>-</mo> <mi>&amp;Sigma;</mi> <mi>&amp;Sigma;</mi> <mi>A</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>+</mo> <mi>u</mi> <mo>,</mo> <mi>j</mi> <mo>+</mo> <mi>v</mi> <mo>)</mo> </mrow> <mi>&amp;Sigma;</mi> <mi>&amp;Sigma;</mi> <mi>B</mi> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>)</mo> </mrow> <mo>&amp;rsqb;</mo> </mrow> <mrow> <msup> <mrow> <mo>{</mo> <mi>M</mi> <mi>N</mi> <mo>&amp;CenterDot;</mo> <mi>&amp;Sigma;</mi> <mi>&amp;Sigma;</mi> <mi>A</mi> <msup> <mrow> <mo>(</mo> <mi>i</mi> <mo>+</mo> <mi>u</mi> <mo>,</mo> <mi>j</mi> <mo>+</mo> <mi>v</mi> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>-</mo> <msup> <mrow> <mo>(</mo> <mi>&amp;Sigma;</mi> <mi>&amp;Sigma;</mi> <mi>A</mi> <mo>(</mo> <mi>i</mi> <mo>+</mo> <mi>u</mi> <mo>,</mo> <mi>j</mi> <mo>+</mo> <mi>v</mi> <mo>)</mo> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>}</mo> </mrow> <mrow> <mn>1</mn> <mo>/</mo> <mn>2</mn> </mrow> </msup> <msup> <mrow> <mo>{</mo> <mi>M</mi> <mi>N</mi> <mo>&amp;CenterDot;</mo> <mi>&amp;Sigma;</mi> <mi>&amp;Sigma;</mi> <mi>B</mi> <msup> <mrow> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>-</mo> <msup> <mrow> <mo>(</mo> <mi>&amp;Sigma;</mi> <mi>&amp;Sigma;</mi> <mi>B</mi> <mo>(</mo> <mi>i</mi> <mo>,</mo> <mi>j</mi> <mo>)</mo> <mo>)</mo> </mrow> <mn>2</mn> </msup> <mo>}</mo> </mrow> <mrow> <mn>1</mn> <mo>/</mo> <mn>2</mn> </mrow> </msup> </mrow> </mfrac> </mrow> </mtd> </mtr> </mtable> </mfenced>
A表示实时图,B表示模板图,其尺寸分别为K×L和M×N个像素,(u,v)为任一搜索位置,0≤u≤K-M,0≤v≤L-N,∑∑表示 为模板图像的灰度平均值,为当前搜索位置(u,v)处实时图与模板图重叠部分的灰度平均值。
CN201310208097.0A 2013-05-28 2013-05-28 基于归一化相关系数的模板匹配高速并行实现方法和装置 Expired - Fee Related CN103310228B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310208097.0A CN103310228B (zh) 2013-05-28 2013-05-28 基于归一化相关系数的模板匹配高速并行实现方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310208097.0A CN103310228B (zh) 2013-05-28 2013-05-28 基于归一化相关系数的模板匹配高速并行实现方法和装置

Publications (2)

Publication Number Publication Date
CN103310228A CN103310228A (zh) 2013-09-18
CN103310228B true CN103310228B (zh) 2017-09-29

Family

ID=49135422

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310208097.0A Expired - Fee Related CN103310228B (zh) 2013-05-28 2013-05-28 基于归一化相关系数的模板匹配高速并行实现方法和装置

Country Status (1)

Country Link
CN (1) CN103310228B (zh)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105426918B (zh) * 2015-11-23 2019-01-08 南京航空航天大学 归一化相关图像模板匹配高效实现方法
WO2017165191A2 (en) * 2016-03-23 2017-09-28 The Procter & Gamble Company Imaging method for determining stray fibers
WO2018103736A1 (en) * 2016-12-09 2018-06-14 Beijing Horizon Information Technology Co., Ltd. Systems and methods for data management
CN107452020B (zh) * 2017-08-04 2021-04-06 河北汉光重工有限责任公司 一种自适应模板匹配的抗遮挡跟踪方法
CN107609576A (zh) * 2017-08-23 2018-01-19 南京邮电大学 融合大模板图的模板匹配并行实现方法及装置
CN108089839A (zh) * 2017-10-11 2018-05-29 南开大学 一种基于fpga实现互相关运算的方法
CN107886118A (zh) * 2017-10-27 2018-04-06 北京中科慧眼科技有限公司 双目立体相机图像区域匹配优化方法、设备及存储介质
CN108399630B (zh) * 2018-01-22 2022-07-08 北京理工雷科电子信息技术有限公司 一种复杂场景下感兴趣区域内目标快速测距方法
CN108563421B (zh) * 2018-04-20 2021-09-03 广东工业大学 Fpga运算电路和斯皮尔曼秩次相关系数的求解方法
CN108595369B (zh) * 2018-04-28 2020-08-25 天津芯海创科技有限公司 算式并行计算装置及方法
CN110288649A (zh) * 2019-01-15 2019-09-27 南京航空航天大学 归一化相关图像模板匹配多核并行高效实现方法和装置
CN110210565B (zh) * 2019-06-05 2021-04-30 中科新松有限公司 归一化互相关图像模板匹配实现方法
CN114937037B (zh) * 2022-07-20 2022-11-04 武汉中导光电设备有限公司 产品缺陷检测方法、装置、设备及可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6088483A (en) * 1997-07-02 2000-07-11 International Business Machines Corporation Image processing method for system employing pattern matching
CN101576961A (zh) * 2009-06-16 2009-11-11 天津大学 高速的图像匹配方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6088483A (en) * 1997-07-02 2000-07-11 International Business Machines Corporation Image processing method for system employing pattern matching
JP3166905B2 (ja) * 1997-07-02 2001-05-14 インターナショナル・ビジネス・マシーンズ・コーポレ−ション パターンマッチングによる画像処理方法およびシステム
CN101576961A (zh) * 2009-06-16 2009-11-11 天津大学 高速的图像匹配方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
边缘增强图像互相关模板匹配的并行架构;陆丽华 等;《计算机工程与应用》;20110304;第48卷(第6期);第214-220、228页 *

Also Published As

Publication number Publication date
CN103310228A (zh) 2013-09-18

Similar Documents

Publication Publication Date Title
CN103310228B (zh) 基于归一化相关系数的模板匹配高速并行实现方法和装置
CN105426918B (zh) 归一化相关图像模板匹配高效实现方法
Wang et al. PipeCNN: An OpenCL-based open-source FPGA accelerator for convolution neural networks
CN104915322B (zh) 一种卷积神经网络硬件加速方法
CN103793562A (zh) 基于fpga的有源配电网暂态实时仿真系统设计方法
CN104572011B (zh) 基于fpga的通用矩阵定点乘法器及其计算方法
CN106951395A (zh) 面向压缩卷积神经网络的并行卷积运算方法及装置
CN108665059A (zh) 基于现场可编程门阵列的卷积神经网络加速系统
CN108256628A (zh) 基于多播片上网络的卷积神经网络硬件加速器及其工作方式
CN109146067B (zh) 一种基于FPGA的Policy卷积神经网络加速器
CN108256636A (zh) 一种基于异构计算的卷积神经网络算法设计实现方法
CN103677739B (zh) 一种可配置的乘累加运算单元及其构成的乘累加运算阵列
CN110163358A (zh) 一种计算装置及方法
CN103399304B (zh) 外辐射源雷达自适应杂波抑制的fpga实现设备和方法
CN101576961B (zh) 高速的图像匹配方法
CN103984560A (zh) 基于大规模粗粒度嵌入式可重构系统及其处理方法
CN102109542B (zh) 一种可配置复用数字内插和数字滤波功能的数字示波器
CN104504205B (zh) 一种对称fir算法的并行化二维分割方法及其硬件结构
CN1438593A (zh) 智能电器专用芯片的设计方法
CN104579240A (zh) 一种基于fpga的可配置系数的滤波器、电子设备及滤波方法
CN104777456B (zh) 可配置的雷达数字信号处理器及其处理方法
CN107609576A (zh) 融合大模板图的模板匹配并行实现方法及装置
CN102129419B (zh) 基于快速傅立叶变换的处理器
CN103837878A (zh) 一种gnss卫星信号捕捉方法
CN103078729A (zh) 基于fpga的双精度混沌信号发生器

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170929