一种全搜索块匹配方法和装置
技术领域
本发明涉及匹配技术,尤指一种全搜索块匹配方法和装置。
背景技术
块匹配算法,是图像序列稳定中一种常用算法,是运动估计的经典算法之一。块匹配算法分两类,一类为全搜索块匹配算法,一类为快速搜索块匹配算法。其中,全搜索块匹配算法,由于其完备的候选矢量集,使得由该算法得到的矢量在诸多块匹配算法中是最准确可靠的,但是全搜素块匹配算法的运算量也是最大的。这就导致全搜素块匹配算法在实时性要求较高的场合受到很多限制。
发明内容
本发明实施例提供了一种全搜索块匹配方法和装置,能够在不使用外挂存储器的条件下,提高全搜索块匹配算法的实现效率,从而实现实时基于全搜索块匹配算法的图像处理。
本发明实施例提供了一种全搜索块匹配方法,包括:
将待估计图像依次进行缓存;
在缓存过程中,从缓存的待估计图像中获取待估计图像的分块;
在获取待估计图像的分块的过程中,根据获得的待估计图像的分块确定图像宏块的分块,并计算待估计图像的分块和对应的图像宏块的分块的匹配过程值。
可选的,所述将待估计图像依次进行缓存包括:
将待估计图像依次存入预先设置的b个先入先出FIFO队列;其中,b大于或等于待估计图像的分块的行数或列数;
所述在缓存过程中,从缓存的待估计图像中获取待估计图像的分块包括:
在将b个FIFO队列填充满后,依次从b个FIFO队列中获取待估计图像的分块。
可选的,所述将待估计图像依次存入预先设置的b个先入先出FIFO队列包括:
每一个数据时钟上升沿到来时,将所述待估计图像的每一个像素依次存入到b个FIFO队列中。
可选的,所述依次从b个FIFO队列中获取待估计图像的分块包括:
当b=Y时,分别读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到所述待估计图像的分块;其中,Y为所述待估计图像的分块的行数或列数;
在每一个FIFO队列的输出端读取数据时,读取的数据同时输入到前一个FIFO队列的输入端。
可选的,所述分别读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到所述待估计图像的分块包括:
第i次读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到待估计图像T的第行第个分块;其中,i为大于或等于1的整数。
可选的,所述根据获得的待估计图像的分块确定图像宏块的分块包括:
当Y为5,X为2时,其中,Y为所述待估计图像的分块的行数或列数;X为将所述待估计图像扩展成图像宏块所在的图像时往左或往右扩展的列数,或者往上或往下扩展的行数;获得待估计图像的第一行第一个分块T11时,根据第一行第一个分块T11确定:
图像宏块S11的第一行第一个分块S1111、图像宏块S12的第一行第一个分块S1211、图像宏块S13的第一行第一个分块S1311;
图像宏块S21的第一行第一个分块S2111、图像宏块S22的第一行第一个分块S2211、图像宏块S23的第一行第一个分块S2311;
图像宏块S31的第一行第一个分块S3111、图像宏块S32的第一行第一个分块S3211、图像宏块S33的第一行第一个分块S3311;
获得待估计图像T的第一行第二个分块T12时,根据T11和T12确定:
图像宏块S11的第一行第二个分块S1112、图像宏块S12的第一行第二个分块S1212、图像宏块S13的第一行第二个分块S1312;
图像宏块S21的第一行第二个分块S2112、图像宏块S22的第一行第二个分块S2212、图像宏块S23的第一行第二个分块S2312;
图像宏块S31的第一行第二个分块S3112、图像宏块S32的第一行第二个分块S3212、图像宏块S33的第一行第二个分块S3312;
图像宏块S41的第一行第一个分块S4111、图像宏块S42的第一行第一个分块S4211、图像宏块S43的第一行第一个分块S4311;
图像宏块S51的第一行第一个分块S5111、图像宏块S52的第一行第一个分块S5211、图像宏块S53的第一行第一个分块S5311;
图像宏块S61的第一行第一个分块S6111、图像宏块S62的第一行第一个分块S6211、图像宏块S63的第一行第一个分块S6311;
图像宏块S71的第一行第一个分块S7111、图像宏块S72的第一行第一个分块S7211、图像宏块S73的第一行第一个分块S7311;
图像宏块S81的第一行第一个分块S8111、图像宏块S82的第一行第一个分块S8211、图像宏块S83的第一行第一个分块S8311;
以此类推。
可选的,所述计算待估计图像的分块和对应的图像宏块的分块的匹配过程值包括:
每获得一个图像宏块的分块,计算待估计图像T的分块和对应的图像宏块的分块的匹配过程值;
计算待估计图像T的分块和对应的图像宏块的分块的匹配过程值时,分别计算Tjk和S11jk、S21jk,……SMNjk的匹配过程值,直到待估计图像T的所有分块计算完成;其中,j,k均为大于或等于1的整数。
本发明实施例还提出了一种全搜索块匹配装置,所述装置包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现:
将待估计图像依次进行缓存;
在缓存过程中,从缓存的待估计图像中获取待估计图像的分块;
在获取待估计图像的分块的过程中,根据获得的待估计图像的分块确定图像宏块的分块,并计算待估计图像的分块和对应的图像宏块的分块的匹配过程值。
可选的,所述存储器还用于:
将待估计图像依次存入预先设置的b个先入先出FIFO队列;其中,b大于或等于待估计图像的分块的行数或列数;
所述计算机程序被所述处理器执行时采用以下方式实现所述在缓存过程中,从缓存的待估计图像中获取待估计图像的分块:
在将b个FIFO队列填充满后,依次从b个FIFO队列中获取待估计图像的分块。
可选的,所述计算机程序被所述处理器执行时采用以下方式实现所述将待估计图像依次存入预先设置的b个先入先出FIFO队列:
每一个数据时钟上升沿到来时,将所述待估计图像的每一个像素依次存入到b个FIFO队列中。
可选的,所述计算机程序被所述处理器执行时采用以下方式实现所述依次从b个FIFO队列中获取待估计图像的分块:
当b=Y时,分别读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到所述待估计图像的分块;其中,Y为所述待估计图像的分块的行数或列数;
在每一个FIFO队列的输出端读取数据时,读取的数据同时输入到前一个FIFO队列的输入端。
可选的,所述计算机程序被所述处理器执行时采用以下方式实现所述分别读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到所述待估计图像的分块:
第i次读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到待估计图像T的第行第个分块;其中,i为大于或等于1的整数。
本发明实施例还提出了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一种全搜索块匹配方法的步骤。
与相关技术相比,本发明实施例包括:将待估计图像依次进行缓存;在缓存过程中,从缓存的待估计图像中获取待估计图像的分块;在获取待估计图像的分块的过程中,根据获得的待估计图像的分块确定图像宏块的分块,并计算待估计图像的分块和对应的图像宏块的分块的匹配过程值。通过本发明实施例的方案,在将待估计图像进行缓存的过程中,并行计算待估计图像的分块和对应的图像宏块的分块的匹配过程值,在不使用外挂存储器的条件下,提高了全搜索块匹配算法的实现效率,从而实现了实时基于全搜索块匹配算法的图像处理。
本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
图1为相关技术实现全搜索块匹配方法的硬件系统框图;
图2为相关待估计图像T和图像I的示意图;
图3为相关图像I的形成示意图;
图4为相关全搜索块匹配算法的流程图;
图5为本发明实施例全搜索块匹配方法的流程图;
图6为本发明实施例FIFO队列的示意图;
图7为本发明实施例全搜索块匹配装置的结构组成示意图。
具体实施方式
下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
在介绍本发明实施例的方法之前,首先介绍实现本发明实施例的方法的硬件系统。如图1所示,该硬件系统包括:现场可编程门阵列(FPGA,Field-Programmable GateArray)、摄像头和显示器。
其中,FPGA包括块匹配数字图像处理单元、显示驱动单元和驱动控制单元。
其中,驱动控制单元,用于驱动摄像头获取图像;
摄像头,用于在驱动控制单元的驱动下获取图像;
块匹配数字图像处理单元,用于采用全搜索块匹配方法对图像进行匹配;
显示驱动单元,用于驱动显示器进行显示。如显示图像,匹配结果等。
其次,介绍本发明实施例的方法要实现的块匹配算法。如图2所示,该全搜索块匹配算法涉及待估计图像T和图像I。其中,如图3所示,待估计图像T的大小为W×H,图像I为待估计图像T的扩展图像,即将待估计图像T往左和往右分别对称扩展X列,且往上和往下分别对称扩展X行,即得到图像I。
具体的,在扩展时采用镜像对称扩展的方式。即将待估计图像T的前X行往上镜像对称扩展X行,将待估计图像T的最后X行往下镜像对称扩展X行,将扩展后的图像的前X列往左镜像对称扩展X列,将扩展后的图像的最后X列往右镜像对称扩展X列得到图像I;或者,将待估计图像T的前X列往左镜像对称扩展X列,将待估计图像T的最后X列往右镜像对称扩展X列,将扩展后的图像的前X行往上镜像对称扩展X行,将扩展后的图像的最后X行往下镜像对称扩展X行得到图像I。
图像I包括MN个图像宏块,每一个图像宏块的大小与待估计图像T的大小相同,即为W×H;其中,M为大于或等于1的整数,N为大于或等于1的整数,Smn左移一列得到Sm(n-1),Smn下移一行得到S(m+1)n。
该全搜索块匹配算法将待估计图像T与每一个图像宏块进行匹配计算,如图4所示,包括:
步骤400、计算待估计图像T与图像宏块Smn的像素差值。
本步骤中,按照公式DIFmn(i,j)=|T(i,j)-Smn(i,j)|1≤i≤W,1≤j≤H计算像素差值;
其中,DIFmn(i,j)为待估计图像T的第(i,j)个像素与图像宏块Smn第(i,j)个像素的像素差值,T(i,j)为待估计图像T的第(i,j)个像素值,Smn(i,j)为图像宏块Smn的第(i,j)个像素值。
步骤401、将计算得到的像素差值进行积分处理得到积分值。
本步骤中,按照公式
计算积分值;
其中,INTmn(i,j)为第(i,j)个像素的积分值。
步骤402、将积分值进行匹配计算得到匹配过程值。
本步骤中,按照公式
计算匹配过程值;
其中,i1=i+ds+1,j1=j+ds+1,ds为匹配常数,Distmn(i,j)为待估计图像T的第(i,j)个像素和图像宏块Smn第(i,j)个像素的匹配过程值。
步骤403、根据计算得到的匹配过程值进行后续运算。
本步骤中,后续运算例如排序比较得到最优匹配图像宏块,进行视频压缩;或利用多个相似图像宏块的距离计算权重,做非局部均值滤波,进行视频去噪等。
传统的全搜索块匹配方法在实现上述全搜索块匹配算法时,将待估计图像T输入后,根据待估计图像T按照图2的方式扩展成图像I,再根据步骤400~步骤403进行匹配运算。
这种方法要完成一个待评估图像T的匹配,步骤200需要完成WH(MN)次减法,步骤301需要完成(1+W-1+H-1+3(W-1)(H-1))(MN)次加法,步骤302需要完成3WH(MN)次加法。那么,要完成一张1920×1080的低照度图像增强处理,即W=1920,H=1080,假设M=10,N=10,按照步骤300~步骤302,则所需要的总的计算量为WH(MN)+(1+W-1+H-1+3(W-1)(H-1))(MN)+3WH(MN)=1450920200。假设图像速率为30帧每秒(相邻两帧图像之间的时间间隔为33.3毫秒(ms)为例,要想达到实时处理的目的,那么需要在33.3ms以内完成1450920200次运算,如果一个时钟周期完成一次计算处理,则必须提高处理器的主频率,即主频率需要达到44G才能满足要求,目前通用的处理器均达不到这么高的主频率,因此,目前处理器的主频率在不使用外挂存储器的条件下,很难满足实时性的要求,然而使用外挂存储器会增加硬件成本,且外挂存储器的读写需要时间,不利于算法的实时实现。
参见图5,本发明实施例提成了一种全搜索块匹配方法,该方法将待估计图像T和所有图像宏块划分成大小为Y×Y的分块,如图1所示,划分后,T11表示待估计图像T的第一行第一个分块,T12表示待估计图像T的第一行第二个分块,T21表示待估计图像T的第二行第一个分块,S1111表示图像宏块S11的第一行第一个分块,其他以此类推。
该方法包括:
步骤500、将待估计图像T依次进行缓存。包括:
将待估计图像T依次存入预先设置的b个先入先出(FIFO,First InputFirstOutput)队列。
本步骤中,每一个数据时钟上升沿到来时,将待估计图像T的每一个像素依次存入到b个FIFO队列中,一般情况下,按照T(1,1)、T(1,2)、……、T(1,H)、T(2,1)、T(2,2)、……、T(2,H)、……、T(W,1)、T(W,2)、……、T(W,H)的顺序输入,其中,T(1,1)为待估计图像T的第一行第一列对应的像素,其他以此类推。
本步骤中,b个FIFO队列如图6所示,第b个FIFO队列FIFO_b的输出端接入第(b-1)个FIFO队列FIFO_b-1的输入端,第(b-1)个FIFO队列FIFO_b-1的输出端接入第(b-2)个FIFO队列FIFO_b-2的输入端,……,第2个FIFO队列FIFO_2的输出端接入第1个FIFO队列FIFO_1的输入端。
这样,每一个数据时钟上升沿到来时,将输入的像素从FIFO_b的输入端输入,每输入一个像素,将FIFO_b中原有的所有像素往右平移一个像素;当将FIFO_b填充满时,每输入一个像素,将FIFO_b中第一个输入的像素从FIFO_b-1的输入端输入,FIFO_b中的其他像素往右平移,以此类推,形成流水线,直到将FIFO_1到FIFO_b填充满,FIFO_1到FIFO_b填充满后,每一个数据时钟上升沿到来时,最先输入FIFO队列的像素将被后面输入的像素依次替换,以形成流水线。
本步骤中,理论上,b的值可以随意选取,但考虑将待估计图像T和所有图像宏块进行分块的问题,b应大于或等于Y。
步骤501、在缓存过程中,从缓存的待估计图像中获取待估计图像的分块。包括:
在将b个FIFO队列填充满后,依次从b个FIFO队列中获取待估计图像T的分块。
本步骤中,依次从b个FIFO队列中获取待估计图像T的分块包括:
当b=Y时,分别读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到待估计图像T的分块;
在每一个FIFO队列的输出端读取数据时,读取的数据同时输入到前一个FIFO队列的输入端。
其中,当待估计图像T的列数为Y的整数倍时,分别读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到待估计图像T的分块包括:
第i次读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到待估计图像T的第行第个分块;其中,i为大于或等于1的整数。
例如,第一次读取第1个FIFO队列到第Y个FIFO队列的前Y个数据得到待估计图像T的第一行第一个分块T11,第二次读取第1个FIFO队列到第Y个FIFO队列的前Y个数据得到待估计图像T的第一行第二个分块T12,以此类推,直到待估计图像T的所有分块读取完成。
当待估计图像T的列数不为Y的整数倍时,分别读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到待估计图像T的分块包括:
第i次读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到第i个缓存分块;其中,i为大于或等于1的整数;根据第1个缓存分块到第i个缓存分块确定待估计图像T的对应分块。
步骤502、在获取待估计图像T的分块的过程中,根据获得的待估计图像T的分块确定图像宏块的分块,并计算待估计图像T的分块和对应的图像宏块的分块的匹配过程值。
本步骤中,根据获得的待估计图像T的分块确定图像宏块的分块包括:
当Y为5,X为2时,获得待估计图像T的第一行第一个分块T11时,根据第一行第一个分块T11确定:
图像宏块S11的第一行第一个分块S1111、图像宏块S12的第一行第一个分块S1211、图像宏块S13的第一行第一个分块S1311;
图像宏块S21的第一行第一个分块S2111、图像宏块S22的第一行第一个分块S2211、图像宏块S23的第一行第一个分块S2311;
图像宏块S31的第一行第一个分块S3111、图像宏块S32的第一行第一个分块S3211、图像宏块S33的第一行第一个分块S3311;
获得待估计图像T的第一行第二个分块T12时,根据T11和T12确定:
图像宏块S11的第一行第二个分块S1112、图像宏块S12的第一行第二个分块S1212、图像宏块S13的第一行第二个分块S1312;
图像宏块S21的第一行第二个分块S2112、图像宏块S22的第一行第二个分块S2212、图像宏块S23的第一行第二个分块S2312;
图像宏块S31的第一行第二个分块S3112、图像宏块S32的第一行第二个分块S3212、图像宏块S33的第一行第二个分块S3312;
图像宏块S41的第一行第一个分块S4111、图像宏块S42的第一行第一个分块S4211、图像宏块S43的第一行第一个分块S4311;
图像宏块S51的第一行第一个分块S5111、图像宏块S52的第一行第一个分块S5211、图像宏块S53的第一行第一个分块S5311;
图像宏块S61的第一行第一个分块S6111、图像宏块S62的第一行第一个分块S6211、图像宏块S63的第一行第一个分块S6311;
图像宏块S71的第一行第一个分块S7111、图像宏块S72的第一行第一个分块S7211、图像宏块S73的第一行第一个分块S7311;
图像宏块S81的第一行第一个分块S8111、图像宏块S82的第一行第一个分块S8211、图像宏块S83的第一行第一个分块S8311;
以此类推。
计算待估计图像T的分块和对应的图像宏块的分块的匹配过程值包括:
每获得一个图像宏块的分块,计算待估计图像T的分块和对应的图像宏块的分块的匹配过程值;
计算待估计图像T的分块和对应的图像宏块的分块的匹配过程值时,分别计算Tjk和S11jk、S21jk,……SMNjk的匹配过程值,直到待估计图像T的所有分块计算完成;其中,j,k均为大于或等于1的整数。
其中,按照步骤300~步骤302计算Tjk和S11jk、S21jk,……SMNjk的匹配过程值。
本步骤中,每获得一个待估计图像T的分块,将该待估计图像T的分块进行缓存,待获得对应的图像宏块的分块后,再计算待估计图像T的分块和对应的图像宏块的分块的匹配过程值。
本发明实施例具有以下有益效果:
1、以上述块匹配结果为例,输出图像仅比输入图像延迟了b行输出,满足实时性要求。
2、以上述块匹配结果为例,当b为7时,仅需要缓存7行数据,所需存储空间为1920×7×8/1024=105Kb,无需选用高端的FPGA即满足该存储资源需求,也无需外挂存储器,不仅节约了芯片选型成本,而且省去了读写存储器的时间开销,降低了设计难度。
3、选用与图像数据时钟相同的FPGA数据处理时钟,即可以完成本发明实施例所述的全搜索块匹配方法,提高了设计的稳定性。
参见图7,本发明实施例还提出了一种全搜索块匹配装置,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序。
其中,存储器至少包括一种类型的可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,安全数码卡(SD卡,Secure Digital Memory Card)或数据寄存器(DX,Data Register)存储器等)、随机访问存储器(RAM,Random Access Memory)、静态随机访问存储器(SRAM,Static Random Access Memory)、只读存储器(ROM,Read OnlyMemory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable ProgrammableRead-Only Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、磁性存储器、磁盘、光盘等。存储器可以是独立的存储器,也可以是芯片内部的存储器或某一具有存储功能的模块;处理器可以是中央处理器(CPU,Central Processing Unit)、控制器、微控制器、微处理器、FPGA或其他数据处理芯片等。
所述计算机程序被所述处理器执行时实现:
将待估计图像依次进行缓存;
在缓存过程中,从缓存的待估计图像中获取待估计图像的分块;
在获取待估计图像的分块的过程中,根据获得的待估计图像的分块确定图像宏块的分块,并计算待估计图像的分块和对应的图像宏块的分块的匹配过程值。
可选的,所述计算机程序被所述处理器执行时采用以下方式实现所述将待估计图像依次进行缓存:
将待估计图像依次存入预先设置的b个先入先出FIFO队列;其中,b大于或等于待估计图像的分块的行数或列数;
所述计算机程序被所述处理器执行时采用以下方式实现所述在缓存过程中,从缓存的待估计图像中获取待估计图像的分块:
在将b个FIFO队列填充满后,依次从b个FIFO队列中获取待估计图像的分块。
可选的,所述计算机程序被所述处理器执行时采用以下方式实现所述将待估计图像依次存入预先设置的b个先入先出FIFO队列:
每一个数据时钟上升沿到来时,将所述待估计图像的每一个像素依次存入到b个FIFO队列中。
可选的,所述计算机程序被所述处理器执行时采用以下方式实现所述依次从b个FIFO队列中获取待估计图像的分块:
在将b个FIFO队列填充满后,当b=Y时,分别读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到所述待估计图像的分块;其中,Y为所述待估计图像的分块的行数或列数;
在每一个FIFO队列的输出端读取数据时,读取的数据同时输入到前一个FIFO队列的输入端。
可选的,所述计算机程序被所述处理器执行时采用以下方式实现所述分别读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到所述待估计图像的分块:
第i次读取第1个FIFO队列到第Y个FIFO队列的输出端的前Y个数据得到待估计图像T的第行第个分块;其中,i为大于或等于1的整数。
本发明实施例还提出了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一种全搜索块匹配方法的步骤。
虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。