CN1253696A - 降低一个脉动阵列对存储器的带宽需求的装置与方法 - Google Patents

降低一个脉动阵列对存储器的带宽需求的装置与方法 Download PDF

Info

Publication number
CN1253696A
CN1253696A CN97181311.6A CN97181311A CN1253696A CN 1253696 A CN1253696 A CN 1253696A CN 97181311 A CN97181311 A CN 97181311A CN 1253696 A CN1253696 A CN 1253696A
Authority
CN
China
Prior art keywords
search
data
array
shift register
search window
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.)
Pending
Application number
CN97181311.6A
Other languages
English (en)
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.)
ZAPEX TECHNOLOGIES (ISRAEL) Ltd
Original Assignee
ZAPEX TECHNOLOGIES (ISRAEL) Ltd
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 ZAPEX TECHNOLOGIES (ISRAEL) Ltd filed Critical ZAPEX TECHNOLOGIES (ISRAEL) Ltd
Publication of CN1253696A publication Critical patent/CN1253696A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/43Hardware specially adapted for motion estimation or compensation
    • H04N19/433Hardware specially adapted for motion estimation or compensation characterised by techniques for memory access
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/14Picture signal circuitry for video frequency region
    • H04N5/144Movement detection
    • H04N5/145Movement estimation

Abstract

在一个视频压缩系统中,在一个运动估计器的主题下对本发明加以描述,但本发明也可以应用于其他领域。本发明使用多个处理部件(14-20)以及先进先出阵列(22-28),它们被安排在一个线性阵列之中,以便降低在搜索窗口(30-36)中处理数据时所需的存储器带宽。来自搜索窗口的数据初始地被装载到各处理部件之中,随后被循环移位以便减少对存储器的访问次数。此外,以一种特定的方式对搜索窗口进行扫描,以便使所需的存储器访问次数最小化。

Description

降低一个脉动阵列对存储器的带宽需求的装置与方法
本发明一般地涉及数据处理装置,更具体地涉及在一个窗口中针对预定的模板数据的数据处理。
在视频压缩系统中,通常需要一帧一帧地去估计诸像素块的运动。在诸像素块中,仅须传送被称为运动矢量的诸增量或诸运动,而不必传送整帧的视频信息。视频压缩编码器进行这样的处理,其结果是跟原来相比,大大地降低了视频比特率。从原来的初始帧开始,通过利用早先为该帧中的每一块计算的诸运动矢量,一个视频解码器就能重构原来的各帧。
现有各种视频压缩编码器,但在设备的部件上一般都显得大而昂贵。为了符合生产更小的和更廉价的产品的长期趋势,人们非常希望降低视频压缩编码器的尺寸、重量、成本和复杂性。特别是,若能降低尺寸和成本这两方面,则视频压缩编码器的运动估计部分将会带来很多的好处。
相应地,本发明的一个目标就是提供一种针对一个预定模板的数据处理系统,它能克服现有技术的缺点。
本发明的另一个目标就是在一个预定义的搜索窗口中提供一种数据处理系统,以便在较小的数据块以及在搜索窗口中的数据之间找到一种最佳匹配。
本发明的又一个目标就是提供一个数据处理系统,由此使用任何适当的标准来确定最佳匹配状态,上述标准是在较小数据块中的数据以及在搜索窗口中的数据的一个函数。
本发明的再一个目标就是提供一个数据处理系统,由此使得访问存储器的次数为最少,并且完成搜索所需的总的时间被缩短。
本文公开了一种新的装置和方法,它能减少在处理位于一个窗口中的数据时所需的存储器带宽。针对根据一个预定的函数或匹配标准的已知模板数据,对位于窗口中的数据进行处理。这个标准可能是给定的数据窗口(称为搜索窗口)的数据跟包含在一个较小的模板块的数据之间的最佳匹配。在搜索窗口里面的数据被划分为若干较小的数据块。将在搜索窗口中的每一个数据块跟模板块进行比较以便确定一种最佳匹配状态。本发明是针对在一个视频压缩系统中的一个运动估计器来进行描述的,但也适用于其他领域。本发明利用被排列成一个线性阵列的多个处理部件以及诸先进先出(FIFO)阵列,以便降低为处理搜索窗口内的数据所需的存储器带宽。来自搜索窗口的数据起初被装载到各处理部件之中,随后进行循环移位以便减少对存储器的访问次数。此外,以一种特定的方式对该窗口进行遍历,以便使所需的存储器访问次数最小化。
根据本发明的一个优选实施例,提供了一种在针对预定义的模板数据对位于搜索窗口内的数据进行处理时,减少所需带宽的装置,该装置包括多个处理部件,每一个处理部件包括一个第一搜索阵列移位寄存器,第一搜索阵列移位寄存器保存来自搜索窗口的一个数据块,第一搜索阵列移位寄存器能够将所存储的内容向左和向右循环移位以及向上移位;一个用于保存预定义模板数据块的模板块;被连接到第一搜索阵列移位寄存器以及模板块的函数装置,根据第一搜索阵列移位寄存器以及模板块的内容、用以计算一个预定函数;多个先进先出阵列(FIFO),每一个先进先出阵列包括一个第二搜索阵列移位寄存器,第二搜索阵列移位寄存器保存来自搜索窗口的一个数据块,第二搜索阵列移位寄存器能够将所存储的内容向左和向右循环移位以及向上移位,其中多个处理部件以及多个先进先出阵列被互相邻接地安排在一个线性阵列之内,使得每一个第一和第二搜索阵列移位寄存器都被连接到它的左和右邻居,线性阵列两端的搜索阵列移位寄存器互相连接,其中搜索窗口数据在第一和第二搜索阵列移位寄存器中被移位,在每一次连续的移位过程中,函数装置计算该预定函数,并且其中在逐行的基础上对搜索窗口进行双向搜索,由此在搜索窗口的每一行中的数据在第一和第二搜索阵列移位寄存器中被水平地循环移位,在每一行的末尾,在第一和第二搜索阵列移位寄存器中的数据被垂直地移位。
该装置还包括一个上方缓冲器,它被连接到第一和第二搜索阵列移位寄存器以及搜索窗口,上方缓冲器用于缓冲存储搜索窗口的内容。此外,该装置还包括一个下方缓冲器,它被连接到第一和第二搜索阵列移位寄存器以及搜索窗口,下方缓冲器用于缓冲存储搜索窗口的内容。
函数装置包括绝对差值产生单元的一个求和器,并且第一和第二搜索阵列移位寄存器中的每一个都包括一个大小为16×16的阵列,每一个阵列都容纳来自搜索窗口的数据。诸模板块中的每一个都包括一个大小为16×16的阵列,每一个阵列都容纳模板数据。
根据本发明的一个优选实施例,还提供了在一个搜索窗口内针对预定义的模板数据进行数据处理时减少所需存储器带宽的装置,该装置包括多个处理部件,每一个处理部件包括一个第一搜索阵列移位寄存器,第一搜索阵列移位寄存器保存来自搜索窗口的一个数据块,第一搜索阵列移位寄存器能够将所存储的内容向左和向右循环移位以及向上和向下移位;一个用于保存预定义模板数据块的模板块;被连接到第一搜索阵列移位寄存器以及模板块的函数装置,根据第一搜索阵列移位寄存器以及模板块的内容、用以计算一个预定函数;多个先进先出阵列(FIFO),每一个先进先出阵列包括一个第二搜索阵列移位寄存器,第二搜索阵列移位寄存器保存来自搜索窗口的一个数据块,第二搜索阵列移位寄存器能够将所存储的内容向左和向右循环移位以及向上和向下移位,其中多个处理部件以及多个先进先出阵列被互相邻接地安排在一个线性阵列之内,使得每一个第一和第二搜索阵列移位寄存器都被连接到它的左和右邻居,线性阵列两端的搜索阵列移位寄存器互相连接,其中搜索窗口数据在第一和第二搜索阵列移位寄存器中被移位,在每一次连续的移位过程中,函数装置计算该预定函数,并且其中在逐行的基础上对搜索窗口进行双向搜索,由此在搜索窗口的每一行中的数据在第一和第二搜索阵列移位寄存器中被水平地循环移位,在每一行的末尾,在第一和第二搜索阵列移位寄存器中的数据被垂直地移位。
还有,根据本发明的一个优选实施例,还提供了在一个搜索窗口内针对预定义模板数据进行数据处理的方法,该方法用于一个处理阵列,该阵列包括用于存储模板数据的模板阵列装置以及宽度比模板阵列装置更宽的搜索阵列移位寄存器装置,用于存储来自搜索窗口的数据的一部分,处理过程包括计算一个数值,它是模板数据和搜索窗口数据的一个函数,本方法包括下列诸步骤:将模板数据装入模板阵列装置,将第一次装载的搜索窗口数据装入搜索阵列移位寄存器装置,重复执行下列诸步骤,直至到达搜索窗口的最后一行为止:计算该函数并在搜索阵列移位寄存器装置内将该数据循环左移一位,重复这个计算和循环移位的步骤,直至到达当前数据行的末尾为止,将搜索阵列移位寄存器装置(的内容)上移一位并且装载来自搜索窗口的下一行数据,计算该函数并将搜索阵列移位寄存器装置(的内容)循环右移一位,重复这个计算和循环移位的步骤,直至到达当前数据行的末尾为止,将搜索阵列移位寄存器装置(的内容)上移一位并且装载来自搜索窗口的下一行数据。
下面仅借助于实例,并参照诸附图对本发明加以描述,其中:
图1表示在一个大小为128×64的搜索窗口内模板宏块的一个实例;
图2是一高层方框图,表示根据本发明的一个实施例而建造的像素处理脉动阵列;
图3表示与搜索窗口有关的4个模板宏块以及在一个优选实施例中搜索的方向,搜索窗口的各部分被明确地装载到搜索阵列移位寄存器里面;
图4是一高层流程图,表示在本发明的一个优选实施例中,在搜索窗口内进行运动估计搜索的方法;
图5表示与搜索窗口有关的4个模板宏块以及在一个可供选择的优选实施例中搜索的方向,搜索窗口的各部分被明确地装载到搜索阵列移位寄存器里面;
图6是一高层流程图,表示在本发明的一个可供选择的优选实施例中,在搜索窗口内进行运动估计搜索的方法;
图7表示与搜索窗口的左边缘相邻接的4个模板宏块以及被明确地装载到各搜索阵列移位寄存器里面的该搜索窗口的各部分;
图8表示与搜索窗口的右边缘相邻接的4个模板宏块以及被明确地装载到各搜索阵列移位寄存器里面的该搜索窗口的各部分;
图9表示与搜索窗口的右边缘相邻接的3个模板宏块以及被明确地装载到各搜索阵列移位寄存器里面的该搜索窗口的各部分;
图10表示与搜索窗口的右边缘相邻接的2个模板宏块以及被明确地装载到各搜索阵列移位寄存器里面的该搜索窗口的各部分;
图11表示与搜索窗口的右边缘相邻接的1个模板宏块以及被明确地装载到各搜索阵列移位寄存器里面的该搜索窗口的各部分;
如前所述,当前视频压缩已在一个广泛的应用领域内被使用。视频压缩标准,例如MPEG 2标准,规定了各种视频编码器的输出规格。各种视频编码器的作用是,将视频流从它的相对地较宽的初始带宽压缩到更窄的带宽。例如,编码后的视频流可以被发送到一条通信信道上,或者被存储到一种存储介质里面。在每一种情况下,通信信道的带宽需求大为降低,为保存视频节目所需的存储容量也大为降低。例如,在MPEG 2标准中,一组视频流的编码要求对在连续的诸帧之间的变化作出估计。这个过程被称为运动估计。有关运动估计过程的更深入的讨论可以在Vasudev Bhaskaran和Konstantinas Konstantinides合著的《图像与视频压缩标准,算法与结构》一书的第一1章中找到,该书作为参考文献已被收入本文。
首先,该帧被分割为诸像素块,例如16×16像素那么大,然后为当前帧中的每一块,找到在上一帧中的最佳匹配块。不是再次地完全发送相同的块,而是代之以发送从上一帧到当前帧的位置变化(即,运动),这样就大大地减少了需要发送的数据量。
在视频压缩系统的主题下,公开和描述了本发明关于在一个搜索区域内为搜索数据而实施的一种装置和一种方法。无论如何,这决不会限制本发明在其他领域的应用。本发明可应用于那些针对一个大尺寸的搜索窗口来处理(例如,寻找最佳匹配)一个相对小的数据模板的任何类型的系统之中。此外,计算标准可以是该数据模板中的数据以及该搜索窗口中的数据的任何一种函数(例如,选择最佳匹配)。
本文所提供的视频压缩方案的实例利用一种运动估计方法,该方法使用一个具有特定大小的搜索窗口。每一个像素块,称为一个模板宏块,在当前帧中它跟在搜索窗口中含有上一帧数据的每一块进行比较。典型地,由于从一帧到下一帧,各种目标都不会移动的很远,所以搜索窗口是该帧区域的一个子集,而不是全帧。使用一个缩小了的搜索窗口将缩短为找到最佳匹配块所需的计算时间。在图1中说明了在一个大小为128×64的搜索窗口中所显示的模板宏块的一个实例。搜索窗口170包括多个块174,各为16×16像素。搜索窗口中心部位所示的块172表示待匹配的模板宏块。在本例中,搜索窗口(的大小)为9块×5块或144像素×80像素。在逐块的基础上对搜索窗口中的数据进行处理。搜索开始于左上角,如虚线框所示。匹配功能在左上角处被执行。随后,该块右移一个像素并且再次执行该匹配功能。逐个像素地重复这个过程,直至到达第一像素行的末尾。所处理的最后一块在搜索窗口的右上角用虚线矩形来表示。重要的是要指出,所搜索的匹配的实际次数是128而不是144。其后该块被下移一个像素行并且该过程继续进行。类似地,在Y方向仅仅搜索64次匹配,而不是80次。因此,在一个大小为9×5块或144×80像素的搜索窗口中,该搜索窗口实际上被搜索了8×4块或128×64次匹配。
根据以上的说明,要指出的是,例如,为了在一个数据块的每一侧搜索32个像素,需要一个宽度为32+32+1或65个像素的搜索窗口。这是由于32个像素对应于左侧,32个像素对应于右侧,并且在搜索窗口中对应于模板块本身的像素保持不变。一个宽度为64个像素的搜索窗口能够处理宽度为-32到+31像素的搜索。但是,为了帮助大家理解本发明的概念,这里所提供的诸实例均不考虑对应于模板块而保持不变的那个单独的像素。
实际的匹配功能是通过使用一个脉动阵列、在模板宏块以及搜索窗口数据之间实现的。在一个优选实施例中,为了(提高)速度与效率的目的,脉动阵列在同一时间内同时处理4个模板宏块。在图2中示出了一个高级方框图,说明根据本发明的一个优选实施例的像素处理脉动阵列12。脉动处理阵列12包括4个处理部件14,16,18,20和4个先进先出(FIFO)阵列22,24,26,28。每一个处理部件14,16,18,20分别包括一个搜索窗口数据阵列30,32,34,36,以及分别包括绝对差值(SAD)产生单元52,54,56,58。诸处理部件14,16,18,20还分别包括一个左模板宏块46,中左模板宏块48,中右模板宏块50以及一个右模板宏块52。每一个搜索阵列移位寄存器30,32,34,36以及模板宏块46,48,50,52分别地被连接到SAD产生单元52,54,56,58。此外,每一个搜索阵列移位寄存器32,34,36,38,40,42都被连接到其左右两侧的相邻的搜索阵列移位寄存器。搜索阵列移位寄存器30被连接到其右侧的搜索阵列移位寄存器32以及搜索窗口44。搜索阵列移位寄存器44还被连接到其左侧的搜索阵列移位寄存器42。连接诸搜索阵列移位寄存器的所有链路都是双向链路。
诸搜索阵列移位寄存器保存来自先前的诸帧的数据,并准备跟在当前帧中的数据进行比较。每一个搜索阵列移位寄存器均为16×16像素。诸模板宏块也是大小为16×16像素的诸阵列。每一个模板宏块从当前帧中保存一个像素数据块。如前所述,通过在搜索窗口中找到能产生最小SAD的数据块而实现最佳匹配。通过SAD产生单元来实现最小SAD功能。每一个SAD产生单元从搜索阵列移位寄存器那里接收一个像素块,并从模板宏块那里接收一个像素块。SAD产生单元以配对的方式计算介于每一对像素块之间的绝对差值,这意味着介于搜索阵列移位寄存器以及模板宏块的第一、第二、第三等对像素之间的差值已被计算出来。在该优选实施例中,SAD产生单元计算介于256对像素数值之间的差值。然后对诸差值的绝对值求和以产生总的SAD结果。随后,将当前SAD结果跟当前最小SAD进行比较,若新的SAD为较小,则它就成为新的当前最小SAD。
每一个模板宏块(即,左,中左,中右和右)都包括一个大小为16×16像素的阵列。每一个模板宏块都具有一个通往存储当前帧的像素数据的模板存储器装置的接口。在运算开始时,经由模板存储器装置向诸模板宏块每次传送构成该帧的诸像素的一部分。
每一个搜索阵列移位寄存器都包括一个大小为16×16像素的阵列。诸搜索阵列移位寄存器都具有一个通往一个上方缓冲器180以及一个下方缓冲器182的接口,这两个缓冲器都被连接到脉动阵列12。搜索窗口存储器装置保存搜索窗口像素数据。随着搜索窗口被搜索,数据被逐行地从搜索窗口存储器传送到上方或下方缓冲器,这取决于搜索的方向。在脉动阵列中的所有搜索阵列移位寄存器都具有用于向/从上方缓冲器180以及下方缓冲器182逐个地写入/读出诸像素的装置,如从每一个搜索阵列移位寄存器方框出发的向上或向下箭头所示。此外,每一个搜索阵列移位寄存器都可以向左或向右移位一个像素。随着搜索窗口被扫描,根据后述的搜索算法,在搜索窗口中的数据将被向左、向右、向上或向下移位一个像素。
产生一个SAD结果的方法在业界中是众所周知的,在此不作详述。在类似地被转让的美国专利申请序号08/740,046,题为《绝对值发生器的求和》的文献中,公开了适用于本发明的一个SAD发生器的详细描述。
本发明需要至少一个处理部件以及至少一个先进先出阵列。然而,增加附加的处理部件和/或先进先出阵列将使性能得以改进。在图2所示的实例中,利用了4个处理部件以及4个先进先出阵列。在要求非常高的处理速度的情况下,为了(提高)速度和效率的目的,附加的诸处理部件和/或先进先出阵列可能是必要的。这4个先进先出阵列的功能是,从相邻的搜索窗口方框中保存像素数据,由此大大地降低了为处理模板宏块数据的当前集合所需的存储器带宽。类似地,为了提高速度的目的,4个模板宏块被同时地进行处理。所使用的先进先出阵列的数目是存储器带宽的预期减小量的一个函数。使用附加的先进先出阵列减少了所需的存储器访问次数,但是增加了所需硬件数量和复杂性。使用较少的先进先出阵列降低了硬件要求,但是增加了所需的存储器频率或减少了所需的访问时间,由此增加了所需的总的处理(开销)。类似地,具有较多或较少的处理部件数目的脉动阵列都是可能的。较少的处理部件增加处理时间,而较多的处理部件则减少处理时间。
诸处理部件的数目、诸先进先出阵列、存储器总线宽度以及其他各变量因子之间的关系可以用数学方法表示如下: F e = N · F i BW · ( N - i · M + 1 ) 式中N≥i*Mi=1,2,3...并且其中N=在诸处理部件以及与之连接的诸先进先出阵列中的列数M=在诸像素列中的宏块宽度的数值BW=在诸像素中存储器总线的宽度Fi=内部频率Fe=外部存储器频率i=诸处理部件的数目考察上述关系,可以看出,若N=i*M则 F e = 1 BW · i · M · F i
换句话说,若总的列数被设置为等于在诸处理部件中的列数(即,没有诸先进先出阵列),则所需的外部存储器频率跟诸处理部件的数目与内部频率的乘积有关。另一方面,若
N→∞
F e ≈ 1 BW · F i
因此,随着总列数的增加(即,诸先进先出阵列的数目增加,而诸处理部件的数目保持不变),所需的外部存储器频率被减少为原来的1/BW。
如前所述,本发明的功能是使外部存储器频率Fe最小化。作为本发明的有效性的一种说明,考虑下面两个实例:
实例#1:没有先进先出阵列
N=64像素列
M=每一个阵列含16个像素列
BW=4像素×8比特/像素=32比特
Fi=100MHz
i=4个处理阵列
要注意的是,本例不包括任何先进先出阵列,而且提出这个例子仅仅是为了说明的目的。由上面给出的关系可得: F e = 1 4 · 64 · 100 64 - 64 + 1 =1600MHz实例#2:4个先进先出阵列N=128像素列M=每一个阵列含16个像素列
BW=4像素×8比特/像素=32比特
Fi=100MHz
i=4个阵列
实例#2的唯一差别就是4个宽度为16像素的先进先出阵列,其中的每一个都已经跟4个处理部件连接在一起。现在由这种关系可得: F e = 1 4 · 128 · 100 128 - 64 + 1 ≈50MHz
因此,跟完全没有先进先出阵列的情形相比,由于增加了4个先进先出阵列使得外部存储器频率已经被减少到原来的1/32。若再增加附加的先进先出阵列,还可以使所需的外部存储器频率减少的更多。
如前所述,诸搜索阵列移位寄存器是互相连接的,因此,各像素块可以从一个搜索阵列移位寄存器向左或向右循环移位到另一个搜索阵列移位寄存器。诸先进先出阵列的用途是作为一个缓冲器,它保存着准备跟模板宏块数据进行匹配的诸像素块。随着搜索窗口被扫描,在搜索窗口中的像素数据被装载到脉动阵列中的各搜索阵列移位寄存器里面。
为了帮助人们更好地理解本发明的方法,在图3中示出了4个模板宏块的图解,这是在搜索窗口中明确地被装载到诸搜索阵列移位寄存器中去的那些部分,还示出了在一个优选实施例中进行搜索的方向。为了说明搜索窗口的尺寸要求,诸模板宏块46,48,50,52(图2)被显示为重叠到搜索窗口200之上。用以匹配4个模板宏块:左46,中左48,中右50和右52的搜索窗口200,是一个12×5的数据块的阵列。搜索窗口200的诸数据块的诸行被表示为诸块行‘A’到‘E’,其中的每一行具有16个像素行(例如,A0,A1到A15)。各数据块的列被表示为诸块列‘a’到‘l’。每一块列具有16个像素列,例如,对列‘a’来说,这16个像素列被标记为a0到a15。在搜索窗口中,并不是每一块都匹配于所有的模板宏块。每一个模板宏块针对一个9×5块的子窗口被搜索。因此,左模板宏块46针对包括诸行A到E的诸列‘a’到‘i’的各块被搜索。中左模板宏块48针对包括诸行A到E的诸列‘b’到‘j’的各块被搜索。中右模板宏块50针对包括诸行A到E的诸列‘c’到‘k’的各块被搜索。右模板宏块52针对包括诸行A到E的诸列‘d’到‘l’的各块被搜索。
在一个优选实施例中,将每一行的数据装载到上方和下方缓冲器以及像素从一个阵列到另一个阵列的移位跟SAD计算同时发生。但是,最初的一次装载并不要求跟数据处理同时发生。在处理能够开始之前,在各处理部件中的搜索窗口移位寄存器以及诸先进先出阵列都应当被填充以像素数据。此外,当搜索算法到达搜索窗口的底部时,在不跟数据处理同时发生的条件下,要求进行第二次装载。
在图3中被表示为LOAD#1的初次装载中,在行A中诸列‘a’到‘h’的各块中的像素数据被分别地装载到脉动阵列中的诸搜索阵列移位寄存器30,32,34,36,38,40,42,44(图2)。以一种向下的方向扫描搜索窗口直至到达行E,随后进行在图中被标记为LOAD#2的二次装载。从那里以一种向上的方向进行搜索,直至到达行A为止。图中的各大箭头表示每一次装载的扫描方向。
随着搜索窗口被扫描,在当前行的所有像素都已经被处理之后,像素数据从随后的行被装载到脉动阵列之中。在每一行中,根据搜索算法,像素数据被左移或右移到脉动阵列之中。
现在更详细地描述搜索算法。可以使用多种众所周知的技术来实施本发明的方法。最好是,使用各种流水线技术来实施本方法,以便使吞吐量最大化并使各种延时最小化。因此,虽然以下所描述的各种步骤以顺序的方式出现,但是它们也可以用流水线方法来实现,即允许它们以并行方式来进行。
图4示出了在搜索窗口中进行运动估计搜索的优选方法的高层的流程图。第一个步骤就是从存储着当前帧的存储器中,将像素数据装载到4个模板宏块46,,48,50,52中去(步骤90)。下一步,从上一帧(即,待搜索的数据)(步骤92)将像素数据装载到诸处理部件14,16,18,20中的搜索阵列移位寄存器30,32,34,36以及脉动阵列12中的诸先进先出阵列22,24,26,28(图2)。被装载的数据在图3中被表示为带阴影的区域LOAD#1,并且包括在块行A(即,诸行A0到A15)的诸列‘a0’到‘h15’中的像素数据。一旦诸搜索阵列移位寄存器以及诸模板宏块被装载,则通过在诸处理部件的4个SAD产生单元中的每一个,都可以产生第一个SAD(步骤94)。要注意的是,这4个SAD产生单元仅仅针对4个数据块,即,诸行A0到A15以及诸列a0到d15,计算一个SAD数值。在这4个SAD产生单元为它们的各自的模板宏块各计算一个SAD数值之后,在脉动阵列的各搜索阵列移位寄存器中的数据被循环左移一个像素(步骤98)。在这个步骤中,在搜索阵列移位寄存器30最左边一列的诸像素绕了一个大圈,即,循环左移到搜索阵列移位寄存器44的最右边一列,使得在各搜索阵列移位寄存器中的数据,从左到右,代表着在诸行A0到A15以及诸列a1,a2...h14,h15,a0中的像素数据。
一旦诸像素被循环移位,则4个SAD产生单元中的每一个将使用模板宏块数据以及在诸行A0到A15以及诸列a1到e0中的数据来计算一个SAD数值。接着,在当前循环中的SAD结果跟当前最小SAD进行比较。若当前初始的SAD小于最小值,则当前SAD就成为新的最小SAD。一旦完成第二次SAD计算,则在各搜索阵列移位寄存器中的数据再次被循环左移一个像素,使得在脉动阵列的各搜索阵列移位寄存器中的数据代表着在诸列a2,a3...h13,h14,a0,a1中从左到右读出的像素数据。
整个过程重复执行,直至原先位于搜索阵列移位寄存器38最左边一列的数据到达搜索阵列移位寄存器30的最左边一列为止,这意味着已经到达当前行的末尾(步骤96)。这出现在64次循环移位和计算循环之后。到了这一步,已经为行A的列‘a’到‘h’这8个块计算了SAD数值。针对每一个模板宏块,已有4个数据块被处理过。已经用诸列‘a’到‘e’中的诸像素对左模板宏块进行处理,用诸列‘b’到‘f’中的诸像素对中左模板宏块进行处理,用诸列‘c’到‘g’中的诸像素对中右模板宏块进行处理,用诸列‘d’到‘h’中的诸像素对右模板宏块进行处理。
一旦到达第一行的末尾,所有各搜索阵列移位寄存器都上移一个像素。接着,一个新的像素行,行B0,被移位到各搜索阵列移位寄存器,并且顶行,行A0,被移出并且被舍弃(步骤100)。因此,各搜索阵列移位寄存器从左到右含有在诸行A1到B0以及诸列e0,e1...h15,a0...e15中的像素数据。
然后处理过程以类似于以上所述诸步骤的方式继续进行。诸步骤包括首先为当前位于诸处理部件,例如,诸列e0到h15,中的各搜索阵列移位寄存器的数据计算SAD数值(步骤102)。接着,在脉动阵列中的各搜索阵列移位寄存器循环右移一个像素(步骤104)。在搜索阵列移位寄存器44最右边一列的像素列被循环移位到搜索阵列移位寄存器30的最左边一列,到了这一步,在各搜索阵列移位寄存器中的像素数据,代表着诸行A1到B0以及诸列d15,e0...h15,a0...d13,d14中的像素数据。然后,针对诸列d15到e14,计算SAD数值。计算SAD以及循环右移的诸步骤重复执行,直至到达该行的末尾为止(步骤106)。到了这一步,在各搜索阵列移位寄存器中的数据,从左到右,代表着诸列a0到h15。搜索窗口诸阵列再次被上移一个像素,并且来自行A1的数据被舍弃,而来自行B1的数据被装载到各搜索阵列移位寄存器里面。
上述过程重复执行,直至到达最后一行E15为止(步骤108)。按照下述步骤对搜索窗口进行扫描:先从左到右,然后向下,再从右到左,再向下,等等。当在诸处理部件的各搜索阵列移位寄存器中含有从诸列a0到d15的数据时,到了这一步,才对最后一行E15进行装载。在循环左移64次之后,在各搜索阵列移位寄存器中保留了从诸列e0到h15和诸行E0到E15的数据。到了这一步,进行数据的二次装载,在图中表示为阴影区域LOAD#2。在LOAD#2区域中的数据分别地被装载到各先进先出阵列22,24,26,28的各搜索阵列移位寄存器38,40,42,44里面(步骤110)。
其后使用在诸列e0到h15以及诸行E0到E15中的搜索窗口像素数据来计算SAD数值(步骤112)。在计算SAD数值之后,在各搜索阵列移位寄存器中的数据被循环左移一个像素(步骤114)。这些步骤被重复执行64次,直至在诸处理部件的各搜索阵列移位寄存器里面的数据符合于在诸列i0到l15中的像素数据为止。在数据处理的第一行的末尾,已经用诸列‘e’到‘i’中的诸像素对左模板宏块进行处理,用诸列‘f’到‘j’中的诸像素对中左模板宏块进行处理,用诸列‘g’到‘k’中的诸像素对中右模板宏块进行处理,用诸列‘b’到‘l’中的诸像素对右模板宏块进行处理。
一旦到达第一行的末尾(步骤116),所有各搜索阵列移位寄存器都下移一个像素,并且舍弃来自行E15的像素数据(步骤118)。在行D15的诸列e0到l15中的像素数据被装载到各搜索阵列移位寄存器里面。在诸处理部件的各搜索阵列移位寄存器中现在保存的数据对应于诸行D15到E14以及诸列i0到l15。随后进行SAD的计算(步骤120)并且各搜索阵列移位寄存器被循环右移一个像素(步骤122)。这些计算SAD以及循环右移一个像素的诸步骤被重复执行64个循环,直至到达行D15的末尾(步骤124)。
到了这一步,来自行E14的像素数据被舍弃,各搜索阵列移位寄存器下移一个像素,并且在行D14中的像素数据被装载到各搜索阵列移位寄存器里面。计算和循环移位的过程按照图中靠近LOAD#2区域的大箭头方向继续进行,直至到达最后一行,行A0,为止(步骤126)。在来自行A0的数据被处理之后,在诸处理部件的各搜索阵列移位寄存器中仍保存着来自诸行A0到A15以及诸列i0到l15的像素数据。
刚刚说明的用于搜索的优选方法是十分有效的,并且所需的访问存储器的次数是最少的。数据的二次装载发生在搜索窗口的底部角落之中,以便有效地使用在那段时间里保留在诸处理部件的各搜索阵列移位寄存器里面的数据。要注意的是,二次装载仅需要装载4个数据块,而不是如同在第一次装载中的8个数据块。这是由于这样一个事实,即,所需数据已经存放在各搜索阵列移位寄存器里面。此外,搜索的扫描图形与诸先进先出阵列的使用相结合,进一步地使所需的访问存储器的次数最小化。各种移位操作以及介于各阵列之间的循环移位通常比存储器访问快得多。
在一个可供选择的实施例中,二次装载可以这样进行,使得来自搜索窗口顶部角落的8个数据块的像素数据被装载到脉动阵列的各搜索阵列移位寄存器里面。图5说明了在一个可供选择的实施例中,搜索窗口内的4个模板宏块的相对位置,搜索窗口中被明确地装载到像素处理脉动阵列中去的那些部分,以及搜索的方向。首次装载,即,LOAD#178,装入来自行A的诸列‘a’到‘h’中的8个像素数据块,然而,二次装载,即,LOAD#280,则装入来自行A的诸列‘e’到‘l’的像素数据。由于需要装入16个像素数据块而不是12个,所以这个可供选择的实施例在速度和效率方面略逊一筹。然而,由于它在移位能力上仅需要3个方向,而不是4个,所以在硬件方面它是更加有效的。
在图6中示出了在本发明的一个可供选择的实施例中,在搜索窗口内进行运动估计搜索的方法的高层流程图。第一步就是用来自保存当前帧的存储器的像素数据去装载4个模板宏块46,48,50,52(步骤130)。下一步,用来自前一帧(即,待搜索的数据)的像素数据去装载在诸处理部件14,16,18,20的各搜索阵列移位寄存器30,32,34,36以及在脉动阵列12(图2)的先进先出阵列22,24,26,28中的各搜索阵列移位寄存器38,40,42,44(步骤132)。在图5中,已被装入的数据用阴影区域LOAD#178来表示,并且包括在块行A(即,诸行A0到A15)的诸列‘a0’到‘a15’中的像素数据。一旦各搜索阵列移位寄存器以及诸模板宏块被装入数据,借助于在诸处理部件中的诸SAD产生单元就能产生第一个SAD数值(步骤134)。要注意的是,仅仅针对4个数据块,即,诸行A0到A15以及诸列a0到d15,来计算一个SAD数值。在针对所有4个模板宏块计算出SAD数值之后,在脉动阵列的各搜索阵列移位寄存器中的数据被循环左移一个像素(步骤136)。在这个步骤中,在搜索阵列移位寄存器30最左边一列的诸像素绕了一个大圈,即,循环左移到搜索阵列移位寄存器44的最右边一列,使得在各搜索阵列移位寄存器中的数据,从左到右,代表着在诸行A0到A15以及诸列a1,a2...h14,h15,a0中的像素数据。
一旦诸像素被循环移位,则SAD产生单元将使用模板宏块数据以及在诸行A0到A15和诸列a1到e0中的数据来计算一个SAD数值。接着,在当前循环中的SAD结果跟当前最小SAD进行比较。若当前产生的SAD小于最小值,则当前SAD就成为新的最小SAD。一旦完成第二次SAD计算,则在各搜索阵列移位寄存器中的数据再次被循环左移一个像素,使得在脉动阵列的各搜索阵列移位寄存器中的数据代表着在诸列a2,a3...h13,h14,a0,a1中从左到右读出的像素数据。
整个过程重复执行,直至原先位于搜索阵列移位寄存器38最左边一列的数据到达搜索阵列移位寄存器30的最左边一列为止,这意味着已经到达当前行的末尾(步骤138)。这出现在64次循环移位和计算循环之后。到了这一步,已经为行A的列‘a’到‘h’这8个块计算了SAD数值。针对每一个模板宏块,已有4个数据块被处理过。已经用诸列‘a’到‘e’中的诸像素对左模板宏块进行处理,用诸列‘b’到‘f’中的诸像素对中左模板宏块进行处理,用诸列‘c’到‘g’中的诸像素对中右模板宏块进行处理,用诸列‘d’到‘h’中的诸像素对右模板宏块进行处理。
一旦到达第一行的末尾,所有各搜索阵列移位寄存器都上移一个像素。接着,一个新的像素行,行B0,被移位到各搜索阵列移位寄存器之中,并且顶行,行A0,被移出并且被舍弃(步骤140)。因此,各搜索阵列移位寄存器从左到右含有在诸行A1到B0以及诸列e0,e1...h15,a0...e15中的像素数据。
然后处理过程以类似于以上所述诸步骤的方式继续进行。诸步骤包括首先为当前位于诸处理部件,即,诸列e0到h15,中的各搜索阵列移位寄存器的数据计算SAD数值(步骤142)。接着,在脉动阵列中的各搜索阵列移位寄存器被循环右移一个像素(步骤144)。在搜索阵列移位寄存器44最右边一列的像素列被循环移位到搜索阵列移位寄存器30的最左边一列,到了这一步,在各搜索阵列移位寄存器中的像素数据,代表着诸行A1到B0以及诸列d15,e0...h15,a0...d13,d14中的像素数据。然后,针对诸列d15到e14,计算SAD数值。计算SAD以及循环右移的诸步骤重复执行,直至到达该行的末尾为止(步骤146)。到了这一步,在各搜索阵列移位寄存器中的数据,从左到右,代表着诸列a0到h15。搜索窗口诸阵列再次被上移一个像素,并且来自行A1的数据被舍弃,而来自行B1的数据被装载到各搜索阵列移位寄存器中去。
上述过程重复执行,直至到达最后一行E15为止(步骤148)。按照下述步骤对搜索窗口进行扫描:先从左到右,然后向下,再从右到左,再向下,等等。当在诸处理部件的各搜索阵列移位寄存器含有从诸列a0到d15的数据时,到了这一步,才对最后一行E15进行装载。在循环左移64次之后,在各搜索阵列移位寄存器中保留了从诸列e0到h15和诸行E0到E15的数据,这些数据是在二次装载时被重写的。在图7中表示为阴影区域LOAD#2中的二次装载数据,包括8个像素数据块。这些数据分别地被装载到各处理部件的各搜索阵列移位寄存器30,32,34,36以及各先进先出阵列的各搜索阵列移位寄存器38,40,42,44里面(步骤150)。
其后使用在诸行A0到A15的诸列e0到h15的搜索窗口像素数据来计算SAD数值(步骤152)。在计算SAD数值之后,在各搜索阵列移位寄存器中的数据被循环左移一个像素(步骤154)。这些步骤被重复执行64次,直至在诸处理部件的各搜索阵列移位寄存器里面的数据符合于在诸列i0到l15中的像素数据为止。在数据处理的第一行的末尾,已经用诸列‘e’到‘i’中的诸像素对左模板宏块进行处理,用诸列‘f’到‘j’中的诸像素对中左模板宏块进行处理,用诸列‘g’到‘k’中的诸像素对中右模板宏块进行处理,用诸列‘h’到‘l’中的诸像素对右模板宏块进行处理。
一旦到达第一行像素的末尾,在脉动阵列的所有各搜索阵列移位寄存器都上移一个像素,并且舍弃来自行A0的像素数据(步骤158)。在行B0的诸列e0到l15中的像素数据被装载到各搜索阵列移位寄存器里面。在诸处理部件的各搜索阵列移位寄存器中现在保存的数据对应于诸行A1到B0以及诸列i0到l15。随后进行SAD的计算(步骤160)并且各搜索阵列移位寄存器循环右移一个像素(步骤162)。这些计算SAD以及循环右移一个像素的诸步骤被重复执行64个循环,直至到达行B0的末尾(步骤164)。
到了这一步,来自行A1的像素数据被舍弃,各搜索阵列移位寄存器上移一个像素,并且在行B1中的像素数据被装载到各搜索阵列移位寄存器里面。计算和循环移位的过程按照图7中靠近LOAD#2区域的大箭头方向继续进行,直至到达最后一行,行E15,为止(步骤166)。在来自行E15的数据被处理之后,在诸处理部件的各搜索阵列移位寄存器中仍保存着来自诸行E0到E15以及诸列i0到l15的像素数据。
为了进一步地说明本发明的搜索方法,提供了一组表格,表1到6,这些表格显示在处理过程中,在一些特定的循环上8个搜索阵列移位寄存器30,32,34,36,38,40,42,44的内容(图2)。此外,还提供了一些相应的数字,用以说明在每一种场合下各模板宏块的相对位置。以下提供的诸表格和诸数字是在图6的流程图中所描述的搜索方法的主题范围内进行说明的。然而,专业人士将能针对图3所说明的搜索方法对以下的表格进行修改。此外,专业人士还能针对具有不同数目的处理部件以及先进先出阵列的各种结构生成类似的诸表格。以下所提供的6份表格对应于下列6种情形:1.在一次正常搜索中的4个模板宏块(TMBs)(表1/图5)2.邻接搜索窗口左边缘的4个TMB(表2/图7)3.邻接搜索窗口右边缘的4个TMB(表3/图8)4.邻接搜索窗口右边缘的3个TMB(表4/图9)5.邻接搜索窗口右边缘的2个TMB(表5/图10)6.邻接搜索窗口右边缘的1个TMB(表6/图11)
                   表1:无边缘搜索移位寄存器数据流w
 搜索方向     循环          搜索阵列移位寄存器
    左     右  30    32    34    36   38   40   42   44
LOAD#1向下     0     64  a     b     c     d    e    f    g    h
    16     48  b     c     d     e    f    g    h    a
    32     32  c     d     e     f    g    h    a    b
    48     16  d     e     f     g    h    a    b    c
    64     0  e     f     g     h    a    b    c    d
LOAD#2向下     0     64  e     f     g     h    j    j    k    l
    16     48  f     g     h     i    j    k    l    e
    32     32  g     h     i     j    k    l    e    f
    48     16  h     i     j     k    l    e    f    g
    64     0  i     j     k     l    e    f    g    h
该表分为两部分:一部分说明在LOAD#1之后的搜索方法,另一部分说明在LOAD#2之后的搜索方法。向下一词表示首先沿着向下的方向进行搜索,直至到达底行为止。随后,出现LOAD#2,并且沿着向下的方向继续进行搜索,直至再次到达底行为止。在循环(栏目)的左列表示在向左的方向上当前循环的计数。循环(栏目)的右列表示在向右的方向上该循环的计数。各小写字母表示在各搜索阵列移位寄存器中的数据来自那一列。共有8列数据,每一列代表了在一个搜索阵列移位寄存器中的数据。在图5中示出了4个模板宏块相对于搜索窗口的位置。
参看表1和图5,在LOAD#1之后,起初在第0次循环处,各搜索阵列移位寄存器装有位于诸列a...h的各顶行的像素数据。在16次时钟循环之后,在各移位寄存器中的数据已经被循环左移16次,使得在各移位寄存器中的数据对应于在诸列b...h,a中的数据。在另一组16次时钟循环之后,在各移位寄存器中的数据已经被循环左移32次,使得在各移位寄存器中的数据对应于在诸列c...h,a...b中的数据。这个过程继续进行直至出现64次时钟循环为止。现在,在各移位寄存器中的数据已经被循环左移64次,使得在各移位寄存器中的数据对应于在诸列e...h,a...d中的数据。到了这一步,移位的方向调转为向右,并且继续沿着向下的方向进行搜索。在16次时钟循环之后,在各移位寄存器中的数据已经被循环右移16次,使得在各移位寄存器中的数据对应于在诸列d...h,a...c中的数据。这个过程继续进行直至出现64次时钟循环为止,这时,在各移位寄存器中的数据对应于在诸列a...h中的数据。这种之字形的搜索模式继续进行下去,直至到达搜索窗口的最后一行为止,在进行LOAD#2之后,从搜索窗口的顶部出发,继续沿着向下的方向进行搜索。
一旦出现LOAD#2,就以类似于以前的方式,沿着向下的方向继续进行搜索。然而,这时,在搜索阵列移位寄存器中的数据对应于在诸列e...l中的数据。每经过16次时钟循环之后,在各移位寄存器中的数据被循环移位的数值相当于一个块列。在64次时钟循环之后,在各移位寄存器中的数据就对应于在诸列i...l,e...h中的数据。当再一次到达底行时,搜索结束。
在下面的表2中,参照于图7,提供了当各模板宏块邻接于搜索窗口的左边缘时,本例的搜索数据流。
                     表2:左边缘搜索移位寄存器数据流
搜索方向     循环        搜索阵列移位寄存器
  左   右   30  32  34  36  38  40  42   44
LOAD#1向下   0   64               a   b   c   d    e
  16   48           a   b   c   d   e
  32   32       a   b   c   d   e
  48   16   a   b   c   d   e
  64   0   b   c   d   e                a
LOAD#2向下   0   64   b   c   d   e   f   g   h
  16   48   c   d   e   f   g   h        b
  32   32   d   e   f   g   h       b    c
  48   16   e   f   g   h       b   c    d
  64   0   f   g   h       b   c   d    e
图7说明4个模板宏块相对于搜索窗口的位置。若各模板宏块以从左边开始、每次4块的方式被装载,则图7所示的方案是唯一可能的左边缘情形。表2的搜索方法类似于表1,所不同的是在LOAD#1 78和LOAD#2 80中所装载的是那些列的像素。由于左模板宏块46邻接于搜索窗口的左边缘,所以就没有需要搜索的区域。左模板宏块46仅需用列‘a’进行处理(其右边的4列,b...e,在LOAD#2循环中被处理);用列a,b来处理中左模板宏块48,用列a...c来处理中右模板宏块50,用列a...d来处理右模板宏块52,为了完成这一步,在LOAD#1过程中,分别将在诸列a...d的数据装载到各搜索阵列移位寄存器36,38,40,42。在64次循环之后,所有各模板宏块都已经被相应地处理完毕。
对于LOAD#2循环来说,需要用诸列b...e来处理左模板宏块;用诸列c...f来处理中左模板宏块;用诸列d...g来处理中右模板宏块;用诸列e...h来处理右模板宏块;为了完成这一步,在LOAD#2过程中,将在诸列a...h中的数据装载到各搜索阵列移位寄存器之中。在48次循环之后,所有各模板宏块都已经被相应地处理完毕。
在下面的表3中,示出了当4个模板宏块都邻接于搜索窗口的右边缘时的搜索数据流。
          表3:右边缘搜索移位寄存器数据流-4个模板宏块邻接于右边缘
 搜索方向        循环           搜索阵列移位寄存器
    左    右  30   32   34   36   38   40   42   44
LOAD#1向下     0    64  s    t    u    v    w    x    y    z
    16    48  t    u    v    w    x    y    z    s
    32    32  u    v    w    x    y    z    s    t
    48    16  v    w    x    y    z    s    t    u
    64    0  w    x    y    z    s    t    u    v
LOAD#2向下     0    64  w    x    y    z
    16    48  x    y    z                        w
    32    32  y    z                        w    x
    48    16  z                        w    x    y
    64    0                      w    x    y    z
如图8所示,在这种情况下,4个模板宏块都邻接于搜索窗口的右边缘。已经用最后8个英文字母来标注的诸列意味着这些列处于搜索窗口的右边缘。选用这些字母仅仅是为了说明的目的,并不暗示各搜索窗口仅有26列。本发明的方法可以应用于任意大小的各种搜索窗口。
因此,诸列s...z表示在搜索窗口中最右边的诸列。对于LOAD#1 78循环来说,应当用诸列s...v来处理左模板宏块;用诸列t...w来处理中左模板宏块;用诸列u...x来处理中右模板宏块;用诸列v...y来处理右模板宏块;为了完成这一步,在LOAD#1过程中,分别将在诸列s...z中的数据装载到各搜索阵列移位寄存器。在64次循环之后,所有各模板宏块都已经被相应地处理完毕。
然而,在本例中,由于不具备通常出现在各模板宏块右边的4列像素数据,所以,LOAD#2循环仅须处理较少的数据。因此,对于LOAD#2 80循环来说,应当仅用诸列w...z来处理左模板宏块;用诸列x...z来处理中左模板宏块;用诸列y,z来处理中右模板宏块;仅用列‘z’来处理右模板宏块;为了完成这一步,在LOAD#2过程中,分别将在诸列w...z中的数据装载到各搜索阵列移位寄存器30,32,34,36。在64次循环之后,所有各模板宏块都已经被相应地处理完毕。
     表4:右边缘搜索移位寄存器数据流-3个模板宏块邻接于右边缘
 搜索方向     循环         搜索阵列移位寄存器
  左   右 30   32   34   36   38   40  42   44
LOAD#1向下   0   64 t    u    v    w    x    y
  16   48 u    v    w    x    y             t
  32   32 v    w    x    y             t    u
  48   16 w    x    y              t   u    v
  64   0 x    y             t     u   v    w
LOAD#2向下   0   64 x    y    z
  16   48 y    z                            x
  32   32 z                            x    y
  48   16
  64   0
参看图9,在本例中,在处理过程中仅需要3个模板宏块:即,左46,中左48以及中右50这3个模板宏块。如同在在前面的实例中那样,各模板宏块邻接于搜索窗口的右边缘。由于仅有3个模板宏块,所以被处理的像素数据仅有7列,而不是8列。因此,在图9中的搜索窗口仅包括7列t...z。
对于LOAD#1 78循环来说,应当用诸列t...w来处理左模板宏块;用诸列u...x来处理中左模板宏块;用诸列v...y来处理中右模板宏块。为了完成这一步,在LOAD#1过程中,分别将在诸列t...y中的数据装载到各搜索阵列移位寄存器30,32,34,36,38,40里面。在64次循环之后,所有各模板宏块都已经被相应地处理完毕。
然而,在本例中,由于不具备通常出现在各模板宏块右边的4列像素数据,所以,LOAD#2循环仅须处理较少的数据。此外,那里仅有3个模板宏块。因此,对于LOAD#2 80循环来说,应当仅用诸列x...z来处理左模板宏块;用诸列y,z来处理中左模板宏块;仅用列‘z’来处理中右模板宏块。为了完成这一步,在LOAD#2过程中,分别将在诸列x...z中的数据装载到各搜索阵列移位寄存器30,32,34里面。在48次循环之后,所有各模板宏块都已经被相应地处理完毕。
    表5:右边缘搜索移位寄存器数据流-2个模板宏块邻接于右边缘
 搜索方向      循环       搜索阵列移位寄存器
  左   右   30  32  34  36  38  40  42  44
LOAD#1向下   0   64   u   v   w   x   y
  16   48   v   w   x   y               u
  32   32   w   x   y               u   v
  48   16   x   y               u   v   w
  64   0   y               u   v   w   x
LOAD#2向下   0   64   y   z
  16   48   z                           y
  32   32
  48   16
  64   0
参看图10,在本例中,在处理过程中仅需要2个模板宏块:即,左46,中左48这2个模板宏块。如同在在前面的实例中那样,各模板宏块邻接于搜索窗口的右边缘。由于仅有2个模板宏块,所以被处理的像素数据仅有6列,而不是8列。因此,在图10中的搜索窗口仅包括6列u...z。
对于LOAD#1 78循环来说,应当用诸列u...x来处理左模板宏块;用诸列v...y来处理中左模板宏块。为了完成这一步,在LOAD#1过程中,分别将在诸列u...y中的数据装载到各搜索阵列移位寄存器30,32,34,36,38里面。在64次循环之后,所有各模板宏块都已经被相应地处理完毕。
然而,在本例中,由于不具备通常出现在各模板宏块右边的4列像素数据,所以,LOAD#2循环仅须处理较少的数据。此外,那里仅有2个模板宏块。因此,对于LOAD#2 80循环来说,应当仅用诸列y,z来处理左模板宏块;仅用列‘z’来处理中左模板宏块。为了完成这一步,在LOAD#2过程中,分别将在诸列y,z中的数据装载到各搜索阵列移位寄存器30,32里面。在32次循环之后,所有各模板宏块都已经被相应地处理完毕。
    表6:右边缘搜索移位寄存器数据流-1个模板宏块邻接于右边缘
 搜索方向        循环       搜索阵列移位寄存器
   左    右 30  32  34  36  38  40  42  44
LOAD#1向下    0    64 v   w   x   y   z
   16    48 w   x   y   z               v
   32    24 x   y   z               v   w
   48    16 y   z               v   w   x
   64    0 z               v   w   x   y
参看图11,本例在处理过程中仅需要1个模板宏块:即,左模板宏块46。如同在前面的实例中那样,这个单独的模板宏块邻接于搜索窗口的右边缘。由于仅有1个模板宏块,所以被处理的像素数据仅有5列,而不是8列。因此,在图11中的搜索窗口仅包括5列v...z。此外,本例仅需要一次装载。
对于LOAD#1 78循环来说,应当用诸列v...z来处理左模板宏块。为了完成这一步,在LOAD#1过程中,分别将在诸列v...z中的数据装载到各搜索阵列移位寄存器30,32,34,36里面。在64次循环之后,所有各模板宏块都已经被相应地处理完毕。
上面已经用有限数目的诸实施例来说明本发明,与此同时,人们应当理解,对本发明还可以作出许多变动、修改以及应用于其他方面。更确切地说,本发明的范围仅由所附的权利要求书来规定。

Claims (13)

1.一种装置,用于降低在一个搜索窗口内针对预定义的模板数据来处理数据时所需的存储器带宽,包括:
多个处理部件,每一个处理部件包括:
一个第一搜索阵列移位寄存器,所述第一搜索阵列移位寄存器保存来自所述搜索窗口的一个数据块,所述第一搜索阵列移位寄存器能将其内容向左和向右循环移位,以及将其内容向上移位;
一个模板数据块,用于保存所述的一块预定义的模板数据;以及
函数装置,它被连接到所述第一搜索阵列移位寄存器以及所述模板数据块,所述函数装置用于根据所述第一搜索阵列移位寄存器以及所述模板数据块的诸内容来计算一个预定的函数;
多个先进先出阵列(FIFO),每一个先进先出阵列包括一个第二搜索阵列移位寄存器,所述第二搜索阵列移位寄存器保存来自所述搜索窗口的一个数据块,所述第二搜索阵列移位寄存器能将其内容向左和向右循环移位,以及将其内容向上移位;
其中所述多个处理部件以及所述多个先进先出阵列被安排成在一个线性阵列中互相邻接,使得每一个第一和第二搜索阵列移位寄存器都跟它的左右邻居相连接,在所述线性阵列两端的各搜索阵列移位寄存器互相连接;
其中所述搜索窗口数据在所述第一和第二搜索阵列移位寄存器中被移位,所述函数装置在每一次连续的移位过程中计算所述的预定函数;以及
在逐行的基础上以双向方式对所述搜索窗口进行搜索,由此,在所述搜索窗口每一行中的数据在所述第一和第二搜索阵列移位寄存器中被水平地循环移位,在每一行的末尾,在所述第一和第二搜索阵列移位寄存器中的数据被垂直地移位。
2.根据权利要求1所述装置,还包括一个上方缓冲器,它被连接到所述第一和第二搜索阵列移位寄存器以及所述搜索窗口,所述上方缓冲器用于缓冲存储所述搜索窗口的诸内容。
3.根据权利要求1所述装置,还包括一个下方缓冲器,它被连接到所述第一和第二搜索阵列移位寄存器以及所述搜索窗口,所述下方缓冲器用于缓冲存储所述搜索窗口的诸内容。
4.根据权利要求1所述装置,其中所述函数装置包括绝对差值求和产生单元。
5.根据权利要求1所述装置,其中所述第一和第二搜索阵列移位寄存器中的每一个各包括一个大小为16×16的阵列,每一个所述阵列容纳来自所述搜索窗口的数据。
6.根据权利要求1所述装置,其中所述诸模板数据块中的每一个都包括一个大小为16×16的阵列,每一个所述阵列都容纳模板数据。
7.一种用于降低在一个搜索窗口内针对预定义的模板数据来处理数据时所需的存储器带宽的装置,包括:
多个处理部件,每一个处理部件包括:
一个第一搜索阵列移位寄存器,所述第一搜索阵列移位寄存器保存来自所述搜索窗口的一个数据块,所述第一搜索阵列移位寄存器能将其内容向左和向右循环移位,以及将其内容向上和向下移位;
一个模板数据块,用于保存所述的一块预定义的模板数据;
函数装置,它被连接到所述第一搜索阵列移位寄存器以及所述模板数据块,所述函数装置用于根据所述第一搜索阵列移位寄存器以及所述模板数据块的诸内容来计算一个预定的函数;
多个先进先出阵列(FIFO),每一个先进先出阵列包括一个第二搜索阵列移位寄存器,所述第二搜索阵列移位寄存器保存来自所述搜索窗口的一个数据块,所述第二搜索阵列移位寄存器能将其内容向左和向右循环移位,以及将其内容向上和向下移位;
其中所述多个处理部件以及所述多个先进先出阵列被安排成在一个线性阵列中互相邻接,使得每一个第一和第二搜索阵列移位寄存器都跟它的左右邻居相连接,在所述线性阵列两端的各搜索阵列移位寄存器互相连接;
其中所述搜索窗口数据在所述第一和第二搜索阵列移位寄存器中被移位,所述函数装置在每一次连续的移位过程中计算所述的预定函数;以及
在逐行的基础上以双向方式对所述搜索窗口进行搜索,由此,在所述搜索窗口每一行中的数据在所述第一和第二搜索阵列移位寄存器中被水平地循环移位,在每一行的末尾,在所述第一和第二搜索阵列移位寄存器中的数据被垂直地移位。
8.根据权利要求7所述装置,还包括一个上方缓冲器,它被连接到所述第一和第二搜索阵列移位寄存器以及所述搜索窗口,所述上方缓冲器用于缓冲存储所述搜索窗口的诸内容。
9.根据权利要求7所述装置,还包括一个下方缓冲器,它被连接到所述第一和第二搜索阵列移位寄存器以及所述搜索窗口,所述下方缓冲器用于缓冲存储所述搜索窗口的诸内容。
10.根据权利要求7所述装置,其中所述函数装置包括绝对差值求和产生单元。
11.根据权利要求7所述装置,其中所述第一和第二搜索阵列移位寄存器中的每一个各包括一个大小为16×16的阵列,每一个所述阵列容纳来自所述搜索窗口的数据。
12.根据权利要求7所述装置,其中所述诸模板数据块中的每一个都包括一个大小为16×16的阵列,每一个所述阵列都容纳模板数据。
13.一种用于在一个搜索窗口内针对预定义的模板数据进行数据处理的方法,所述方法用于一个包括模板阵列装置以及搜索阵列移位寄存器装置的处理阵列,上述模板阵列装置用于存储所述模板数据,上述搜索阵列移位寄存器装置的宽度宽于所述模板阵列装置的宽度,用于存储来自所述搜索窗口的数据中的一部分,所述处理包括计算一个数值,该数值是所述模板数据以及所述搜索窗口数据的一个函数,所述方法包括下列诸步骤:
用所述模板数据装载所述模板阵列装置;
用所述搜索窗口数据的一个初次装载来装载所述搜索阵列移位寄存器;
重复下列诸步骤,直至到达所述搜索窗口的最后一行:
计算所述函数,并在所述搜索阵列移位寄存器装置中将该数据循环左移1位,重复这个计算和循环移位的步骤,直至到达当前数据行的末尾为止;
将所述搜索阵列移位寄存器装置上移1位,并且从所述搜索窗口装载下一行数据;
计算所述函数,并将所述搜索阵列移位寄存器装置循环右移1位,重复这个计算和循环移位的步骤,直至到达当前数据行的末尾为止;以及
将所述搜索阵列移位寄存器装置上移1位,并且从所述搜索窗口装载下一行数据。
CN97181311.6A 1996-12-03 1997-12-01 降低一个脉动阵列对存储器的带宽需求的装置与方法 Pending CN1253696A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/754,059 US5784108A (en) 1996-12-03 1996-12-03 Apparatus for and method of reducing the memory bandwidth requirements of a systolic array
US08/754,059 1996-12-03

Publications (1)

Publication Number Publication Date
CN1253696A true CN1253696A (zh) 2000-05-17

Family

ID=25033330

Family Applications (1)

Application Number Title Priority Date Filing Date
CN97181311.6A Pending CN1253696A (zh) 1996-12-03 1997-12-01 降低一个脉动阵列对存储器的带宽需求的装置与方法

Country Status (8)

Country Link
US (1) US5784108A (zh)
EP (1) EP0941608A4 (zh)
JP (1) JP2002511984A (zh)
CN (1) CN1253696A (zh)
AU (1) AU5133298A (zh)
CA (1) CA2273868A1 (zh)
IL (1) IL130280A0 (zh)
WO (1) WO1998025408A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106293635A (zh) * 2015-05-13 2017-01-04 华为技术有限公司 指令块处理方法及装置
CN110705703A (zh) * 2019-10-16 2020-01-17 北京航空航天大学 基于脉动阵列的稀疏神经网络处理器
CN110764602A (zh) * 2019-10-16 2020-02-07 北京航空航天大学 用于降低存储开销的汇流阵列

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0897247A3 (de) * 1997-08-14 2001-02-07 Philips Patentverwaltung GmbH Verfahren zur Berechnung von Bewegungsvektoren
JPH11168727A (ja) * 1997-12-02 1999-06-22 Mitsubishi Electric Corp 動きベクトル検出装置
US6301387B1 (en) * 1998-12-18 2001-10-09 University Of Washington Template matching using correlative auto-predictive search
JP2000308064A (ja) * 1999-04-22 2000-11-02 Mitsubishi Electric Corp 動きベクトル検出装置
EP1061747A1 (en) * 1999-05-25 2000-12-20 Deutsche Thomson-Brandt Gmbh Method and apparatus for block motion estimation
EP1056293A1 (en) * 1999-05-25 2000-11-29 Deutsche Thomson-Brandt Gmbh Method and apparatus for block motion estimation
US7225324B2 (en) * 2002-10-31 2007-05-29 Src Computers, Inc. Multi-adaptive processing systems and techniques for enhancing parallelism and performance of computational functions
WO2005041585A1 (en) * 2003-10-27 2005-05-06 Koninklijke Philips Electronics N.V. Power optimized collocated motion estimation method
NZ532757A (en) * 2004-05-04 2005-07-29 Canterprise Method and apparatus for identifying a maximum subarray
CN1328910C (zh) * 2005-03-10 2007-07-25 北京中星微电子有限公司 一种应用硬件实现运动估计时的搜索窗数据读取方法
US7716100B2 (en) * 2005-12-02 2010-05-11 Kuberre Systems, Inc. Methods and systems for computing platform
US20080260033A1 (en) * 2007-04-17 2008-10-23 Horizon Semiconductors Ltd. Hybrid hierarchical motion estimation for video streams
US8184696B1 (en) * 2007-09-11 2012-05-22 Xilinx, Inc. Method and apparatus for an adaptive systolic array structure
US20100074321A1 (en) * 2008-09-25 2010-03-25 Microsoft Corporation Adaptive image compression using predefined models
US10055672B2 (en) 2015-03-11 2018-08-21 Microsoft Technology Licensing, Llc Methods and systems for low-energy image classification
US10268886B2 (en) 2015-03-11 2019-04-23 Microsoft Technology Licensing, Llc Context-awareness through biased on-device image classifiers

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB8909498D0 (en) * 1989-04-26 1989-06-14 British Telecomm Motion estimator
JPH0832048B2 (ja) * 1990-01-23 1996-03-27 日本ビクター株式会社 動きベクトル検出装置
US5200820A (en) * 1991-04-26 1993-04-06 Bell Communications Research, Inc. Block-matching motion estimator for video coder
US5315388A (en) * 1991-11-19 1994-05-24 General Instrument Corporation Multiple serial access memory for use in feedback systems such as motion compensated television
US5594813A (en) * 1992-02-19 1997-01-14 Integrated Information Technology, Inc. Programmable architecture and methods for motion estimation
US5448310A (en) * 1993-04-27 1995-09-05 Array Microsystems, Inc. Motion estimation coprocessor
KR970010094B1 (en) * 1994-06-24 1997-06-21 Korea Telecommunication Improved motion vector extraction method
JP3089165B2 (ja) * 1994-11-10 2000-09-18 株式会社グラフィックス・コミュニケーション・ラボラトリーズ 動きベクトル探索装置
US5650823A (en) * 1995-03-27 1997-07-22 International Business Machines Corporation Half pel motion estimation method for B pictures

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106293635A (zh) * 2015-05-13 2017-01-04 华为技术有限公司 指令块处理方法及装置
CN106293635B (zh) * 2015-05-13 2018-10-30 华为技术有限公司 指令块处理方法及装置
CN110705703A (zh) * 2019-10-16 2020-01-17 北京航空航天大学 基于脉动阵列的稀疏神经网络处理器
CN110764602A (zh) * 2019-10-16 2020-02-07 北京航空航天大学 用于降低存储开销的汇流阵列
CN110764602B (zh) * 2019-10-16 2021-06-18 北京航空航天大学 用于降低存储开销的汇流阵列

Also Published As

Publication number Publication date
IL130280A0 (en) 2000-06-01
EP0941608A1 (en) 1999-09-15
AU5133298A (en) 1998-06-29
WO1998025408A1 (en) 1998-06-11
US5784108A (en) 1998-07-21
EP0941608A4 (en) 2001-08-29
JP2002511984A (ja) 2002-04-16
CA2273868A1 (en) 1998-06-11

Similar Documents

Publication Publication Date Title
CN1253696A (zh) 降低一个脉动阵列对存储器的带宽需求的装置与方法
US7020201B2 (en) Method and apparatus for motion estimation with all binary representation
US10387740B2 (en) Object detection and recognition apparatus based on CNN based integrated circuits
JP4493215B2 (ja) ウェーブレット係数の方向性予測コード化法を用いた画像圧縮
CN100342401C (zh) 基于段的运动估计
CN1297134C (zh) 用于扫描搜索区内参考宏块窗口的运动估计装置和方法
CN1157956C (zh) 运动估计器
CN1079555C (zh) 图象处理系统的边缘检测方法与装置
CN1455599A (zh) 图像和视频编码的2-d变换
EP1811453A1 (en) Method for speeding up super resolution processing
CN1126065C (zh) 压缩和解压缩图象
CN1791222A (zh) 对有损及无损的2-d数据压缩的可逆转换
CN1533675A (zh) 用于子像素运动估计的方法与仪器
CN101873490B (zh) 图像处理方法和使用该方法的图像信息编码设备
CN1110187C (zh) 选择运动矢量的方法及实现该方法的图象处理装置
US7979622B2 (en) Memory access method
CN1235483A (zh) 预测滤波器
Luo et al. A novel all-binary motion estimation (ABME) with optimized hardware architectures
CN1214648C (zh) 用于在纹理映射引擎中执行运动补偿的方法与设备
CN1852442A (zh) 一种分层运动估计方法和超大规模集成电路
CN1115880C (zh) 在运动估算系统中以矩阵阵列处理数据的方法
CN1510924A (zh) 图像处理装置
US20200304831A1 (en) Feature Encoding Based Video Compression and Storage
CN1719899A (zh) 针对块集合的编码选择运动矢量的方法与设备
CN1110209C (zh) 用于预测运动的设备及其相应的图像压缩系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication