具体实施方式
本原理针对运动信息的自适应编解码的方法和装置。
本描述说明本原理。因此,将认识到:本领域技术人员将能够设计出实施本原理并包括在本原理的精神和范围内的各种布置,尽管在这里没有明确地描述或示出所述布置。
在此叙述的所有示例和条件性语言意欲用于教导的目的以便帮助读者理解本原理以及由本发明人贡献以促进现有技术的构思,并且应该被解释为不限制这种具体叙述的示例和条件。
另外,在这里叙述本原理的原理、方面和实施例及其特定示例的所有陈述意欲包括其结构和功能等效物。另外,意图是:这样的等效物包括当前已知的等效物以及将来开发的等效物二者,即所开发的执行相同功能的任何元件,而不论其结构如何。
因此,例如,本领域技术人员将认识到:在此呈现的框图表示实施本原理的说明性电路的概念性视图。类似地,将认识到:任何流程图示(flowchart)、流程图(flowdiagram)、状态转换图、伪代码等表示实质上可以表示在计算机可读介质中并因此由计算机或处理器执行的各种处理,而不管是否明确地示出这样的计算机或处理器。
可以通过使用专用硬件以及与适当的软件相关联的能够执行软件的硬件来提供图中示出的各种元件的功能。当利用处理器来提供所述功能时,可以利用单个专用处理器、利用单个共享处理器、或者利用其中一些可被共享的多个独立处理器来提供所述功能。另外,术语“处理器”或“控制器”的明确使用不应该被解释为排他性地指代能够执行软件的硬件,而是可以隐含地无限制地包括数字信号处理器(“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标准的扩展在内的其它视频编码标准、建议及其扩展,以及专有和未来标准或方案使用本原理,同时保持本原理的精神。
此外,如这里所使用,词汇“画面”和“图像”可交换使用,并且都指代来自视频序列的静止图像或画面。众所周知,一个画面可以是一个帧或一个半帧。
另外,如这里所使用,词汇“传信”指代向相应解码器指示某种东西。例如,编码器可以传信给定运动矢量精度,以便使解码器知道在编码器侧使用了哪种特定运动矢量精度。这样,在编码器侧和解码器侧双方都可以使用相同运动矢量精度。因此,例如,编码器可以将特定运动矢量精度发送给解码器,以便解码器可以使用相同的特定运动矢量精度,或如果除了别的以外,解码器已经拥有特定运动矢量精度,则可以使用传信(不用发送)简单地使解码器知道和选择特定运动矢量精度。通过避免发送任何实际运动矢量精度,可以实现位节约。应当认识到,传信可以以多种方式完成。例如,可以使用一个或多个语法元素、标志等向相应解码器传信信息。
此外,如这里所使用,短语“局部画面区”指代视频序列的子集信号。局部画面区可以是许多相继帧、单个帧、许多时间和/或空间相邻块、和/或许多时间和/或空间相邻像素。
此外,如这里所使用,短语“全局运动信息”指代“画面区”中的主导运动。如这里所使用,短语“画面区”指代属于相同场景的许多帧、单个帧和/或单个帧中的一部分。下面提供全局运动信息的一些示例。在一个示例中,我们为特定画面区中的每个块估计运动,全局运动信息是这些块中的最常见运动。在另一个示例中例子,我们为特定画面区中的每个块估计运动,全局运动信息是对所有这些块求平均的运动。在又一个示例中,我们为特定画面区中的每个块估计运动,全局运动信息是所有这些块当中的中间运动。
转到图1,用标号100总体表示可以应用本原理的示例视频编码器。视频编码器100包括具有与组合器185的非反相输入端信号通信的输出端的帧排序缓冲器110。组合器185的输出端被连接成与变换器和量化器125的第一输入端信号通信。变换器和量化器125的输出端被连接成与熵编码器145的第一输入端和逆变换器和逆量化器150的第一输入端信号通信。熵编码器145的输出端被连接成与组合器190的第一非反相输入端信号通信。组合器190的输出端被连接成与输出缓冲器135的第一输入端信号通信。
编码器控制器105的第一输出端被连接成与帧排序缓冲器110的第二输入端、逆变换器和逆量化器150的第二输入端、画面类型判定模块115的输入端、宏块类型(MB类型)判定模块120的第一输入端、帧内预测模块160的第二输入端、去块滤波器165的第二输入端、运动补偿器170的第一输入端、运动估计器175的第一输入端、和参考画面缓冲器180的第二输入端信号通信。
编码器控制器105的第二输出端被连接成与补充增强信息(SEI)***器130的第一输入端、变换器和量化器125的第二输入端、熵编码器145的第二输入端、输出缓冲器135的第二输入端、和序列参数集(SPS)和画面参数集(PPS)***器140的输入端信号通信。
SEI***器130的输出端被连接成与组合器190的第二非反相输入端信号通信。
画面类型判定模块115的第一输出端被连接成与帧排序缓冲器110的第三输入端信号通信。画面类型判定模块115的第二输出端被连接成与宏块类型判定模块120的第二输入端信号通信。
序列参数集(SPS)和画面参数集(PPS)***器140的输出端被连接成与组合器190的第三非反相输入端信号通信。
逆变换器和逆量化器150的输出端被连接成与组合器119的第一非反相输入端信号通信。组合器119的输出端被连接成与帧内预测模块160的第一输入端和去块滤波器165的第一输入端信号通信。去块滤波器165的输出端被连接成与参考画面缓冲器180的第一输入端信号通信。参考画面缓冲器180的输出端被连接成与运动估计器175的第二输入端和运动补偿器170的第三输入端信号通信。运动估计器175的第一输出端被连接成与运动补偿170的第二输入端信号通信。运动估计器175的第二输出端被连接成与熵编码器145的第三输入端信号通信。
运动补偿器170的输出端被连接成与开关197的第一输入端信号通信。帧内预测模块160的输出端被连接成与开关197的第二输入端信号通信。宏块类型判定模块120的输出端被连接成与开关197的第三输入端信号通信。开关197的第三输入端确定开关的“数据”输入(如与控制输入,即,第三输入相比)由运动补偿170提供还是由帧内预测模块160提供。开关197的输出端被连接成与组合器119的第二非反相输入端和组合器185的反相输入端信号通信。
帧排序缓冲器110的第一输入端和编码器控制器105的输入端可作为编码器100的输入端用于接收输入画面。此外,补充增强信息(SEI)***器130的第二输入端可作为编码器100的输入端用于接收元数据。输出缓冲器135的输出端可作为编码器100的输出端用于输出位流。
转到图2,用标号200总体表示可以应用本原理的示例视频解码器。视频解码器200包括具有连接成与熵解码器245的第一输入端信号通信的输出端的输入缓冲器210。熵解码器245的第一输出端被连接成与逆变换器和逆量化器250的第一输入端信号通信。逆变换器和逆量化器250的输出端被连接成与组合器225的第二非反相输入端信号通信。组合器225的输出端被连接成与去块滤波器265的第二输入端和帧内预测模块260的第一输入端信号通信。去块滤波器265的第二输出端被连接成与参考画面缓冲器280的第一输入端信号通信。参考画面缓冲器280的输出端被连接成与运动补偿器270的第二输入端信号通信。
熵解码器245的第二输出端被连接成与运动补偿器270的第三输入端、去块滤波器265的第一输入端、和帧内预测器260的第三输入端信号通信。熵解码器245的第三输出端被连接成与解码器控制器205的输入端信号通信。解码器控制器205的第一输出端被连接成与熵解码器245的第二输入端信号通信。解码器控制器205的第二输出端被连接成与逆变换器和逆量化器250的第二输入端信号通信。解码器控制器205的第三输出端被连接成与去块滤波器265的第三输入端信号通信。解码器控制器205的第四输出端被连接成与帧内预测模块260的第二输入端、运动补偿器270的第一输入端、和参考画面缓冲器280的第二输入端信号通信。
运动补偿器270的输出端被连接成与开关297的第一输入端信号通信。帧内预测模块260的输出端被连接成与开关297的第二输入端信号通信。开关297的输出端被连接成与组合器225的第一非反相输入端信号通信。
输入缓冲器210的输入端可作为解码器200的输入端用于接收输入位流。去块滤波器265的第一输出端可作为解码器200的输出端用于输出输出画面。
如上所述,本原理针对运动信息的自适应编解码的方法和装置。因此,依照本原理,将自适应运动信息表示和压缩途径用于通过更好地利用运动信息与视频内容之间的关联性来提高视频编解码性能。该途径通过考虑运动场、视频内容、编解码模式、和编解码效率,自适应地以不同精度水平表示运动矢量,而不会因自适应而引起额外位开销(或至少限制了额外位开销)。分区大小自适应
在典型基于块的视频编解码方案中,将一个画面划分成众多非重叠块。最佳块形状和大小取决于视频内容和编解码方案。MPEG-4AVC标准支持16x16,16x8,8x16,8x8,8x4,4x8,和4x4块。正如我们看到的那样,较大块含有比较小块多的像素。运动补偿误差由来自每个像素的误差贡献。如果一个块包括多个像素,假设来自每个像素的误差是一样的,则那个块有相对较高的可能性具有较大补偿误差。因此,与较小块相比,我们偏向于将较高精度运动矢量用于较大块。因此,在一个实施例中,我们使运动矢量精度适应分区大小。
一般说来,我们可以将较高精度用于较大块的运动矢量,因为较大块覆盖视频中的较大面积,如果得不到正确补偿,有很大可能贡献大量失真。表1示出了依照本原理的实施例,将不同块大小分类成不同精度水平。当然,应该懂得,本原理不局限于前面的分类,因此,在保持本原理的精神的同时,也可以依照本原理的教导使用其它分类。
表1
水平 |
分区大小 |
运动矢量精度 |
0 |
16x16,16x8,8x16 |
1/8像素 |
1 |
8x8 |
1/4像素 |
2 |
8x4,4x8,4x4 |
1/2像素 |
每个块的运动矢量用那个水平的相应精度表示。根据已经发送的分区大小,没有花费在运动矢量精度自适应上的附加位速率。
转到图3,用标号300总体表示根据分区大小使用运动信息的自适应编解码来编码画面数据的一种示例方法。方法300包括将控制交给功能块310的开始块305。功能块310设置motion_accuracy_adaptive_flag=1,设置mv_accuracy_adaptation_mode=0,将motion_accuracy_adaptive_flag和mv_accuracy_adaptation_mode写入位流中,并将控制交给循环限制块312。循环限制块312使用范围从1到块数#的变量I开始循环,并将控制交给功能块315。功能块315进行运动估计,并将控制交给功能块320。功能块320按如下根据分区大小量化来自运动估计(由功能块315进行)的所得运动矢量,此后将控制交给功能块325:16x16,16x8,和8x16分区大小使用1/8像素精度;8x8分区大小使用1/4像素精度;以及8x4,4x8,和4x4分区大小使用1/2像素精度。功能块325进行运动补偿,并将控制交给功能块330。功能块330进行熵编码,并将控制交给循环限制块332。循环限制块332结束循环,并将控制交给结束块399。
转到图4,用标号400总体表示根据分区大小使用运动信息的自适应编解码来解码画面数据的一种示例方法。方法400包括将控制交给功能块410的开始块405。功能块410解析motion_accuracy_adaptive_flag和mv_accuracy_adaptation_mode,并将控制交给循环限制块412。循环限制块412使用范围从1到块数(#)的变量I开始循环,并将控制交给功能块413。功能块413解析运动矢量(MV)语法,并将控制交给判定块415。判定块415确定motion_accuracy_adaptive_flag==1和mv_accuracy_adaptation_mode==0是否成立。如果是,则将控制交给功能块420。否则,则将控制交给功能块417。功能块420按如下根据分区大小确定精度解码运动矢量,此后将控制交给功能块425:16x16,16x8,和8x16分区大小使用1/8像素精度;8x8分区大小使用1/4像素精度;以及8x4,4x8,和4x4分区大小使用1/2像素精度。功能块425进行运动补偿,并将控制交给循环限制块427。循环限制块427结束循环,并将控制交给结束块499。功能块417使用统一精度或其它自适应精度方法重构运动矢量,并将控制交给功能块425。
运动矢量方向自适应
在大多数运动矢量表示中,运动矢量是描述沿着水平和垂直方向两者的运动的二维矢量。通常,运动矢量在两个方向具有相同精度。但是,并不要求在不同方向具有相同精度,尤其当我们拥有一些有关运动的先验信息时。例如,如果视频具有主导的水平运动(像摄像机摇拍那样),则我们可以在水平方向提供较高精度,以便更好地表示运动信息。我们也可以利用整数运动幅度、分区形状、运动矢量预测量或全局运动信息,以便传信高精度运动方向。因此,在一个实施例中,我们使运动矢量精度适应运动矢量的一个或多个特定方向。
在一个实施例中,我们利用运动矢量预测量来导出主导运动方向。我们对主导运动方向指定较高运动矢量精度(与非主导运动方向相比)。运动矢量预测量mvp=[mvp_x,mvp_y]可以如MPEG-4AVC标准所述,通过检验相邻块的运动矢量获得。我们定义如下参数:
通过检验θ(mvp),我们可以按如下判定哪个方向使用较高精度:
其中,res(mv_x)和res(mv_y)是mv_x和mv_y的各自分辨率(即,精度),以及th1和th2是在不同方向确定运动矢量的精度的两个阈值。
通过使用这种方案,我们可以不引起额外开销地使运动矢量的精度适应不同方向。
转到图5,用标号500总体表示根据运动矢量方向使用运动信息的自适应编解码来编码画面数据的一种示例方法。方法500包括将控制交给功能块510的开始块505。功能块510设置motion_accuracy_adaptive_flag=1,设置mv_accuracy_adaptation_mode=1,将motion_accuracy_adaptive_flag和mv_accuracy_adaptation_mode写入位流中,并将控制交给循环限制块512。循环限制块512使用范围从1到块数(#)的变量I开始循环,并将控制交给功能块515。功能块515进行运动估计,并将控制交给功能块520。功能块520根据如下的一个或多个导出主导分量并设置res_x和res_y,此后将控制交给功能块525:运动矢量预测量;相邻运动矢量;分区形状;整数运动幅度;全局运动;和/或率失真成本。功能块525根据res_x和res_y量化运动矢量分量,并将控制交给功能块530。功能块530进行运动补偿,并将控制交给功能块535。功能块535进行熵编码,并将控制交给循环限制块537。循环限制块537结束循环,并将控制交给结束块599。
转到图6,用标号600总体表示根据运动矢量方向使用运动信息的自适应编解码来解码画面数据的一种示例方法。方法600包括将控制交给功能块610的开始块605。功能块610解析motion_accuracy_adaptive_flag和mv_accuracy_adaptation_mode,并将控制交给循环限制块612。循环限制块612使用范围从1到块数(#)的变量I开始循环,并将控制交给功能块613。功能块613解析运动矢量(MV)语法,并将控制交给判定块615。判定块615确定motion_accuracy_adaptive_flag==1和mv_accuracy_adaptation_mode==1是否成立。如果是,则将控制交给功能块620。否则,则将控制交给功能块617。功能块620根据如下的一个或多个导出主导分量并设置res_x和res_y,此后将控制交给功能块625:运动矢量预测量;相邻运动矢量;分区形状;整数运动幅度;全局运动;和/或率失真成本。功能块625根据res_x和res_y解码运动矢量,并将控制交给功能块630。功能块630进行运动补偿,并将控制交给循环限制块632。循环限制块632结束循环,并将控制交给结束块699。功能块617使用统一精度或其它自适应精度方法重构运动矢量,并将控制交给功能块630。
QP自适应运动矢量精度
视频编码器使用量化参数QP来控制编码视频的质量。当量化参数大时,参考帧(前编码帧的重构)的质量就低。尤其,随着在编码处理中除去大多数细节,参考帧倾向于变平滑。因此,差异小的运动矢量可以给出非常相似的预测,并且高精度的运动矢量是没有必要的。因此,在一个实施例中,我们使运动矢量精度适应一个或多个量化参数。
在一个实施例中,使运动矢量精度适应编码量化参数(QP)或量化步长。让我们假设mv是通过运动估计找到的运动矢量,并且mvp是预测运动矢量。其差值表示成mvd,其中mvd=mv-mvp。设mvq是发送给解码器的量化mvd,其中mvd=Q(mvd,q_mv)并且其中Q是mvd量化处理,并且q-mv是量化步长(例如,q-mv=0.5意味着二分之一像素精度,q-mv=0.25意味着四分之一像素精度等等)。我们设运动矢量精度是编码QP的函数q-mv=f(QP)。例如,当QP小于阈值时,选择q-mv的小值。否则,当QP大于阈值时,选择q-mv的较大值。
转到图7,用标号700总体表示根据量化参数使用运动信息的自适应编解码来编码画面数据的一种示例方法。方法700包括将控制交给功能块710的开始块705。功能块710设置motion_accuracy_adaptive_flag=1,设置mv_accuracy_adaptation_mode=2,将motion_accuracy_adaptive_flag和mv_accuracy_adaptation_mode写入位流中,并将控制交给循环限制块712。循环限制块712使用范围从1到块数(#)的变量I开始循环,并将控制交给功能块715。功能块715进行运动估计,并将控制交给功能块720。功能块720根据编码量化参数选择运动矢量精度,使用所选运动矢量精度量化来自运动估计(由功能块715进行)的所得运动矢量,并将控制交给功能块725。功能块725进行运动补偿,并将控制交给功能块730。功能块730进行熵编码,并将控制交给循环限制块732。循环限制块732结束循环,并将控制交给结束块799。
转到图8,用标号800总体表示根据量化参数使用运动信息的自适应编解码来解码画面数据的一种示例方法。方法800包括将控制交给功能块810的开始块805。功能块810解析motion_accuracy_adaptive_flag和mv_accuracy_adaptation_mode,并将控制交给循环限制块812。循环限制块812使用范围从1到块数(#)的变量I开始循环,并将控制交给功能块813。功能块813解析运动矢量(MV)语法,并将控制交给判定块815。判定块815确定motion_accuracy_adaptive_flag==1和mv_accuracy_adaptation_mode==2是否成立。如果是,则将控制交给功能块820。否则,则将控制交给功能块817。功能块820从量化参数(QP)中获取运动矢量精度,从接收运动矢量指数中重构运动矢量,并将控制交给功能块825。功能块825进行运动补偿,并将控制交给循环限制块827。循环限制块827结束循环,并将控制交给结束块899。功能块817使用统一精度或其它自适应精度方法重构运动矢量,并将控制交给功能块825。
内容自适应运动矢量精度
对于视频信号中的平滑区,差异小的运动矢量可以提供非常相似的预测,并且因此从高精度运动矢量中获得的好处有限。另一方面,对于对象边缘和有纹理区域,预测值与当前信号的微小失配可以极大地扩大预测误差,因此精确的运动矢量是非常期望的。考虑到这种关系,在一个实施例中,我们使运动矢量精度适应画面(或序列)内容。
在一个实施例中,运动矢量精度是响应于画面内容自适应的。设S是视频序列的子集信号。S可以是许多相继帧,单个帧或许多相邻块。将h(S)定义成S的复杂函数。例如,h(S)可以是S中的像素的方差,重构残差的方差,或S中的边缘的取向和强度的方差。S的运动矢量精度q_mv的值根据h(S)来选择。例如,当内容具有高复杂性并且h(S)大时,则q_mv的值就小。另一方面,当内容具有低复杂性并且h(S)小时,则q_mv的值就大。对于这个实施例,q_mv可以由编码器发送(显性传信)或可以在解码器上推测(隐性传信)。
转到图9,用标号900总体表示根据显性传信的视频内容使用运动信息的自适应编解码来编码画面数据的一种示例方法。方法900包括将控制交给功能块910的开始块905。功能块910设置motion_accuracy_adaptive_flag=1,设置mv_accuracy_adaptation_mode=3,将motion_accuracy_adaptive_flag和mv_accuracy_adaptation_mode写入位流中,并将控制交给循环限制块912。循环限制块912使用范围从1到块数(#)的变量I开始循环,并将控制交给功能块915。功能块915进行运动估计,并将控制交给功能块920。功能块920根据局部画面区的统计量,例如,像素方差、边缘取向、强度等选择运动矢量精度,并将控制交给功能块925。功能块925根据所选精度量化运动矢量,并将控制交给功能块930。功能块930发送运动矢量精度(例如,向相应解码器),并将控制交给功能块935。功能块935进行运动补偿,并将控制交给功能块940。功能块940进行熵编码,并将控制交给循环限制块942。循环限制块942结束循环,并将控制交给结束块999。
转到图10,用标号1000总体表示根据显性传信的视频内容使用运动信息的自适应编解码来解码画面数据的一种示例方法。方法1000包括将控制交给功能块1010的开始块1005。功能块1010解析motion_accuracy_adaptive_flag和mv_accuracy_adaptation_mode,并将控制交给循环限制块1012。循环限制块1012使用范围从1到块数(#)的变量I开始循环,并将控制交给功能块1013。功能块1013解析运动矢量(MV)语法,并将控制交给判定块1015。判定块1015确定motion_accuracy_adaptive_flag==1和mv_accuracy_adaptation_mode==3是否成立。如果是,则将控制交给功能块1020。否则,则将控制交给功能块1017。功能块1020解析运动矢量精度,并将控制交给功能块1025。功能块1025从接收的运动矢量指数中重构运动矢量,并将控制交给功能块1030。功能块1030进行运动补偿,并将控制交给循环限制块1032。循环限制块1032结束循环,并将控制交给结束块1099。功能块1017使用统一精度或其它自适应精度方法重构运动矢量,并将控制交给功能块1030。
转到图11,用标号1100总体表示根据隐性传信的视频内容使用运动信息的自适应编解码来编码画面数据的一种示例方法。方法1100包括将控制交给功能块1110的开始块1105。功能块1110设置motion_accuracy_adaptive_flag=1,设置mv_accuracy_adaptation_mode=4,将motion_accuracy_adaptive_flag和mv_accuracy_adaptation_mode写入位流中,并将控制交给循环限制块1112。循环限制块1112使用范围从1到块数(#)的变量I开始循环,并将控制交给功能块1115。功能块1115进行运动估计,并将控制交给功能块1120。功能块1120根据局部画面区的统计量,例如,重构画面方差等选择运动矢量精度,并将控制交给功能块1125。功能块1125根据所选精度量化运动矢量,并将控制交给功能块1130。功能块1130进行运动补偿,并将控制交给功能块1135。功能块1135进行熵编码,并将控制交给循环限制块1137。循环限制块1137结束循环,并将控制交给结束块1199。
转到图12,用标号1200总体表示根据隐性传信的视频内容使用运动信息的自适应编解码来解码画面数据的一种示例方法。方法1200包括将控制交给功能块1210的开始块1205。功能块1210解析motion_accuracy_adaptive_flag和mv_accuracy_adaptation_mode,并将控制交给循环限制块1212。循环限制块1212使用范围从1到块数(#)的变量I开始循环,并将控制交给功能块1213。功能块1213解析运动矢量(MV)语法,并将控制交给判定块1215。判定块1215确定motion_accuracy_adaptive_flag==1和mv_accuracy_adaptation_mode==4是否成立。如果是,则将控制交给功能块1220。否则,则将控制交给功能块1217。功能块1220从局部画面区的统计量中获取运动矢量精度,并将控制交给功能块1225。功能块1225从接收的运动矢量指数中重构运动矢量,并将控制交给功能块1230。功能块1230进行运动补偿,并将控制交给循环限制块1232。循环限制块1232结束循环,并将控制交给结束块1299。功能块1217使用统一精度或其它自适应精度方法重构运动矢量,并将控制交给功能块1230。
运动矢量幅度自适应
在视频编解码中,编码搜索运动矢量与预测运动矢量之间的差值,在上面我们把它定义成mvd。对于通过视频编码器应用的有效运动估计,mvd的值多数时候都非常小。但是,当视频块对于运动搜索来说不具备好的特征时,则搜索的mv是不可靠的,呈现一些随机性。在这种情况下,mvd的幅度可以相当大。由于搜索的mv是不可靠的,所以用于mvd编码的太多位是不必要的。我们偏向于当mvd具有大幅度时,应该粗略(低运动矢量精度)地量化它,以便节约位。
在一个实施例中,运动矢量精度q_mv是运动矢量差mvd的幅度的函数,q_mv=f(|mvd|)。f的一个示例精度函数可以是:当x≤T时,f(x)=0.25;而当x>T时,f(x)=0.5,其中T是阈值。
在这个例子中,mvd的量化如下:
其中Idx_mvd是mvd的量化指数。
mvd的重构mvq如下:
转到图13,用标号1300总体表示根据运动矢量幅度使用运动信息的自适应编解码来编码画面数据的一种示例方法。方法1300包括将控制交给功能块1310的开始块1305。功能块1310设置motion_accuracy_adaptive_flag=1,并且设置mv_accuracy_adaptation_mode=5,并将控制交给循环限制块1312。循环限制块1312使用范围从1到块数(#)的变量I开始循环,并将控制交给功能块1315。功能块1315进行运动估计,并将控制交给功能块1320。功能块1320根据运动矢量的幅度选择精度函数,并将控制交给功能块1325。功能块1325根据所选函数量化运动矢量分量,并将控制交给功能块1330。功能块1330进行运动补偿,并将控制交给功能块1335。功能块1335进行熵编码,并将控制交给循环限制块1337。循环限制块1337结束循环,并将控制交给结束块1399。
转到图14,用标号1400总体表示根据隐性传信的运动矢量幅度使用运动信息的自适应编解码来解码画面数据的一种示例方法。方法1400包括将控制交给功能块1410的开始块1405。功能块1410解析motion_accuracy_adaptive_flag和mv_accuracy_adaptation_mode,并将控制交给循环限制块1412。循环限制块1412使用范围从1到块数(#)的变量I开始循环,并将控制交给功能块1413。功能块1413解析运动矢量(MV)语法,并将控制交给判定块1415。判定块1415确定motion_accuracy_adaptive_flag==1和mv_accuracy_adaptation_mode==5是否成立。如果是,则将控制交给功能块1420。否则,则将控制交给功能块1417。功能块1420从接收运动矢量指数的数值中获取运动矢量精度,并将控制交给功能块1425。功能块1425重构运动矢量(从接收的运动矢量指数中),并将控制交给功能块1430。功能块1430进行运动补偿,并将控制交给循环限制块1432。循环限制块1432结束循环,并将控制交给结束块1499。功能块1417使用统一精度或其它自适应精度方法重构运动矢量,并将控制交给功能块1430。
语法
表2示出了依照本发明一个实施例的示例画面和切片首标语法。
表2
picture_header(){ |
描述符 |
... |
|
motion_accuracy_adaptive_flag |
u(1) |
... |
|
} |
|
slice_header(){ |
|
... |
|
if(motion_accuracy_adaptive_flag){ |
|
mv_accuracy_adaptation_mode |
u(3) |
if(mv_accuracy_adaptation_mode!=1){ |
|
q_mv_signaling |
u(1) |
if(q_mv_signaling) |
|
q_mv |
u(v) |
} |
|
if(mv_accuracy_adaptation_mode==1){ |
|
res_mv_signaling |
u(1) |
if(res_mv_signaling){ |
|
res_x |
u(2) |
res_y |
u(2) |
} |
|
} |
|
} |
|
|
|
} |
|
表2中的一些语法元素的语义如下:
motion_acccuracy_adaptive_flag规定运动矢量精度自适应是否用于画面。motion_acccuracy_adaptive_flag等于1指示在画面中使用运动矢量精度自适应方案;motion_acccuracy_adaptive_flag等于0指示在画面中不使用运动矢量精度自适应方案。
mv_acccuracy_adaptive_mode规定用于切片的运动矢量精度自适应途径。mv_acccuracy_adaptive_mode等于0指示启用基于分区大小的运动矢量精度自适应。mv_acccuracy_adaptive_mode等于1指示启用基于方向的运动矢量精度自适应。mv_acccuracy_adaptive_mode等于2指示启用基于QP的运动矢量精度自适应。mv_acccuracy_adaptive_mode等于3指示启用显性传信的基于内容的运动矢量精度自适应。mv_acccuracy_adaptive_mode等于4指示启用隐性传信的基于内容的运动矢量精度自适应。mv_acccuracy_adaptive_mode等于5指示启用基于幅度的运动矢量精度自适应。
q_mv规定除了默认量化步长之外,用于量化运动矢量的量化步长。
res_x规定运动矢量的水平分量的精度;
res_y规定运动矢量的垂直分量的精度;
q_mv_signaling规定显性传信或隐性传信。q_mv_signaling等于1指示显性传信q_mv。q_mv_signaling等于0指示不显性传信q_mv。
res_mv_signaling规定res_x和res_y的显性传信或隐性传信。res_mv_signaling等于1指示显性传信res_x和res_y。res_mv_signaling等于0指示不显性传信res_x和res_y。
现在对其中一些上面已经提及的本发明的许多附带优点/特征的一些加以描述。例如,一个优点/特征是含有视频编码器的装置,所述视频编码器使用运动矢量至少编码画面中的块。将自适应运动矢量精度方案用于选择用于编码所述块的运动矢量的精度。选择运动矢量的精度的选择准则包括基于非率失真的准则。
另一个优点/特征是如上所述的含有视频编码器的装置,其中所述选择准则包括运动补偿分区大小。
又一个优点/特征是如上所述的含有视频编码器的装置,其中所述选择准则包括运动矢量分量方向,用于编码所述块的运动矢量的精度被选择成与运动矢量的水平分量相比在垂直分量上是不同的,以及垂直分量和水平分量当中具有最大精度的分量被选为主导分量。
再一个优点/特征是如上所述的其中所述选择准则包括运动矢量分量方向,以及用于编码所述块的运动矢量的精度被选择成与运动矢量的水平分量相比在垂直分量上是不同的,以及垂直分量和水平分量当中具有最大精度的分量被选为主导分量的含有视频编码器的装置,其中主导分量响应于如下至少一种来确定:
(i)当运动矢量是整数运动矢量时,运动矢量的幅度;
(ii)所述块的运动补偿分区的形状;
(iii)所述块的预测运动矢量;
(iv)关于所述块的相邻块的运动矢量;以及
(v)与所述画面和一个或多个其它画面的至少一个有关的全局运动信息,所述画面和一个或多个其它画面包括在相同视频序列中。
又一个优点/特征是如上所述的含有视频编码器的装置,其中所述选择准则包括所述块的编码量化参数。
此外,另一个优点/特征是如上所述的含有视频编码器的装置,其中所述选择准则包括局部画面区的统计量,所述局部画面区对应于所述画面的一部分、所述画面、和一个或多个其它画面的至少一个,以及其中所述画面和一个或多个其它画面包括在相同视频序列中。
此外,另一个优点/特征是如上所述的含有视频编码器的装置,其中所述选择准则包括局部画面区的统计量,所述局部画面区对应于所述画面的一部分、所述画面、和一个或多个其它画面的至少一个,以及其中所述画面和一个或多个其它画面包括在相同视频序列中,其中所述局部画面区的统计量是从如下的至少一个中选择的:
(i)局部区域中的像素方差;
(ii)局部区域中的解码残差系数的方差;
(iii)局部区域中的边缘取向的方差;以及
(iv)局部区域中的边缘强度的方差。
另外,另一个优点/特征是如上所述的含有视频编码器的装置,其中所述选择准则包括搜索运动矢量的幅度。
此外,另一个优点/特征是如上所述的含有视频编码器的装置,其中在编码位流中显性传信用于编码所述块的运动矢量的精度。
并且,另一个优点/特征是如上所述的含有视频编码器的装置,其中从所述画面中或包括所述画面的序列中的前编码视频中推测用于编码所述块的运动矢量的精度。
基于这里的教导,相关领域的普通技术人员可以容易地确定本原理的这些和其它特征及优点。应当理解,可以以硬件、软件、固件、专用处理器或它们的组合的各种形式来实现本原理的教导。
最优选地,作为硬件和软件的组合来实现本原理的教导。此外,可以作为在程序存储单元上有形地包含的应用程序来实现所述软件。所述应用程序可以被上载到包括任何适当架构的机器并由其执行。优选地,在具有诸如一个或多个中央处理单元(“CPU”)、随机存取存储器(“RAM”)和输入/输出(“I/O”)接口之类的硬件的计算机平台上实现所述机器。该计算机平台还可以包括操作***和微指令代码。在此描述的各种处理和功能可以是可由CPU执行的微指令代码的一部分或应用程序一部分或者它们的任何组合。此外,诸如附加的数据存储单元和打印单元之类的各种其它***单元可以连接到该计算机平台。
还应当理解,因为优选地用软件来实现在附图中描绘的一些组成***组件和方法,所以这些***组件或处理功能块之间的实际连接可以根据本原理被编程的方式而不同。给出这里的教导,相关领域的普通技术人员将能够想到本原理的这些和类似的实现或配置。
尽管在这里参照附图描述了说明性实施例,但是应当理解,本原理不限于那些精确的实施例,并且相关领域的普通技术人员可以在其中进行各种改变和修改,而不背离本原理的范围或精神。所有这样的改变和修改都意欲被包括在如所附权利要求阐述的本原理的范围内。