具体实施方式
本原理针对视频编码和解码中模板匹配预测(TMP)的方法和装置。
本描述将举例说明本原理。因此,应该懂得,本领域的普通技术人员能够设想出尽管未明确描述或显示在本文中,但体现本原理和包括在它的精神和范围之内的各种安排。
本文阐述的所有例子和条件语言都是以教授为目的,以帮助读者理解本原理以及本发明人为促进技术进步而贡献的概念,并且应该理解成不局限于这样的具体阐述例子和条件。
此外,本文阐述本原理的各个原理、方面和实施例及其特定例子的所有语句旨在包含其结构和功能等效物两者。另外,这样的等效物旨在包括当前已知的等效物以及未来开发的等效物,即与结构无关,开发出来执行相同功能的任何元件。
因此,例如,本领域的普通技术人员应该懂得,本文所表示的方块图代表体现本原理的例示性电路的概念图。类似地,应该懂得,任何过程图、流程图、状态转变图、伪码等代表基本上可以表示在计算机可读媒体中,因此可以由计算机或处理器执行的各种进程,无论这样的计算机或处理器是否明确显示出来。
显示在图中的各种元件的的功能可以通过使用专用硬件以及能够与适当软件相联系执行软件的硬件来提供。当通过处理器提供时,这些功能可以由单个专用处理器、由单个共享处理器、或由一些可以共享的多个单独处理器提供。此外,术语“处理器”或“控制器”的显性使用不应该理解成排他地指能够执行软件的硬件,而是可以隐性地包括,但不局限于,数字信号处理器(“DSP”)硬件、存储软件的只读存储器(“ROM”)、随机访问存储器(“RAM”)以及非易失性存储器。
也可以包括传统的和/或定制的其它硬件。类似地,显示在图中的开关只是概念性的。它们的功能可以通过程序逻辑的运算、通过专用逻辑、通过程序控制和专用逻辑的交互、或甚至人工地实现,正如从上下文中更具体了解到的那样,特定的技术可由实现者选择。
在其权利要求书中,表达成执行特定功能的装置的任何元件旨在包含执行那种功能的任何方式,例如,包括a)执行那种功能的电路元件的组合,或b)任何形式的软件,因此包括与执行那种软件的适当电路结合执行该功能的固件、微码等。如这样的权利要求书定义的本原理在于以权利要求书要求的方式组合和汇集各种所述装置提供的功能。因此,应该认为可以提供那些功能的任何装置都等效于本文所示的那些装置。
在说明书中提到本原理的“一个实施例”或“实施例”以及它的各种变体意味着结合该实施例所述的特征、结构、特性等包括在本原理的至少一个实施例中。因此,出现在整个说明书中的各个地方的措词“在一个实施例中”或“在实施例中”以及任何其它变体的出现未必都指同一实施例。
应该懂得,如下“/”、“和/或”、和“至少一个”的任何一种的使用,例如,在“A/B”、“A和/或B”、和“A和B的至少一个”的情况下,旨在包含只有第一所列选项(A)的选择,或只有第二所列选项(B)的选择,或两个选项(A和B)的选择。作为进一步的例子,在“A、B、和/或C”和“A、B、和C的至少一个”的情况下,这样的措词旨在包含只有第一所列选项(A)的选择,或只有第二所列选项(B)的选择,或只有第三所列选项(C)的选择,或只有第一和第二所列选项(A和B)的选择,或只有第一和第三所列选项(A和C)的选择,或只有第二和第三所列选项(B和C)的选择,或所有三个选项(A、B和C)的选择。本领域的普通技术人员容易明白,对于列出的许多项目,可以依此类推。
此外,应该懂得,虽然本文针对MPEG-4AVC标准来描述本原理的一个或多个实施例,但本原理不只局限于这种标准,因此,可以在保持本原理的精神的同时,针对其其它视频编码标准、建议和外延,包括MPEG-4AVC标准的外延,来使用本原理。
并且,应该懂得,术语“预测”、“预测算子”、和“假设”在本文中可交换使用。
此外,应该懂得,如本文使用的术语“块”指的是宏块、宏块分区、子宏块、和子宏块分区的任何一种。此外,术语“块”也可以指,例如,从宏块、宏块分区、子宏块、和子宏块分区的任何一种中分割出来的楔块(wedge)。
另外,应该懂得,措词“显性编码”和“显性解码”分别指进行编码或解码使得与编码或解码有关的相应语法包括在位流(例如,包括语法对应于的视频内容的位流或分立位流)中的情况。相反,措词“隐性编码”和“隐性解码”分别指进行编码或解码使得与编码或解码有关的相应语法不包括在位流(例如,包括语法对应于的视频内容的位流或分立位流)中的情况。更确切地,可以从其它语法等中推出相应语法,等。
转到图3,可以应用本原理的示范性视频编码器用标号300总体表示。
该视频编码器300包括帧排序缓冲器310,它含有与组合器385的非反相输入端信号通信的输出端。组合器385的输出端被连接成与变换和量化器325的第一输入端信号通信。变换和量化器325的输出端被连接成与熵编码器345的第一输入端和逆变换和逆量化器350的第一输入端信号通信。熵编码器345的输出端被连接成与组合器390的第一非反相输入端信号通信。组合器390的输出端被连接成与输出缓冲器335的第一输入端信号通信。
编码器控制器305的第一输出端被连接成与帧排序缓冲器310的第二输入端、逆变换和逆量化器350的第二输入端、画面类型判定模块315的输入端、宏块类型(MB类型)判定模块320的第一输入端、帧内预测模块360的第二输入端、分块滤波器365的第二输入端、运动补偿和模板匹配预测器370的第一输入端、运动估计器375的第一输入端、和参考画面缓冲器380的第二输入端信号通信。
编码器控制器305的第二输出端被连接成与补偿增强信息(SEI)***器330的第一输入端、变换和量化器325的第二输入端、熵编码器345的第二输入端、输出缓冲器335的第二输入端、以及序列参数组(SPS)和画面参数组(PPS)***器340的输入端信号通信。
SEI***器330的输出端被连接成与组合器390的第二非反相输入端信号通信。
画面类型判定模块315的第一输出端被连接成与帧排序缓冲器310的第三输入端信号通信。画面类型判定模块315的第二输出端被连接成与宏块类型判定模块320的第二输入端信号通信。
序列参数组(SPS)和画面参数组(PPS)***器340的输出端被连接成与组合器390的第三非反相输入端信号通信。
逆变换和逆量化器350的输出端被连接成与组合器319的第一非反相输入端信号通信。组合器319的输出端被连接成与帧内预测模块360的第一输入端和分块滤波器365的第一输入端信号通信。分块滤波器365的输出端被连接成与参考画面缓冲器380的第一输出端信号通信。参考画面缓冲器380的输出端被连接成运动估计器375的第二输入端、运动补偿和模板匹配预测器370的第三输入端、和模板搜索器344的第一输出端信号通信。模板搜索器344的输出端被连接成与运动补偿和模板匹配预测器370的第四输入端信号通信。运动估计器375的第一输出端被连接成与运动补偿和模板匹配预测器370的第二输入端信号通信。运动估计器375的第二输出端被连接成与熵编码器345的第三输入端信号通信。运动估计器375的第三输出端被连接成与模板搜索器344的第二输入端信号通信。编码器控制器305的第三输出端被连接成与模板搜索器344的第三输入端信号通信。
运动补偿和模板匹配预测器370的输出端被连接成与开关397的第一输入端信号通信。帧内预测模块360的输出端被连接成与开关397的第二输入端信号通信。宏块类型判定模块320的输出端被连接成与开关397的第三输入端信号通信。开关397的第三输入端确定开关的“数据”输入(如与控制输入,即,第三输入相比)由运动补偿和模板匹配预测器370提供还是由帧内预测模块360提供。开关397的输出端被连接成与组合器319的第二非反相输入端信号通信以及与组合器385的反相输入端信号通信。
帧排序缓冲器310的第一输入端和编码器控制器305的输入端可作为编码器100的输入端用于接收输入画面。此外,补充增强信息(SEI)***器330的第二输入端可作为编码器300的输入端用于接收元数据。输出缓冲器335的输出端可作为编码器300的输出端用于输出位流。
转到图4,可以应用本原理的示范性视频解码器用标号400总体表示。
该视频解码器400包括输入缓冲器410,它含有连接成与熵解码器445的第一输入端信号通信的输出端。熵解码器445的第一输出端被连接成与逆变换和逆量化器450的第一输入端信号通信。逆变换和逆量化器450的输出端被连接成与组合器425的第二非反相输入端信号通信。组合器425的输出端被连接成与分块滤波器465的第二输入端和帧内预测模块460的第一输入端信号通信。分块滤波器465的第二输出端被连接成与参考画面缓冲器480的第一输入端信号通信。参考画面缓冲器480的输出端被连接成与模板搜索器444的第一输入端信号通信。模板搜索器444的输出端被连接成与运动补偿和模板匹配预测器470的第二输入端信号通信。
熵解码器445的第二输出端被连接成与运动补偿和模板匹配预测器470的第三输入端、分块滤波器465的第一输入端、和模板搜索器444的第二输入端信号通信。熵解码器445的第三输出端被连接成与解码器控制器405的输入端信号通信。解码器控制器405的第一输出端被连接成与熵解码器445的第二输入端信号通信。解码器控制器405的第二输出端被连接成与逆变换和逆量化器450的第二输入端信号通信。解码器控制器405的第三输出端被连接成与分块滤波器465的第三输入端信号通信。解码器控制器405的第四输出端被连接成与帧内预测模块460的第二输入端、运动补偿和模板匹配预测器470的第一输入端、参考画面缓冲器480的第二输入端、和模板搜索器444的第三输入端信号通信。
运动补偿和模板匹配预测器470的输出端被连接成与开关497的第一输入端信号通信。帧内预测模块460的输出端被连接成与开关497的第二输入端信号通信。开关497的输出端被连接成与组合器425的第一非反相输入端信号通信。
输入缓冲器410的输入端可作为解码器400的输入端用于接收输入位流。分块滤波器465的第一输出端可作为解码器400的输出端用于输出输出画面。
如上所述,本原理针对视频编码和解码中模板匹配预测(TMP)的方法和装置。
此外,如上所述,模板匹配预测的预测性能高度依赖于目标块与它的相应模板之间的关联性。在技术上众所周知,如图1所示,使用在顶部和/或左侧围绕目标块的重构像素。但是,以这样的方式利用模板匹配预测降低了编码器和解码器性能,尤其当模板与目标信号之间具有较弱关联性时。
我们认识到了这种局限性,因此为隐性运动推算假定了模板匹配预测的改进方法。因此,我们将描述多假设帧内预测的新模板匹配技术,其中一些假设的运动信息通过模板匹配推出。这样,模板匹配预测和显性运动预测的协同组合是有效的。这减少了运动信息的位速率开销,因此提高了编码效率。应该懂得,虽然本文主要以帧间预测为背景描述本原理的实施例,但给定本文提供的本原理的教导,本领域的普通技术人员容易理解,本原理也可以应用于帧内预测。
因此,依照本原理,我们将描述解决模板匹配预测的局限性以及显性和隐性多假设运动补偿预测的局限性的方法和装置。此外,尤其,我们描述使用模板匹配预测进行联合隐性和显性预测来改善多假设运动补偿预测。在以前的解决方案中,模板取自目标像素/块的重构周围像素。周围像素有时无法代表目标像素,因此模板匹配预测的性能可以低于传统块匹配方案。但是,依照本原理的一个或多个实施例,我们描述如图5所示,模板可以是目标像素/块的预测的方法和装置。转到图5,结合单次预测(单预测)的模板匹配预测(TMP)方案的一个例子用标号500总体表示。结合单次预测的模板匹配预测方案500涉及当前帧510、序列0中的参考帧520、和序列1中的参考帧530。当前帧510包括目标块511。序列0中的参考帧520包括预测521(也指定为“P0”)。序列1中的参考帧530包括预测531(也指定为“P1”)。运动向量MV0用于表示目标块511与预测521之间的运动。如果预测P0非常接近目标块,根据预测P0生成模板可以使模板匹配预测的执行非常有效。在一个实施例中,模板可以是当前块的帧间预测。在第二实施例中,模板可以是当前块的帧内预测。我们可以发送一些辅助信息来指示我们使用的确切预测,或者,我们可以假定一些默认预测。例如,在第一实施例中,我们可以假定帧间预测总是被取作从运动向量预测算子推出的那个,或从跳跃或直接模式中推出的运动向量中推出的那个,或者,我们可以显性地发送预测的运动向量信息。在第二实施例中,我们可以总是假定使用DC帧内预测,或我们可以发送辅助信息来指示使用MPEG-4AVC标准下的哪个帧内预测。在第三实施例中,我们可以使用来自空间相邻像素的模板搜索来填充目标块的模板。使用模式匹配的多假设
在这种方案中,模板通过帧内预测和显性运动估计获得。运动向量可以从像在MPEG4-AVC标准中的运动向量预测算子中推出,或可以显性地在位流中发送。然后,我们可以使用模板来搜索可用参考画面,以获取更多运动补偿预测。这样,我们可以利用显性运动估计和隐性运动估计两者。由于我们可以不引起更多开销地从相同或不同参考画面中获取多个预测,因此我们可以利用这种方法实现任意个假设。
在下文中,我们将描述使用模板匹配预测来改善多假设运动补偿预测的四个不同实施例。前两个实施例把注意力集中在B帧上。第三个实施例从多个参考画面的角度来讨论。本原理也可应用于P帧。在第四实施例中,我们描述这种方法如何也可以用于帧内画面编码。
第1实施例:结合单次参考序列预测(单预测)的TMP
在这个实施例中,对一个参考序列进行显性运动估计,以获取目标块的预测数据(P0),然后将它用作模板在其它参考序列中搜索以获取预测数据(P1)。然后,最终预测(P)是P0和P1的加权平均。权重可以是简单平均(权重等于0.5)或基于一些失真测量、到当前画面的参考距离等的其它权重。该例子例示在图5中。
这种手段可以容易地与像,例如,但不局限于,模式M×NL0或M×NL1那样MPEG-4AVC标准中的单预测模式结合,其中,M,N=16,8,4,L0和L1代表分别来自序列0或序列1的预测。我们可以在宏块水平或子宏块水平上加上标志,以指示将单预测还是结合模板匹配预测的双预测用于这种模式。
bi_tmp_flag等于1规定应用使用单预测和模板匹配预测的双预测。bi_tmp_flag等于0规定应用单预测。
依照一个实施例的16×16L0的一个示范性编码过程例示如下:
(1)对参考序列0中的16×16宏块进行运动估计以获取P0,并对P0计算RDcost。
(2)将P0用作模板在参考序列1中搜索以获取P1,并对0.5(P0+P1)计算RDcost。
(3)比较来自(1)和(2)的RDcost并设置bi_tmp_flag。如果(2)的RDcost小于(1)的RDcost,那么设置bi_tmp_flag=1;否则,设置bi_tmp_flag=0。
依照一个实施例的16×16L0的相应解码过程例示如下:
(1)分析和解码bi_tmp_flag的语法以及16×16L0的运动向量;
(2)对参考序列0中的16×16宏块进行运动补偿以获取P0;
(3)如果bi_tmp_flag=0,则停止;否则,
(4)将P0用作模板在参考序列1中搜索以获取P1,并获取像0.5(P0+P1)那样的最终预测。
我们应该注意到,对于模板搜索,模板尺寸可以不同于P0的尺寸。例如,我们可以取代16×16块尺寸,将8×8块尺寸用于具有16×16L0的P1的搜索来进行模板匹配预测。可替代地,我们可以使用我们可以通过并入P0的周围像素使模板的尺寸增大的20×20来进行模板匹配预测。
转到图6,使用结合单次参考序列预测(单预测)的模板匹配预测的一种视频编码方法用标号600总体表示。该方法600包括将控制交给判定块606的开始块603。判定块606确定当前模式是否是模板匹配预测(TMP)模式。如果是,则将控制交给判定块609。否则,将控制交给功能块663。
判定块609确定显性运动估计方向(向前L0还是向后L1)。如果显性运动估计方向是向后,则将控制交给功能块612。否则,将控制交给功能块627。
功能块612进行参考序列1中的运动估计,以获取预测P1和运动向量Mv,并将控制交给功能块615。功能块615根据P1进行参考序列0中的模板匹配以获取P0,并将控制交给功能块618。功能块618计算P=(P0+P1)/2,并将控制交给判定块621。判定块621确定P1的率失真成本,即Rd(P1)是否小于P的率失真成本,即Rd(P)。如果是,则将控制交给功能块624。否则,将控制交给功能块657。
功能块624设置bi_tmp_flag=0,设置Prediction=P1,并将控制交给功能块642。
功能块642计算残差,并将控制交给功能块645。功能块645计算预测的率失真,即Rd(Prediction),并将控制交给功能块648。功能块648进行模式选择,并将控制交给功能块651。功能块651编码运动向量Mv和其它语法,并将控制交给功能块654。功能块654编码残差,并将控制交给结束块699。
功能块657设置bi_tmp_flag=1,设置Prediction=P,并将控制交给功能块642。
功能块627进行参考序列0中的运动估计以获取预测P0和运动向量Mv,并将控制交给功能块630。功能块630根据P0进行参考序列1中的模板匹配,以获取P1,并将控制交给功能块633。功能块633计算P=(P0+P1)/2,并将控制交给判定块636。判定块636确定P0的率失真成本,即Rd(P0)是否小于P的率失真成本,即Rd(P)。如果是,则将控制交给功能块639。否则,将控制交给功能块660。
功能块639设置bi_tmp_flag=0,设置Prediction=P0,并将控制交给功能块642。
功能块660设置bi_tmp_flag=1,设置Prediction=P,并将控制交给功能块642。
功能块663使用非TMP模式编码,并将控制交给功能块648。
转到图7,使用结合单次参考序列预测(单预测)的模板匹配预测的一种视频解码方法用标号700总体表示。该方法700包括将控制交给功能块706的开始块703。功能块706分析语法,并将控制交给判定块709。判定块709确定当前模式是否是模板匹配预测(TMP)模式。如果是,则将控制交给功能块712。否则,将控制交给功能块751。
功能块712解码运动向量Mv、残差和bi_tmp_flag,并将控制交给判定块715。判定块715确定显示运动估计方向。如果显示运动估计方向是向后(BAK),则将控制交给功能块718。否则,将控制交给功能块730。
功能块718利用Mv获取参考序列1中的P1,并将控制交给判定块721。判定块721确定bi_tmp_flag=1是否成立。如果是,则将控制交给功能块724。否则,将控制交给功能块745。
功能块724根据P1进行参考序列0中的模板匹配以获取P0,并将控制交给功能块727。功能块727计算Prediction=(P0+P1)/2,并将控制交给功能块742。
功能块742将残差加入预测中,补偿当前块,并将控制交给结束块799。
功能块745设置Prediction=P0,并将控制交给功能块742。
功能块730利用Mv获取参考序列0中的P0,并将控制交给判定块733。判定块733确定bi_tmp_flag=1是否成立。如果是,则将控制交给功能块736。否则,将控制交给功能块748。
功能块736根据P0进行参考序列1中的模板匹配以获取P1,并将控制交给功能块739。功能块739计算Prediction=(P0+P1)/2,并将控制交给功能块742。
功能块748设置Prediction=P0,并将控制交给功能块742。
功能块751使用非TMP模式解码,并将控制交给结束块799。
第2实施例:结合双预测的TMP
在一个实施例中,进行传统双预测,然后针对一个参考序列中的每个预测,我们可以在其它参考序列中找到它的相应模板匹配预测。最终结束可以是3或4个假设预测。我们应该注意到,在这种手段中,当启用多个参考画面时,我们不将模板匹配预测限制在与用于显性预测的参考画面相同的参考画面。图8示出了这样的例子。转到图8,结合双预测的模板匹配预测的一个例子用标号800总体表示。结合双预测的模板匹配预测800涉及当前帧810、序列0中的参考帧1820、序列0中的参考帧0830、和序列1中的参考帧840。当前帧810包括目标块811,序列0中的参考帧1820包括预测821(也指定为“P3”),序列0中的参考帧0830包括预测831(也指定为“P3”)和预测832(也指定为“P0”),以及序列1中的参考帧840包括预测841(也指定为“P1”)和预测842(也指定为“P2”)。我们首先进行参考序列0中的运动估计以获取P0和参考序列1中的运动估计以获取P1,然后我们将P0用作模板在参考序列1中搜索以获取P2,并将P1用作模板在参考序列0中搜索以获取P3。当使用多个参考画面时,P3和P0无需处在同一参考画面中。运动向量MV0用于表示目标块811与预测832之间的运动,和运动向量MV1用于表示目标块811与预测841之间的运动。
这种手段可以容易地与像,例如,但不局限于,模式M×NBI或直接模式的MPEG-4AVC标准的双预测模式结合,其中,M,N=16,8,4,和BI代表双预测。我们可以在宏块水平或子宏块水平上加上标志,以规定当将模板匹配预测用于这种模式时进行多少种假设。
multi_tmp_mode等于0规定应用传统双预测。multi_tmp_mode等于1规定应用3种假设,并且进行传统双预测,以及将序列0的预测用作模板和在序列1中搜索的模板匹配预测。multi_tmp_mode等于2规定应用3种假设,并且进行传统双预测,以及将序列1的预测用作模板和在序列0中搜索的模板匹配预测。multi_tmp_mode等于3规定应用4种假设,并且进行传统双预测,以及将序列1的预测用作模板和在序列0中搜索的模板匹配预测、和将序列0的预测用作模板和在序列1中搜索的模板匹配预测。
依照一个实施例的16×16BI的一个示范性编码过程例示如下:
(1)对参考序列0中的16×16宏块进行运动估计以获取P0,对参考序列1中的16×16宏块进行运动估计以获取P1,并对(P0+P1)/2计算RDcost。
(2)将P0用作模板在参考序列1中搜索以获取P2,并对(P0+P1+P2)/3计算RDcost。
(3)将P1用作模板在参考序列0中搜索以获取P3,并对(P0+P1+P3)/3计算RDcost。
(4)对(P0+P1+P2+P3)/4计算RDcost。
(5)比较来自(1)、(2)、(3)和(4)的RDcost,
如果(1)的RDcost最小,则将multi_tmp_mode设置成0。
如果(2)的RDcost最小,则将multi_tmp_mode设置成1。
如果(3)的RDcost最小,则将multi_tmp_mode设置成2。
如果(4)的RDcost最小,则将multi_tmp_mode设置成3。
依照一个实施例的16×16BI的相应解码过程例示如下:
(1)分析和解码multi_tmp_mode的语法以及16×16BI的运动向量;
(2)对参考序列0中的16×16宏块进行运动补偿以获取P0,并且对参考序列1中的16×16宏块进行运动补偿以获取P1;
(3)如果multi_tmp_mode=0,那么,最终预测是(P0+P1)/2;否则,
(4)如果multi_tmp_mode=1,那么,将P0用作模板在参考序列1中搜索以获取P2,并获取像(P0+P1+P2)/3那样的最终预测;
(5)如果multi_tmp_mode=2,那么,将P1用作模板在参考序列0中搜索以获取P3,并获取像(P0+P1+P3)/3那样的最终预测;以及
(6)否则,获取像(P0+P1+P2+P3)/4那样的最终预测。
转到图9,使用结合双预测的模板匹配预测的一种视频编码方法用标号900总体表示。该方法900包括将控制交给判定块906的开始块903。判定块906确定当前模式是否是模板匹配预测(TMP)模式。如果是,则将控制交给功能块909。否则,将控制交给功能块954。
功能块909进行参考序列0中的运动估计,以获取预测P0和运动向量Mv0,并将控制交给功能块912。功能块912进行参考序列1中的运动估计,以获取预测P1和运动向量Mv1,并将控制交给功能块915。功能块915根据P0进行参考序列1中的模板匹配以获取P2,并将控制交给功能块918。功能块918根据P1进行参考序列0中的模板匹配以获取P3,并将控制交给功能块921。功能块921计算Pred0=(P0+P1)/2,Pred1=(P0+P1+P2)/3,Pred2=(P0+P1+P3)/3和Pred3=(P0+P1+P2+P3)/4,并将控制交给判定块924。判定块924确定Pred0、Pred1、Pred2和Pred3当中的哪个预测提供最小率失真(Rd)。如果Pred0提供最小Rd,则将控制交给功能块927。如果Pred1提供最小Rd,则将控制交给功能块930。如果Pred2提供最小Rd,则将控制交给功能块933。如果Pred3提供最小Rd,则将控制交给功能块936。
功能块927设置Multi_TMP_Mode=0,并将控制交给功能块939。
功能块930设置Multi_TMP_Mode=1,并将控制交给功能块939。
功能块933设置Multi_TMP_Mode=2,并将控制交给功能块939。
功能块936设置Multi_TMP_Mode=3,并将控制交给功能块939。
功能块939计算残差,并将控制交给功能块942。功能块942计算预测的率失真成本,即Rd(Prediction),并将控制交给功能块945。功能块945进行模式选择,并将控制交给功能块948。功能块948编码运动向量和其它语法,并将控制交给功能块951。功能块951编码残差,并将控制交给结束块999。
功能块954使用非TMP模式编码,并将控制交给功能块945。
转到图10,使用结合双预测的模板匹配预测的一种视频解码方法用标号1000总体表示。该方法1000包括将控制交给功能块1006的开始块1003。功能块1006分析语法,并将控制交给判定块1009。判定块1009确定当前模式是否是模板匹配预测(TMP)模式。如果是,则将控制交给功能块1012。否则,将控制交给功能块1045。
功能块1012进行运动补偿以获取序列0中的P0和序列1中的P1,并将控制交给判定块1015。判定块1015确定哪一种Multi_TMP_Mode。如果Multi_TMP_Mode是模式0,则将控制交给功能块1018。如果Multi_TMP_Mode是模式1,则将控制交给功能块1021。如果Multi_TMP_Mode是模式2,则将控制交给功能块1027。如果Multi_TMP_Mode是模式3,则将控制交给功能块1033。
功能块1018计算Pred=(P0+P1)/2,并将控制交给功能块1042。
功能块1021根据P0进行参考序列1中的模板匹配以获取P2,并将控制交给功能块1024。功能块1024计算Pred=(P0+P1+P2)/2,并将控制交给功能块1042。
功能块1027根据P1进行参考序列0中的模板匹配以获取P3,并将控制交给功能块1030。功能块1030计算Pred=(P0+P1+P3)/2,并将控制交给功能块1042。
功能块1033根据P0进行参考序列1中的模板匹配以获取P2,并将控制交给功能块1036。功能块1036根据P1进行参考序列0中的模板匹配以获取P3,并将控制交给功能块1039。功能块1039计算Pred=(P0+P1+P2+P3)/2,并将控制交给功能块1042。
功能块1042将残差加入预测,补偿当前块,并将控制交给结束块1099。
功能块1045使用非TMP模式解码,并将控制交给结束块1099。
在另一个实施例中,我们仍然使用bi_tmp-flag,其中bi_tmp_flag等于1规定最大(多达4个)不同运动补偿预测的多假设运动补偿预测。
在又一个实施例中,我们推广来自第一实施例的概念,但我们将模板设置成两个预测算子的平均值P2=(P0+P1)/2,然后我们使用这个模板从两个序列中的参考画面中搜索模板匹配预测P3。最后,我们求模板和模板匹配预测的平均(P2+P3)/2。
转到图11,使用结合双预测的模板匹配预测的另一种视频编码方法用标号1100总体表示。该方法1100包括将控制交给判定块1106的开始块1103。判定块1106确定当前模式是否是模板匹配预测(TMP)模式。如果是,则将控制交给功能块1109。否则,将控制交给功能块1145。
功能块1109进行参考序列0中的运动估计,以获取预测P0和运动向量Mv0,并将控制交给功能块1112。功能块1112进行参考序列1中的运动估计,以获取预测P1和运动向量Mv1,并将控制交给功能块1115。功能块1115设置模板P2=(P0+P1)/2,进行两个参考序列中的模板匹配以获取P3,并将控制交给功能块1118。功能块1118计算Pred0=(P0+P1)/2和Pred1=(P2+P3)/2,并将控制交给判定块1121。判定块1121确定哪个预测提供最小率失真(Rd)。如果Pred0提供最小Rd,则将控制交给功能块1124。如果Pred1提供最小Rd,则将控制交给功能块1127。
功能块1124设置bi_tmp_flag=0,并将控制交给功能块1130。
功能块1130计算残差,并将控制交给功能块1133。功能块1133计算预测的率失真,即Rd(Prediction),并将控制交给功能块1136。功能块1136进行模式选择,并将控制交给功能块1139。功能块1139编码运动向量和其它语法,并将控制交给功能块1142。功能块1142编码残差,并将控制交给结束块1199。
功能块1127设置bi_tmp_flag=1,并将控制交给功能块1130。
功能块1145使用非TMP模式编码,并将控制交给功能块1136。
转到图12,使用结合双预测的模板匹配预测的另一种视频解码方法用标号1200总体表示。该方法包括将控制交给功能块1210的开始块1205。功能块1210分析语法,并将控制交给判定块1215。判定块1215确定当前模式是否是TMP模式。如果是,则将控制交给功能块1220。否则,将控制交给功能块1250。
功能块1220进行运动补偿以获取序列0中的P0和序列1中的P1,并将控制交给判定块1225。判定块1225确定bi_tmp_flag的当前值等于0还是1。如果bi_tmp_flag的当前值等于0,则将控制交给功能块1230。否则,将控制交给功能块1235。
功能块1230计算Pred=(P0+P1)/2,并将控制交给功能块1245。
功能块1245将残差加入预测中,补偿当前块,并将控制交给结束块1299。
功能块1235设置模板P2=(P0+P1)/2,进行两个参考序列中的模板匹配以获取P3,并将控制交给功能块1240。功能块1240计算Pred=(P2+P3)/2,并将控制交给功能块1245。
功能块1250使用非TMP模式解码,并将控制交给结束块1299。
类似地,我们可以利用这种方法获取一个或多个模板匹配预测。此外,在另一个实施例中,可以通过如下平均获取最终预测:(P0+P1+P3)/3。另外的实施例可以考虑N个与P2最相似的小块的平均,和除了其它可能性之外,最终预测算子可以是如下平均:(P2+P3+...+PN)/(N-1)或(P0+P1+P3+...+PN)/N。
我们应该注意到,在这个实施例中,如果模板匹配预测与运动补偿预测相同,我们无需多加任何模板匹配预测,即所有多假设运动补偿预测都应该不同。
第3实施例:结合多个参考画面的模板匹配预测
在MPEG-4AVC标准中,可以应用多个参考画面来进一步提高编码效率。因此,我们无需将本发明限制在上面针对第1实施例和第2实施例所述的不同参考序列上。我们可以从一个参考画面中获取模板,然后在同一参考画面或处在或未处在同一画面序列中的其它参考画面中进行模板匹配预测搜索。这可以使我们利用一个参考序列实现本发明。也可以使我们对任意个假设运动补偿预测实现本发明。转到图13,结合多个参考画面的模板匹配预测的一个例子用标号1300总体表示。结合多个参考画面的模板匹配预测1300涉及当前帧1310、序列0中的参考帧11320、和序列0中的参考帧01330。当前帧1310包括目标块1311,序列0中的参考帧11320包括预测1321(也指定为“P1”),以及序列0中的参考帧01330包括预测1331(也指定为“P0”)。运动向量1340用于表示目标块1311与预测1331之间的运动。我们首先进行运动估计以获取参考序列0中的参考帧0中的P0。然后我们将P0用作模板在参考序列0中的其它参考画面(参考帧1)中搜索以获取P1。
当使用多个参考画面时,这种手段可以容易地与MPEG-4AVC标准的P画面中的预测模式结合。例如,该手段可以用于M×N模式或跳跃模式,其中,M或N可以等于16,8,的4的任何一个。我们可以在宏块水平或子宏块水平上加上标志,以指示当将模板匹配预测用于这种模式时进行多少种假设。
bi_tmp_flag等于1规定应用使用单预测和模板匹配预测的双预测。bi_tmp_flag等于0规定应用单预测。
依照一个实施例的16×16的一个示范性编码过程例示如下:
(1)对参考序列0中的16×16宏块进行运动估计以获取P0,并对P0计算RDcost。
(2)将P0用作模板在参考序列0的其它参考画面中搜索以获取P1,并对(P0+P1)/2计算RDcost。
(3)比较来自(1)和(2)的RDcost并设置bi_tmp_flag。如果(2)的RDcost小于(1)的RDcost,那么设置成bi_tmp_flag=1;否则,设置成bi_tmp_flag=0。
依照一个实施例的16×16的相应解码过程例示如下:
(1)分析和解码bi_tmp_fag的语法以及16×16的运动向量;
(2)对参考序列0中的16×16宏块进行运动补偿以获取P0;
(3)如果bi_tmp_flag=0,则停止;否则,
(4)将P0用作模板在参考序列0的其它参考画面中搜索以获取P1,并获取像0.5(P0+P1)那样的最终预测。
转到图14,使用结合多个参考画面的模板匹配预测的一种视频编码方法用标号1400总体表示。该方法1400包括将控制交给判定块1410的开始块1405。判定块1410确定当前模式是否是TMP模式。如果是,则将控制交给功能块1415。否则,将控制交给功能块1470。
功能块1415进行参考序列0中的运动估计,以获取预测P0和运动向量Mv,并将控制交给功能块1420。功能块1420根据P0进行序列0的其它参考画面中的模板匹配以获取P1,并将控制交给功能块1425。功能块1425计算P=(P0+P1)/2,并将控制交给判定块1430。判定块1430确定预测P0的率失真成本是否小于预测P的率失真成本,即Rd(P0)<Rd(P)是否成立。如果是,则将控制交给功能块1435。否则,将控制交给功能块1465。
功能块1435设置bi_tmp_flag=0,设置Prediction=P0,并将控制交给功能块1440。
功能块1440计算残差,并将控制交给功能块1445。功能块1445计算Rd(Prediction),并将控制交给功能块1450。功能块1450进行模式选择,并将控制交给功能块1455。功能块1455编码运动向量Mv和其它语法,并将控制交给功能块1460。功能块1460编码残差,并将控制交给结束块1499。
功能块1465设置bi_tmp_flag=1,设置Prediction=P,并将控制交给功能块1440。
功能块1470使用非TMP模式编码,并将控制交给功能块1450。
转到图15,使用结合多个参考画面的模板匹配预测的一种视频解码方法用标号1500总体表示。该方法1500包括将控制交给功能块1510的开始块1505。功能块1510分析语法,并将控制交给判定块1515。判定块1515确定当前模式是否是TMP模式。如果是,则将控制交给功能块1520。否则,将控制交给功能块1555。
功能块1520解码运动向量Mv、残差和bi_tmp_flag,并将控制交给功能块1525。功能块1525利用运动向量Mv获取参考序列0中的P0,并将控制交给判定块1530。判定块1530确定Bi_TMP_Flag是否等于1。如果是,则将控制交给功能块1535。否则,将控制交给功能块1550。
功能块1535根据P0进行序列0的其它参考画面中的模板匹配以获取P1,并将控制交给功能块1540。功能块1540计算Prediction=(P0+P1)/2,并将控制交给功能块1545。
功能块1545将残差加入预测中,补偿当前块,并将控制交给结束块1599。
功能块1550设置Prediction=P0,并将控制交给功能块1545。
功能块1555使用非TMP模式解码,并将控制交给结束块1599。
第4实施例:对于帧内画面编码结合定向帧内预测或位移帧内预测的TMP
在这个实施例中,对于帧内画面编码,我们可以使用MPEG-4AVC标准中的定向帧内预测,或使用位移帧内预测(DIP)填充目标块的模板。然后,我们通过结合模板搜索预测和定向/位移帧内预测应用多假设预测。
转到图16,将模板匹配预测用于帧内预测的另一种视频编码方法用标号1600总体表示。该方法1600包括将控制交给判定块1610的开始块1605。判定块1610确定当前模式是否是TMP模式。如果是,则将控制交给判定块1615。否则,将控制交给功能块1675。
判定块1615确定是否允许定向/位移帧内预测(DIP)。如果是,则将控制交给功能块1620。否则,将控制交给功能块1680。
功能块1620进行帧内运动估计以获取P0,并将控制交给功能块1625。
功能块1625根据P0进行帧内模板匹配(即,从当前帧的重构区中搜索模板)以获取P1,并将控制交给功能块1630。功能块1630计算P=(P0+P1)/2,并将控制交给判定块1635。判定块1635确定预测P0的率失真成本是否小于预测P的率失真成本,即Rd(P0)<Rd(P)是否成立。如果是,则将控制交给功能块1640。否则,将控制交给功能块1670。
功能块1640设置bi_tmp_flag=0,设置Pred=P0,并将控制交给功能块1645。
功能块1645计算残差,并将控制交给功能块1650。功能块1650计算Rd(Pred),并将控制交给功能块1655。功能块1655进行模式选择,并将控制交给功能块1660。功能块1660编码预测模式、运动向量和其它语法,并将控制交给功能块1665。功能块1665编码残差,并将控制交给结束块1699。
功能块1670设置bi_tmp_flag=1,设置Pred=P,并将控制交给功能块1645。
功能块1675使用非TMP模式编码,并将控制交给功能块1655。
转到图17,使用结合多个参考画面的模板匹配预测的另一种视频解码方法用标号1700总体表示。该方法1700包括将控制交给功能块1710的开始块1705。功能块1710分析语法,并将控制交给判定块1715。判定块1715确定当前模式是否是TMP模式。如果是,则将控制交给功能块1720。否则,将控制交给功能块1760。
功能块1720确定是否启用定向/位移帧内预测(DIP)。如果是,则将控制交给功能块1725。否则,将控制交给功能块1750。
功能块1725进行帧内运动补偿以获取P0,并将控制交给判定块1730。
判定块1730确定bi_tmp_flag=1是否成立。如果是,则将控制交给功能块1735。否则,将控制交给功能块1755。
功能块1735根据P0进行帧内模板匹配以获取P1,并将控制交给功能块1740。功能块1740计算P=(P0+P1)/2,并将控制交给功能块1745。
功能块1745将残差加入P中,补偿当前块,并将控制交给结束块1799。
功能块1750进行帧内预测以获取P0,并将控制交给判定块1730。
功能块1755设置P=P0,并将控制交给功能块1745。
功能块1760使用非TMP模式帧内解码,并将控制交给结束块1799。模板搜索简化
依照本原理的一个实施例,在编码器和解码器两者上进行模板搜索。这种直截了当的方法是使用完全(强制)搜索。但是,这种方法的计算复杂性相当高。为了降低复杂性,我们将描述和建议几种简化搜索算法的方法。在一个这样的实施例中,我们使用像,例如,菱形搜索、对数搜索、增强预测带搜索(EPZS)等那样的快速搜索算法。在这样实施例的第二实施例中,假定运动是线性的,我们可以从模板使用的运动向量中推出模板搜索预测算子,并按照从参考画面到目标画面的距离和方向缩放模板搜索预测算子。然后,我们将这个预测算子用作中心并进行细小改进。
对其它编码块的影响
TMP的运动向量
在MPEG-4AVC标准中,从相邻块预测当前块的运动向量。因此,当前块的运动向量的值将影响将来相邻块。由于我们具有显性运动向量和模板搜索运动向量,所以在我们应该使用哪个运动向量方面引起了与模板搜索块有关的问题。在第一实施例中,在完成了模板搜索之后,我们可以检索该模板的显性运动向量。将这个运动向量用于将来运动向量预测。在第二实施例中,我们假定运动向量是像0,或当前块的中间预测算子那样的某预测算子。
分块滤波
对于分块滤波,在第一实施例中,我们可以与显性运动估计块相同地对待模板匹配预测块,并像上述那样将运动向量用于模板匹配预测。然后,不改变分块过程。在第二实施例中,由于模板匹配预测具有与显性运动估计块不同的特性,所以我们可以相应调整块长、滤波类型、和/或滤波长度。
独立分析
为了将分析与解码过程分开,我们不能在分析时进行模板搜索。因此,在分析过程中,对于模板匹配预测的运动向量推出,如果使用TMP的运动向量的第1实施例(如上所述),那么,我们可以将第2实施例用于涉及通过其运动向量预测算子设置第二运动向量的分析,并且将第1实施例用于真正解码。
表1示出了依照本原理一个实施例的示范性切片首标语法。表2示出了依照本原理一个实施例的示范性宏块层语法。
表1
slice_header(){ |
C |
描述符 |
first_mb-in_slice |
2 |
ue(v) |
slice_type |
2 |
ue(v) |
pic_parameter_set_id |
2 |
ue(v) |
... |
|
|
if(slice_type!=1) |
|
|
tmp_enable_flag |
2 |
u(1) |
... |
|
|
下文将更详细描述来自表1和2的一些语法元素的语义。
tmp_enable_flag等于1规定对切片启用模板匹配预测。tmp_enable_flag等于0规定不对切片启用模板匹配预测。
bi_tmp_flag等于0规定不对宏块启用模板匹配预测。bi_tmp_flag等于1规定对宏块启用模板匹配预测。当bi_tmp_flag等于1时,对单个(单)预测模式应用单预测和模板匹配预测,并且对双向预测模式应用最大(多达4个)不同运动补偿预测的多假设运动补偿预测。
现在描述本发明的许多附带优点/特征的一些附带优,点/特征,其中一些上面已经提及。例如,一个优点/特征是含有编码器的装置,所述编码器通过确定目标块的至少一个预测算子并且分别将至少一个预测算子用作模板来搜索目标块的至少一个另外预测算子,编码画面中的目标块。
另一个优点/特征是如上所述的含有编码器的装置,其中至少一个预测算子是帧内预测算子、帧间预测算子、或它们的组合。
又一个优点/特征是如上所述的其中至少一个预测算子是帧内预测算子、帧间预测算子、或它们的组合的含有编码器的装置,其中至少一个预测算子的辅助信息是隐性编码和显性编码的至少一种。
再一个优点/特征是如上所述的含有编码器的装置,其中使用模板匹配预测过程和多假设运动补偿预测过程获取至少一个另外预测算子。
此外,另一个优点/特征是如上所述的其中使用模板匹配预测过程和多假设运动补偿预测过程获取至少一个另外预测算子的含有编码器的装置,其中使用显性运动估计过程来确定至少一个预测算子,以及使用模板匹配预测过程对多个参考序列搜索至少一个另外预测算子。
并且,另一个优点/特征是如上所述的其中使用显性运动估计过程和模板匹配预测过程的含有编码器的装置,其中显性运动估计过程局限于多个参考序列的特定一个,和模板匹配预测过程局限于多个参考序列的不同一个。
此外,另一个优点/特征是如上所述的其中使用显性运动估计过程和模板匹配预测过程的含有编码器的装置,其中至少一个预测算子包括通过分别对多个参考序列当中的第一参考序列和第二参考序列应用显性运动估计过程和隐性运动估计过程而获取的第一预测算子和第二预测算子,和其中至少一个另外预测算子包括关于第二参考序列和第一参考序列在模板匹配预测过程中分别利用第一预测算子和第二预测算子而获取的第一另外预测算子和第二另外预测算子。
另外,另一个优点/特征是如上所述的其中至少一个预测算子包括第一预测算子和第二预测算子以及至少一个另外预测算子包括第一另外预测算子和第二另外预测算子的含有编码器的装置,其中第一预测算子和第二另外预测算子处在不同参考画面中。
此外,另一个优点/特征是如上所述的其中使用显性运动估计过程和模板匹配预测过程的含有编码器的装置,其中显性运动估计过程用在与多个参考序列的特定一个相对应的特定一个参考画面中,以及模板匹配预测过程用在特定一个参考画面或与多个参考序列的不同一个相对应的不同参考画面中。
并且,另一个优点/特征是如上所述的其中使用模板匹配预测过程和多假设运动补偿预测过程获取至少一个另外预测算子的含有编码器的装置,其中使用运动向量预测算子推出或估计至少一个预测。
本领域的普通技术人员可以根据本文的教导轻易地弄清本原理的这些和其它特征和优点。应该明白,本原理的教导可以以硬件、软件、固件、专用处理器、或它们的组合的各种形式实现。
最可取的是,将本原理的教导实现成硬件和软件的组合。此外,软件可以实现成有形地具体化在程序存储单元上的应用程序。应用程序可以上载到包含任何适用结构的机器上并由它执行。优选地,在含有像一个或多个中央处理单元(“CPU”)、随机访问存储器(“RAM”)、和输入/输出(“I/O”)接口那样的硬件的计算机平台上实现该机器。该计算机平台还可以包括操作***和微指令代码。本文所述的各种过程和功能可以是可由CPU执行的部分微指令代码或部分应用程序,或它们的任何组合。另外,像附加数据存储单元和打印单元那样的各种其它***单元可以与计算机平台连接。
还应该明白,因为描绘在附图中的一些组分***部件和方法最好用软件实现,所以***部件或过程功能块之间的实际连接可能随编程本原理的方式而异。给定本文的教导,本领域的普通技术人员能够设想出本原理的这些和类似实现或配置。
尽管本文参照附图描述了一些例示性实施例,但应该明白,本原理不局限于那些确切实施例,本领域的普通技术人员可以不偏离本原理的精神或范围地实施各种改变和修正。所有这样的改变和修正都要包括在如所附权利要求书所述的本原理的范围之内。