使用残差块能量分布的运动矢量代码化

文档序号:1581258 发布日期:2020-01-31 浏览:21次 >En<

阅读说明:本技术 使用残差块能量分布的运动矢量代码化 (Motion vector coding using residual block energy distribution ) 是由 达克·何 于 2018-09-16 设计创作,主要内容包括:使用运动矢量来对当前块进行帧间预测。编码可以包括:使用所述运动矢量来对所述当前块进行帧间预测以确定残差块;以及使用所述残差块来确定用于所述当前块的变换系数的变换块。编码还可以包括:使用所述变换系数的非零系数的位置来确定所述变换块的与所述残差块中的能量分布相关的类别,所述类别是多种类别中的一种,并且所述多种类别中的每种类别通过不同的能量分布来定义;使用所述类别来确定用于对所述运动矢量进行代码化的上下文,所述上下文包括用于对所述运动矢量进行熵代码化的概率分布;以及使用所述上下文来对所述运动矢量进行编码。所述变换块的大小也可以用于确定所述类别。(Encoding may also include determining a class of the transform block related to an energy distribution in the residual block using positions of non-zero coefficients of the transform coefficients, the class being of a plurality of classes and each class of the plurality of classes being defined by a different energy distribution, determining a context for encoding the motion vector using the class, the context including a probability distribution for entropy encoding the motion vector, and encoding the motion vector using the context.)

使用残差块能量分布的运动矢量代码化

背景技术

数字视频流可以使用一系列帧或静止图像来表示视频。数字视频可被用于各种应用,包括例如视频会议、高清视频娱乐、视频广告或用户生成的视频的共享。数字视频流可包含大量数据并消耗用于处理、传输或者存储视频数据的计算设备的大量的计算或通信资源。已提出用于减少视频流中的数据的量的包括压缩和其它编码技术的各种方法。

一种用于压缩的技术使用参考帧和运动矢量来生成与要编码的当前块相对应的预测块。可对预测块与当前块之间的差进行编码,而不是对当前块本身的值进行编码,以减少被编码的数据的量。

发明内容

本公开一般地涉及对视频数据进行编码和解码,并且更具体地涉及运动矢量的改进代码化。

本文描述的用于编码的方法包括:确定用于对当前块进行帧间预测的运动矢量;使用所述运动矢量来对所述当前块进行帧间预测以确定残差块;使用所述残差块来确定用于所述当前块的变换系数的变换块;确定所述变换块的与所述残差块中的能量分布相关的类别;使用所述类别来确定用于对所述运动矢量进行代码化的上下文;以及使用所述上下文来对所述运动矢量进行编码。可使用所述变换系数的非零系数的位置来确定所述类别,并且所述类别是多种类别中的一种,所述多种类别中的每种类别通过不同的能量分布来定义。所述上下文包括用于对所述运动矢量进行熵代码化的概率分布。

一种用于编码的装置包括非暂时性存储介质或存储器和处理器。根据本文描述的一个方面,所述存储器包括可由所述处理器执行来进行以下的指令:确定用于对当前块进行帧间预测的运动矢量;使用所述运动矢量来对所述当前块进行帧间预测以确定残差块;使用所述残差块来确定用于所述当前块的变换块;使用所述变换块的非零系数的位置和所述变换块的大小来确定所述变换块的与所述残差块中的能量分布相关的类别,所述类别是多种类别中的一种,并且所述多种类别中的每种类别通过不同的能量分布来定义;使用所述类别来确定用于对所述运动矢量进行编码的上下文;并且在压缩比特流中使用所述上下文来对所述运动矢量进行编码。所述上下文可以包括用于对所述运动矢量进行熵代码化的概率分布。

本文描述的用于解码的装置的一个方面包括非暂时性存储介质或存储器和处理器。所述存储器包括可由所述处理器执行来进行以下的指令:从编码比特流中对用于当前块的变换块进行解码,所述变换块对应于用于所述当前块的残差块;使用所述变换块的非零系数的位置来确定所述变换块的与所述残差块中的能量分布相关的类别,所述类别是多种类别中的一种,并且所述多种类别中的每种类别通过不同的能量分布来定义;使用所述类别来确定用于对用于对所述当前块进行编码的运动矢量进行解码的上下文;并且从所述编码比特流中使用所述上下文来对所述运动矢量进行解码。

根据本文教导的一个方面的用于解码的方法包括:从编码比特流中对用于当前块的变换块进行解码,所述变换块对应于用于所述当前块的残差块;使用所述变换块的非零系数的位置来确定所述变换块的与所述残差块中的能量分布相关的类别,所述类别是多种类别中的一种,并且所述多种类别中的每种类别通过不同的能量分布来定义;使用所述类别来确定用于对用于对所述当前块进行编码的运动矢量进行解码的上下文;从所述编码比特流中使用所述上下文来对所述运动矢量进行解码;并且使用所述运动矢量来重构所述当前块。

在实施例、所附权利要求和附图的以下详细描述中公开本公开的这些和其它方面。

附图说明

本文描述参考在下面描述的附图,其中,除非另外指出,否则相同的附图标记在若干视图中自始至终指代相同的部分。

图1是视频编码和解码系统的示意图。

图2是可实现发送站或接收站的计算设备的示例的框图。

图3是要编码并随后解码的视频流的示例的示意图。

图4是根据本公开的实施方式的编码器的框图。

图5是根据本公开的实施方式的解码器的框图。

图6是根据本公开的实施方式的表示完整和子像素运动的运动矢量的示意图。

图7是根据本公开的实施方式的子像素预测块的示意图。

图8是根据本公开的实施方式的完整和子像素位置的示意图。

图9是根据本公开的实施方式的用于使用帧间预测来对视频帧的当前块进行编码的过程的流程图。

图10是根据本公开的实施方式的用于使用帧间预测来对视频帧的当前块进行解码的过程的流程图。

具体实施方式

可通过各种技术来压缩视频流以减少发送或者存储视频流所要求的带宽。可将视频流编码成涉及压缩的比特流(即,压缩比特流)。然后可将压缩比特流发送到解码器,所述解码器可对压缩比特流进行解码或者解压缩以使它为查看或进一步处理作好准备。视频流的压缩常常通过空间和/或运动补偿预测来利用视频信号的空间和时间相关性。运动补偿预测也可以被称为帧间预测。帧间预测使用一个或多个运动矢量来生成类似要使用先前编码和解码的像素来编码的当前块的块(也称作预测块)。通过对运动矢量以及两个块(即,当前块和预测块)之间的差进行编码,接收到编码信号的解码器可重新创建当前块。两个块之间的差在本文中被称为残差或残差块。

如在下面进一步描述的,对残差块进行代码化可包括生成用于残差块的一个或多个变换块。变换块可包括零变换系数和非零变换系数。变换系数然后被编码到压缩比特流中。残差块通常在像素域中。变换块通常在频域中。

用于在帧间预测过程中生成预测块的每个运动矢量指代除当前帧以外的帧(即,参考帧)。参考帧可位于在视频流的序列(即,显示顺序)中的当前帧之前或之后,并且可以是在被用作参考帧之前被重构的帧。前向参考帧是用于相对于序列进行前向预测的帧,然而后向参考帧是用于相对于序列进行后向预测的帧。一个或多个前向和/或后向参考帧可用于对块进行编码或者解码。可基于得到的信噪比或速率失真的其它量度来测量参考帧在用于对当前帧内的块(即,当前块)进行编码或者解码时的功效。

运动补偿预测中的用于当前块的运动矢量可被编码到编码比特流中并从编码比特流解码。关于参考帧中的共定位块描述用于当前块(即,正在被编码的块)的运动矢量。运动矢量描述与参考帧中的共定位块的水平方向上的偏移(即,位移)(即,mv_x)和垂直方向上的位移(即,mv_y)。因此,可将运动矢量表征为3元组(f,mv_x,mv_y),其中f指示参考帧(例如,是其索引),mv_x是水平方向上的偏移,并且mv_y是垂直方向上的偏移。因此,至少偏移mv_x和mv_y被写入(即,编码)到编码比特流中并且从编码比特流中读取(即,解码)。

为了降低对运动矢量进行编码的速率成本,可以对运动矢量进行差分编码。即,运动矢量被选择作为参考运动矢量,并且仅运动矢量与参考运动矢量之间的差(也称作运动矢量差)被编码到比特流中。例如,参考运动矢量可以是相邻块中的一个的运动矢量。相邻块可以包括空间相邻块(即,与当前块相同的当前帧中的块)。相邻块可包括时间相邻块(即,除当前帧以外的帧中的块)。

在一些情形下,产生最佳残差的预测块可以与参考帧中的像素不对应。也就是说,最佳运动矢量可以指向位于参考帧中的块的像素之间的位置。在这种情况下,在子像素级别下进行运动补偿预测是有用的。运动补偿预测可以涉及子像素内插滤波器的使用,所述子像素内插滤波器在沿着行、列或两者的完整像素(也称作整数像素)之间的定义位置处生成滤波的子像素值。内插滤波器可以是可用于在运动补偿预测中使用的许多内插滤波器中的一个。在下面关于图6至图8进一步描述子像素内插。

不同的内插滤波器可以是可用的。内插滤波器中的每一个均可以被设计成提供不同的频率响应。在示例中,可用的内插滤波器可以包括平滑滤波器、法向滤波器、锐截止滤波器和双线性滤波器。可以在包含要预测的块的帧的报头中发信号通知要由解码器使用来生成预测块的内插滤波器。因此,相同的内插滤波器用于为帧的所有块生成子像素预测块。也可以在代码化单元级别下发信号通知内插滤波器。因此,相同的内插滤波器被用于代码化单元的每一块(例如,每一预测块)以为代码化单元的块生成子像素预测块。编码器可以基于可用的内插滤波器中的每一个来生成预测块。编码器然后选择(即,向解码器发信号通知)产生例如最佳速率失真比的滤波器。速率失真比指代使失真量(即,视频质量的损失)与编码所要求的速率(即,比特数)平衡的比。

像本文所使用的那样对运动矢量进行代码化指代运动矢量的代码化和运动矢量的差分代码化。在任何一种情况下,对运动矢量进行代码化包括对运动矢量的水平偏移(即,mv_x)进行代码化并且对运动矢量的垂直偏移(即,mv_y)进行代码化。当由编码器实现时,“代码化”意指在编码比特流中编码。当由解码器实现时,“代码化”意指从编码比特流解码。

对运动矢量进行代码化可包括对运动矢量的水平偏移和垂直偏移进行熵代码化。因此,为运动矢量确定了上下文,并且与该上下文相对应的概率模型被用于对运动矢量进行代码化。

熵编码是用于依靠对在编码视频比特流中出现的值的分布进行建模的概率模型的“无损”代码化的技术。通过基于值的实测或估计分布来使用概率模型,熵代码化可将表示视频数据所要求的比特数减少至接近于理论最小值。在实践中,表示视频数据所要求的比特数的实际减少可以是概率模型的准确度、执行代码化的比特数以及用于执行代码化的定点算术的计算准确度的函数。

上下文建模的目的是为了获得用于后续熵代码化引擎(诸如算术代码化、霍夫曼代码化和其它可变长度至可变长度代码化引擎)的概率分布。为了实现良好的压缩性能,可能要求大量的上下文。例如,单独对变换系数代码化来说一些视频代码化系统可包括数百或甚至数千个上下文。每个上下文可对应于概率分布。

概率分布可由解码器学习和/或包括在要解码的帧的报头中。

学习可意味着解码器的熵代码化引擎可基于解码帧和/或解码块来适配上下文模型的概率分布(即,概率模型)。例如,解码器可具有可用的初始概率分布,解码器(例如,解码器的熵代码化引擎)可随着解码器对附加帧进行解码而连续地更新所述初始概率分布。对概率模型的更新可确保初始概率分布被更新以反映解码帧中的实际分布。

给定所对应的上下文,在报头中包括概率分布可指示解码器将所包括的概率分布用于对下一个帧进行解码。成本(以比特为单位)与在报头中包括每个概率分布相关联。例如,在包括3000个上下文并使用8个比特来对概率分布(被代码化为1与255之间的整数值)进行编码的代码化系统中,24,000个比特被添加到编码比特流。这些比特是开销比特。可使用一些技术来减少开销比特的数目。例如,可包括用于一些而非全部上下文的概率分布。例如,还可使用预测方案来减少开销比特。即使利用这些开销减少技术,开销也是非零。

熵代码化的效率可与概率模型直接有关。如本文所使用的模型可以为无损(熵)代码化或者可以是无损(熵)代码化中的参数。模型可以是影响用于熵代码化的概率估计的任何参数或方法。

为了在运动矢量的解码中避免依赖性和复杂性,编解码器可以限制被使用(即,作为上下文)来对运动矢量进行代码化的信息。该信息可限于可容易得到的信息。例如,当重构像素值(在下面进一步描述)不容易得到时,它们未被用作用于选择用于对运动矢量进行代码化的概率模型的上下文信息。附加地,当熵解码器通常比视频解码器中的任何其它处理快得多时,在重构像素上调节熵解码器可以导致熵解码器的显著性能降级。

因此,通常期望在例如先前解码的块的可容易得到的帧间预测模式和运动矢量上调节对运动矢量进行解码(并因此编码)。先前解码的块可以是正被编码的当前块的空间邻域和/或时间邻域中的块。例如,在以光栅扫描顺序对当前帧的块进行代码化的情况下,空间邻域可包括当前帧中的当前块的顶部(即,上方)和左部相邻块。例如,时间邻域可包括先前代码化的帧(即,参考帧)中的共定位块。

若干帧间预测模式可以是可用的。例如,一种可用的帧间预测模式表示块的运动矢量是0。这可以被称为ZEROMV模式。另一帧间预测模式可以表示块的运动矢量是参考运动矢量。这可以被称为REFMV模式。当用于块的运动矢量不为零并且不同于参考运动矢量时,可以使用参考运动矢量来对运动矢量进行编码。此模式在本文中可以被称为NEWMV模式。其它帧间预测模式可以是可用的。

用于对运动矢量进行代码化的可容易得到的信息还可包括当前块是辉度块还是色度块以及块大小。

如上面所提及的,具有不同的频率响应的滤波器可用于在子像素位置处生成运动矢量。因此,并且由于这些滤波器的使用,不同的子像素位置处的参考块可以具有变换域中的不同特性。例如,由低通滤波器生成的子像素位置处的参考块与完整像素位置处的参考块相比很可能在高频带中具有较低的能量。由于残差块是源块与参考块之间的差,所以残差块中的能量分布因此与参考块的能量分布相关。

熵代码化的效率可与概率模型直接有关,所述概率模型又基于上下文模型来选择。根据信息理论,熵H(X)可以是对变量X进行代码化所要求的比特数的量度;并且条件熵H(X|Y)可以是如果量Y已知则对变量X进行代码化所要求的比特数的量度。H(X)和H(X|Y)通过众所周知的性质H(X|Y)≤H(X)相关。也就是说,条件熵H(X|Y)决不可能超过H(X)。如果X表示运动矢量并且Y表示包含在变换块(例如,或等效地,残差)中的能量分布信息,则遵循可以通过使用能量分布信息(即,Y)来改进运动矢量(即,X)的代码化。例如,包含在变换块中的能量分布信息可被用作用于对运动矢量进行代码化的附加上下文信息。

根据本公开的实施方式使用可在变换块中得到的能量分布信息来对与残差块相关联的运动矢量进行代码化。使用可在变换块中得到的能量分布信息可改进压缩性能。最初参考可实现本文教导的系统来描述运动矢量的改进代码化的细节。

图1是视频编码和解码系统100的示意图。发送站102可以是例如具有诸如图2中描述的硬件的内部配置的计算机。然而,发送站102的其它适合的实现方式是可能的。例如,发送站102的处理可分布在多个设备之间。

网络104可连接发送站102和接收站106以进行视频流的编码和解码。具体地,可在发送站102中对视频流进行编码,并且可在接收站106中对编码视频流进行解码。网络104可以是例如因特网。网络104还可以是局域网(LAN)、广域网(WAN)、虚拟专用网(VPN)、蜂窝电话网络,或将视频流从发送站102转移到此示例中的接收站106的任何其它手段。

在一个示例中,接收站106可以是具有诸如图2中描述的硬件的内部配置的计算机。然而,接收站106的其它适合的实现方式是可能的。例如,接收站106的处理可分布在多个设备之间。

视频编码和解码系统100的其它实施方式是可能的。例如,一种实施方式可省略网络104。在另一实施方式中,视频流可被编码并然后存储以供在稍后的时间传输到接收站106或具有非暂时性存储介质或存储器的任何其它设备。在一个实施方式中,接收站106(例如,经由网络104、计算机总线和/或某个通信途径)接收编码视频流并且存储该视频流以供稍后解码。在示例实施方式中,实时传输协议(RTP)被用于通过网络104发送编码视频。在另一实施方式中,可以使用除RTP以外的传输协议,例如,基于超文本转移协议(HTTP)的视频流协议。

当被用在视频会议系统中时,例如,发送站102和/或接收站106可以包括如下所述既对视频流进行编码且对视频流进行解码的能力。例如,接收站106可能是视频会议参与者,所述视频会议参与者从视频会议服务器(例如,发送站102)接收编码视频比特流以对他或她自己的视频流进行解码和查看,并且进一步对它自己的视频比特流进行编码并将编码视频比特流发送到视频会议服务器以供由其它参与者进行解码和查看。

图2是可实现发送站或接收站的计算设备200的示例的框图。例如,计算设备200可实现图1的发送站102和接收站106中的一个或两个。计算设备200可以形式为包括多个计算设备的计算系统,或者形式为一个计算设备,例如,移动电话、平板计算机、膝上型计算机、笔记本计算机、台式计算机等。

计算设备200中的CPU 202可以是中央处理单元。替换地,CPU 202可以是能够操纵或者处理现存或此后开发的信息的任何其它类型的设备或多个设备。尽管所公开的实施方式可用如所示的一个处理器(例如,CPU 202)来实践,但是可使用多于一个处理器来实现速度和效率方面的优势。

在一个实施方式中计算设备200中的存储器204可以是只读存储器(ROM)设备或随机存取存储器(RAM)设备。任何其它适合类型的存储设备或非暂时性介质可被用作存储器204。存储器204可包括由CPU 202使用总线212来访问的代码和数据206。存储器204可进一步包括操作系统208和应用程序210,所述应用程序210包括许可CPU 202执行这里描述的方法的至少一个程序。例如,应用程序210可包括应用1至N,其进一步包括执行这里描述的方法的视频代码化应用。计算设备200还可以包括辅助存储214,其可以例如是与移动计算设备一起使用的存储卡。因为视频通信会话可以包含大量信息,所以它们可被整个地或部分地存储在辅助存储214中并按需加载到存储器204中以进行处理。

计算设备200还可包括一个或多个输出设备,诸如显示器218。在一个示例中,显示器218可以是将显示器与可操作来感测触摸输入的触敏元件相组合的触敏显示器。显示器218可经由总线212耦合到CPU 202。除了显示器218之外或作为显示器218的替代方案,还可提供许可用户对计算设备200进行编程或者以其它方式使用计算设备200的其它输出设备。当输出设备是或者包括显示器时,可以各种方式(包括通过液晶显示器(LCD)、阴极射线管(CRT)显示器或发光二极管(LED)显示器(诸如有机LED(OLED)显示器))实现该显示器。

计算设备200还可以包括图像感测设备220(例如,相机)或现存或此后开发的可感测图像(诸如操作计算设备200的用户的图像)的任何其它图像感测设备220或者与之进行通信。图像感测设备220可被定位为使得它被指向操作计算设备200的用户。在示例中,图像感测设备220的位置和光轴可被配置为使得视场包括与显示器218直接相邻并且显示器218从中可见的区域。

计算设备200还可以包括声音传感设备222(例如,麦克风)或现存或此后开发的可感测计算设备200附近的声音的任何其它声音感测设备或者与之进行通信。声音感测设备222可被定位为使得它被指向操作计算设备200的用户并且可被配置成接收由用户在该用户操作计算设备200的同时做出的声音,例如,语音或其它发言。

尽管图2将计算设备200的CPU 202和存储器204描绘为被集成到一个单元中,但是可利用其它配置。CPU 202的操作可分布在可直接地或者跨越局域网或其它网络耦合的多个机器(其中单独的机器可具有处理器中的一个或多个)之上。存储器204可分布在多个机器之上,诸如基于网络的存储器或执行计算设备200的操作的多个机器中的存储器。尽管在这里被描绘为一条总线,但是计算设备200的总线212可由多条总线组成。另外,辅助存储214可以直接地耦合到计算设备200的其它组件或者可经由网络访问,并且可包括诸如存储卡这样的集成单元或诸如多个存储卡这样的多个单元。因此可按照各式各样的配置实现计算设备200。

图3是要编码并随后解码的视频流300的示例的示意图。视频流300包括视频序列302。在下一个等级,视频序列302包括许多相邻帧304。虽然三个帧被描绘为相邻帧304,但是视频序列302可包括任何数目的相邻帧304。然后可将相邻帧304进一步细分成单独的帧,例如,帧306。在下一个等级,可将帧306划分成一系列平面或分段308。例如,分段308可以是许可并行处理的帧的子集。分段308也可以是可将视频数据分成单独的颜色的帧的子集。例如,彩***数据的帧306可包括辉度平面和两个色度平面。可以以不同的分辨率对分段308进行采样。

无论帧306是否被分成分段308,都可以将帧306进一步细分成块310,所述块310可包含对应于例如帧306中的16x16个像素的数据。还可将块310布置成包括来自像素数据的一个或多个分段308的数据。块310还可具有任何其它适合的大小,诸如4x4个像素、8x8个像素、16x8个像素、8x16个像素、16x16个像素或更大。除非另外指出,否则在本文中可互换地使用术语块和宏块。

图4是根据本公开的实施方式的编码器400的框图。例如通过提供存储在存储器(例如存储器204)中的计算机软件程序,可如上所述在发送站102中实现编码器400。计算机软件程序可包括机器指令,所述机器指令当由诸如CPU 202这样的处理器执行时,使发送站102以图4中描述的方式对视频数据进行编码。编码器400还可作为包括在例如发送站102中的专用硬件被实现。编码器400可以是硬件编码器。

编码器400具有在(通过实连接线示出的)前向路径中执行各种功能以使用视频流300作为输入来产生编码或压缩比特流420的以下级:帧内/帧间预测级402、变换级404、量化级406和熵编码级408。编码器400还可以包括(通过虚连接线示出的)重构路径以重构用于对将来的块进行编码的帧。在图4中,编码器400具有在重构路径中执行各种功能的以下级:去量化级410、逆变换级412、重构级414和环路滤波级416。编码器400的其它结构变型可用于对视频流300进行编码。

当视频流300被呈现以进行编码时,可以块为单位处理各个帧304,诸如帧306。在帧内/帧间预测级402处,可使用帧内预测(intra-frame prediction)(也称作帧内预测(intra-prediction))或帧间预测(inter-frame prediction)(也称作帧间预测(inter-prediction))来对各个块进行编码。在任何情况下,可形成预测块。在帧内预测的情况下,预测块可以由当前帧中的先前已编码和重构的样本形成。在帧间预测的情况下,预测块可以由一个或多个先前构建的参考帧中的样本形成。

接下来,仍然参考图4,可在帧内/帧间预测级402处从当前块中减去预测块以产生残差块(也称作残差)。变换级404使用基于块的变换来将残差变换成例如频域中的变换系数。量化级406使用量化器值或量化等级来将变换系数转换成离散量子值,其被称为量化变换系数。例如,可以将变换系数除以量化值并截断。量化变换系数然后由熵编码级408进行熵编码。熵编码系数以及用于对块进行解码的其它信息(其可以包括例如所用预测的类型、变换类型、运动矢量和量化器值)然后被输出到压缩比特流420。可使用各种技术来格式化压缩比特流420,所述各种技术诸如可变长度代码化(VLC)或算术代码化。压缩比特流420也可被称为编码视频流或编码视频比特流,并且将在本文中可互换地使用这些术语。

图4中的(通过虚连接线示出的)重构路径可用于确保编码器400和解码器500(在下面描述)使用相同的参考帧来对压缩比特流420进行解码。重构路径执行与在解码过程(其在下面被更详细地描述)期间进行的功能类似的功能,包括在去量化级410处对量化变换系数进行去量化以及在逆变换级412处对去量化变换系数进行逆变换以产生导数残差块(也称作导数残差)。在重构级414处,可将在帧内/帧间预测级402处预测的预测块添加到导数残差以创建重构块。可将环路滤波级416应用于重构块以减少诸如块伪影这样的失真。

编码器400的其它变型可用于对压缩比特流420进行编码。例如,基于非变换的编码器可针对某些块或帧在没有变换级404的情况下直接地量化残差信号。在另一实施方式中,编码器可具有被组合在公共级中的量化级406和去量化级410。

图5是根据本公开的实施方式的解码器500的框图。例如,通过提供存储在存储器204中的计算机软件程序,可在接收站106中实现解码器500。计算机软件程序可包括机器指令,所述机器指令当由诸如CPU 202这样的处理器执行时,使接收站106以本文描述的方式对视频数据进行解码。解码器500还可用包括在例如发送站102或接收站106中的硬件加以实现。解码器500可以是硬件解码器。

类似于上面讨论的编码器400的重构路径,解码器500在一个示例中包括执行各种功能以从压缩比特流420产生输出视频流516的以下级:熵解码级502、去量化级504、逆变换级506、帧内/帧间预测级508、重构级510、环路滤波级512和后滤波级514。解码器500的其它结构变型可用于对压缩比特流420进行解码。

当压缩比特流420被呈现以进行解码时,压缩比特流420内的数据元素可由熵解码级502解码以产生一组量化变换系数。去量化级504对量化变换系数进行去量化(例如,通过将量化变换系数乘以量化器值),并且逆变换级506对去量化变换系数进行逆变换以产生可与在编码器400中由逆变换级412所创建的导数残差相同的导数残差。使用从压缩比特流420解码的报头信息,解码器500可使用帧内/帧间预测级508来创建与在编码器400中创建的相同的预测块(例如,在帧内/帧间预测级402处)。在重构级510处,可将预测块添加到导数残差以创建重构块。可将环路滤波级512应用于重构块以减少块伪像。

可将其它滤波应用于重构块。在此示例中,后滤波级514可以是被应用于重构块以减少块失真的去块滤波器,并且结果作为输出视频流516被输出。输出视频流516也可被称为解码视频流,并且将在本文中可互换地使用这些术语。解码器500的其它变型可用于对压缩比特流420进行解码。例如,解码器500可在没有后滤波级514的情况下产生输出视频流516。

图6是根据本公开的实施方式的表示完整和子像素运动的运动矢量的示意图。在图6中,使用来自参考帧630的像素来对当前帧600的若干块602、604、606、608进行帧间预测。在此示例中,参考帧630是包括当前帧600的视频序列(诸如视频流300)中的参考帧,也被称作时间相邻帧。参考帧630是重构帧(即,已例如通过图4的重构路径来编码和解码的帧),所述重构帧已被存储在所谓的最后参考帧缓冲器中并且可用于对当前帧600的块进行代码化。其它(例如,重构)帧或此类帧的部分也可以用于帧间预测。其它可用的参考帧可以包括:黄金帧,其是可以根据任何数目的技术来选择(例如,周期性地)的视频序列的另一帧;以及构造参考帧,其是从视频序列的一个或多个其它帧构造的帧但是未被示出为解码输出的一部分,诸如图5的输出视频流516。

用于对块602进行编码的预测块632对应于运动矢量612。用于对块604进行编码的预测块634对应于运动矢量614。用于对块606进行编码的预测块636对应于运动矢量616。最后,用于对块608进行编码的预测块638对应于运动矢量618。在此示例中使用单个运动矢量并因此使用单个参考帧来对块602、604、606、608中的每一个进行帧间预测,但是本文教导还适用于使用多于一个运动矢量的帧间预测(诸如使用两个不同的参考帧的双向预测和/或复合预测),其中来自每个预测的像素被以某种方式组合以形成预测块。

图7是根据本公开的实施方式的子像素预测块的示意图。图7包括图6的参考帧630的预测块632和预测块632的相邻像素。参考帧630内的整数像素被示出为未填充圆。在此示例中,整数像素表示参考帧630的重构像素值。整数像素被沿着x轴线和y轴线布置在阵列中。形成预测块632的像素被示出为填充圆。预测块632由沿着两条轴线的子像素运动产生。

生成预测块632可能要求两个内插操作。在一些情况下,生成预测块可能要求沿着x轴线和y轴线中的一条的仅一个内插操作。用于生成中间像素的第一内插操作后面是用于从中间像素生成预测块的像素的第二内插操作。第一内插操作和第二内插操作分别可以沿着水平方向(即,沿着x轴线)和垂直方向(即,沿着y轴线)。替换地,第一内插操作和第二内插操作分别可以沿着垂直方向(即,沿着y轴线)和水平方向(即,沿着x轴线)。第一内插操作和第二内插操作可使用相同的内插滤波器类型。替换地,第一内插操作和第二内插操作可使用不同的内插滤波器类型。

为了产生预测块632的子像素的像素值,可以使用内插过程。在一个示例中,使用诸如有限脉冲响应(FIR)滤波器这样的内插滤波器来执行内插过程。内插滤波器可以包括6抽头滤波器、8抽头滤波器或其它大小滤波器。内插滤波器的抽头利用系数值对空间相邻像素(整数或子像素像素)进行加权以生成子像素值。通常,用于在两个像素之间的不同的子像素位置(例如,1/2、1/4、1/8或其它子像素位置)处生成每个子像素值的内插滤波器是不同的(即,具有不同的系数值)。

图8是根据本公开的实施方式的完整和子像素位置的示意图。在图8的示例中,使用6抽头滤波器。这意味着可通过对像素800-810应用内插滤波器来内插子像素或像素位置820、822、824的值。在图8中示出了仅两个像素804和806之间的子像素位置。然而,可以相似的方式确定像素行的其它完整像素之间的子像素值。例如,可以通过对像素802、804、806、808、810以及与像素810相邻的整数像素(若可用的话)应用内插滤波器来确定或者生成两个像素806和808之间的子像素值。

在内插滤波器中使用不同的系数值而不管其大小如何都会导致不同的滤波特性并因此导致不同的压缩性能。在一些实施方式中,内插滤波器集合可以是针对1/16像素精度而设计的并且包括双线性滤波器、8抽头滤波器(EIGHTTAP)、锐截止8抽头滤波器(EIGHTTAP_SHARP)或平滑8抽头滤波器(EIGHTTAP_SMOOTH)中的至少两个。每个内插滤波器具有不同的频率响应。

图9是用于使用帧间预测来对视频帧的当前块进行编码的方法或过程900的流程图。过程900可以例如作为可以由诸如发送站102或接收站106这样的计算设备来执行的软件程序被实现。软件程序可包括机器可读指令,所述机器可读指令可以被存储在诸如存储器204或辅助存储214这样的存储器中,并且当由处理器(诸如CPU 202)执行时,可以使计算设备执行过程900。过程900可以被全部地或部分地实现在编码器400的熵编码级408中。可使用专用硬件或固件来实现过程900。可使用多个处理器、存储器或两者。

在操作902处,过程900确定用于当前块的运动矢量。如本公开中所使用的,“确定”意在以任何无论什么方式创建、形成、产生、选择、构造、识别、指定、生成、接收或者另外地确定。例如,过程900可像关于图4的帧内/帧间预测级402所描述的那样接收用于当前块的运动矢量。

过程900可在操作902处确定参考帧。确定用于当前块的参考帧可以包括选择多个可用的参考帧中的用于预测当前块的一个参考帧。在一些实施方式中,参考帧缓冲器可以存储多达定义数目的可用的参考帧,诸如四个或八个参考帧。作为一个示例,参考帧缓冲器可以存储与视频序列中的当前帧之前的最后帧相对应的LAST参考帧,与位于视频序列中的当前帧之前的帧内预测帧相对应的GOLDEN参考帧以及被指定为ALTREF_FRAME的供选择的或替代参考帧。替代参考帧可以是按照显示顺序远离当前帧但是比它被显示更早地编码或者解码的视频序列中的帧。例如,替代参考帧可以是按照视频序列的显示顺序在当前帧之后的十个、十二个或更多的(或更少的)帧。另外的替代参考帧可以是按照显示顺序更靠近当前帧定位的帧。

替代参考帧可以不直接地对应于序列中的帧。替代地,可以使用已应用了滤波、被组合在一起或者被组合在一起且滤波的一个或多个帧来生成替代参考帧。可以不显示替代参考帧。替代地,替代帧可以是仅用于预测而生成和发送的帧或帧的一部分(即,当解码序列被显示时它被省略)。

参考帧缓冲器可以能够存储附加或更少的参考帧。例如,可用的空间可以存储倒数第二帧(即,在最后帧之前的第一帧)和/或倒数第三帧(即,在最后帧之前两个帧的帧)作为附加的前向预测参考帧(例如,除了LAST和GOLDEN参考帧之外)。在一些示例中,后向帧可以作为附加的后向预测参考帧(例如,除了ALTREF_FRAME参考帧之外)被存储。术语LAST、GOLDEN、ALTREF_FRAME等在本文中可以被称为参考帧标识符。

可使用运动估计(诸如运动搜索)的方法来确定运动矢量。在运动搜索中,可将参考帧的一部分平移到一系列位置以形成各个预测块,可从当前块减去所述各个预测块以形成各个残差。可将与具有例如最小残差的位置相对应的水平和/或垂直平移选择为运动矢量。

如上面所指示的,产生最佳残差的预测块可以不与参考帧中的像素(即,整数像素)对应。也就是说,最佳运动矢量可以指向位于参考帧中的块的像素之间的位置。在这种情况下,在子像素级别下进行运动补偿预测是有用的。运动补偿预测可以涉及子像素内插滤波器的使用,所述子像素内插滤波器在沿着行、列或两者的完整像素(也称作整数像素)之间的定义位置处生成滤波的子像素值。内插滤波器可以是可用于在运动补偿预测中使用的许多内插滤波器中的一个,其中这些内插滤波器中的每一个具有不同的频率剖面(即,不同的频率响应)。

在操作904处,过程900生成用于当前块的变换块。如本文所使用的变换块指代量化变换块。例如,如关于图4的帧内/帧间预测级402所描述的,生成与运动矢量和参考帧相对应的预测块。然后可像分别关于图4的变换级404和量化级406所描述的那样对预测块进行变换和量化。

在操作906处,过程900确定与残差块中的能量分布相关的变换块的类别(如变换块中所表示的)。如先前所描述的,能量分布是可用于确定或者选择用于对运动矢量进行代码化的上下文的信息,所述运动矢量用于生成残差块。在此确定中使用能量分布可产生用于对用于生成残差块的运动矢量进行熵代码化的更准确的概率分布,从而改进压缩性能。此准确度是通过将用于能量分布的信息与可用于确定或者选择上下文的其它信息相组合来改进的。

可将变换块组织为二维块。令(x,y)表示变换域中的变换块位置,并且令c(x,y)表示位置(x,y)处的变换系数。注意的是,在解码器(诸如关于图10所描述的)的情况下,c(x,y)表示位置(x,y)处的解码变换系数。通过示例,位置(0,0)处的变换系数可以被称为DC系数;任何其它位置处的系数可以被称为AC系数。不同的变换模式可以产生不同的布置。无论如何,具有正值或负值(即,非零的值)的变换系数被称为非零变换系数,或者更简单地称为非零系数。

残差块中的能量分布可通过非零系数在变换块(例如,量化变换块)内的分布来表示。因此,确定与残差块中的能量分布相关的变换块的类别可包括使用非零系数在变换块内的位置来确定变换块的类别。任何数目的类别可以是可用的。例如,每个类别可以代表不同的能量分布。类别可以通过位于变换块的不同分区中的非零系数的数目来表示。可以以任何方式对变换块进行分区以确定类别。可以不同地对变换块进行分区以取决于用于生成变换块的变换类型而确定类别。

可以将条件附着到每个类别以便将当前块的非零系数的位置与条件相比较以针对当前块确定类别。例如,使其最大数目的非零系数位于左上部象限中的变换块与在变换块的左半部中具有其最大数目的非零系数的变换块或使其非零系数更均匀地遍布变换块的变换块相比具有不同的能量分布。确定变换块的类别可包括确定该块位于第一类别中,在所述第一类别中该块的所有非零系数都位于该块的左上部象限中。确定变换块的类别可包括确定该块位于第二类别中,在所述第二类别中该块的非零系数的大多数位于该块的左上部象限中并且该块的剩余非零系数的大多数位于该块的右上部象限中。确定变换块的类别可包括确定该块位于第三类别中,在所述第三类别中该块的非零系数的大多数位于该块的左上部象限中并且该块的剩余非零系数的大多数位于该块的左下部象限中。确定变换块的类别可包括确定该块位于第四类别中,在所述第四类别中该块的相邻半部中的非零系数的数目之间的差低于阈值。像通过可与当前块的非零系数的位置相比较的非零系数的位置的不同布置所反映的那样定义不同的能量分布的这些类别、附加类别或不同类别可以是可用的。

在示例中,类别从包括类别DC_ONLY、AC_LOW、AC_HIGH_X、AC_HIGH_Y和AC_HIGH的集合中选择。“从集合中选择”意在选择可能的值DC_ONLY、AC_LOW、AC_HIGH_X、AC_HIGH_Y和AC_HIGH中的一个。类别可作为上下文信息以对与残差块相关联的运动矢量进行代码化。具体地,水平偏移mv_x和/或垂直偏移mv_y的代码化可以取决于类别。例如,类别可与其它可容易得到的信息(如上所述)相结合地使用作为上下文信息以对运动矢量进行代码化。在下面描述类别DC_ONLY、AC_LOW、AC_HIGH_X、AC_HIGH_Y和AC_HIGH的示例语义。然而,其它语义也是可能的。

类别DC_ONLY可指示变换块不具有非零AC系数。也就是说,变换的唯一非零系数是DC系数(即,位置(0,0)处的系数)。因此,在DC_ONLY变换块中,如果x≠0或者y≠0,则c(x,y)=0。

类别AC_LOW可指示变换块在高频位置处不具有非零系数。在AC_LOW变换块中,在大于水平阈值(即,T_x)的列中不存在非零变换系数并且在大于垂直阈值(即,T_y)的行中不存在非零变换系数。因此,在AC_LOW变换块中,如果x>T_x或者Y>T_y则c(x,y)=0。可将AC_LOW类别粗略地解释为仅在变换块的左上部分中存在非零系数。在下面进一步描述阈值T_x和T_y。

类别AC_HIGH_X可指示残差块在大于阈值(即,T_y)的行号中不具有非零系数并且在大于阈值(即,T_x)的至少一个列中具有至少一个非零系数。也就是说,如果y>T_y则c(x,y)=0,而在x>T_x的某个(x,y)处,c(x,y)!=0。可将AC_HIGH_X类别粗略地解释在变换块的右上部分中存在非零系数但是在变换块的下半部中不存在非零变换系数。

类别AC_HIGH_Y可指示残差块在大于阈值(即,T_x)的列号中不具有非零系数并且在阈值(即,T_y)的至少一个列中具有至少一个非零系数。也就是说,如果x>T_x,则c(x,y)=0,而在y>T_y的某个y(x,y)处,c(x,y)!=0。可将AC_HIGH_Y类别粗略地解释为在变换块的左下部分中存在非零系数但是在变换块的右半部中不存在非零变换系数。

AC_HIGH类别可指示变换块在x>T_x且y>T_y的某个(x,y)处具有非零系数。可将AC_HIGH类别粗略地解释为在变换块的右下部分中存在非零系数。

在示例中,水平阈值(即,T_x)和/或垂直阈值(即,T_y)可基于变换块的大小。因此,类别可进一步基于变换块的大小。例如,水平阈值T_x可与变换块的宽度相关并且垂直阈值T_y可与变换块的高度相关。该关系可以是线性关系。例如,可将水平阈值T_x选择为变换块的宽度的一半。例如,可将垂直阈值T_y选择为变换块的高度的一半。其它线性关系是可能的。

水平阈值T_x和垂直阈值T_y可基于为子像素内插而选择的滤波器。因为所选滤波器的频率响应对非零系数的分布有影响,所以可基于频率响应来设置水平阈值T_x和垂直阈值T_y。也就是说,可将阈值设计(例如,设置、选择等)成对应于用于生成子像素参考块的所选滤波器的统计。例如,如果所选滤波器是其频率响应在完整频带的一半处具有下降陡壁的低通滤波器,则可将水平阈值T_x设置成变换块的宽度的一半。例如,如果滤波器具有更靠近DC位置的较窄频率响应带,则水平阈值和垂直阈值可具有更靠近DC位置的值。

在示例中,在预测块基于完整像素位置的情况下,如上所述,水平阈值和垂直阈值可分别基于与变换块的宽度和高度的线性关系;而在子像素内插的情况下,可基于所选内插滤波器(即,基于所选滤波器的响应特性)来选择阈值。

在操作908处,过程900使用类别来确定用于对运动矢量进行代码化的上下文。上下文包括用于熵代码化的概率分布。在实施方式中,可使用相同的上下文来对运动矢量的水平偏移(即,mv-x)和垂直偏移(即,mv_y)进行编码。使用类别来确定用于对运动矢量进行代码化的上下文可以包括:使用类别作为对用于熵代码化的概率分布的表的索引(或者用于识别索引)。索引然后可确定用于对运动矢量进行代码化的上下文(并且因此确定概率分布)。

如上面所提及的,完整像素和子像素运动矢量可具有频域中的不同的响应特性。响应特性可被反映在残差块中,并且等效地反映在变换块中。因此,运动矢量与频域特性之间的相关性可用于对运动矢量进行编码。可以类似地在其它方向上使用相关性。也就是说在一些情形下,运动矢量信息可用于对变换块的变换系数进行编码。

类别可被单独使用或者与用于确定上下文的其它信息相结合地使用。如上所述,相邻块的帧间预测模式、运动块的运动矢量、当前块类型(例如,色度或辉度)和/或当前块大小中的一种或多种可与类别相结合地使用作为用于确定上下文的上下文信息。此上下文信息可与类别组合以确定上下文。例如,使用类别来确定用于对运动矢量进行代码化的上下文可以包括使用类别和与当前块(以及可选地相邻块)有关的其它值来识别其条目是用于熵代码化的概率分布的一个或多个表中的条目。

在实施方式中,确定上下文可包括确定上下文索引。上下文索引可用于从可用的上下文模型的列表中检索上下文模型(例如,概率分布)。上下文信息的值的组合可映射到索引值。这些值的一种或多种组合可映射到相同的索引值。也就是说,一个或多个上下文信息组合可映射到相同的上下文模型。

在操作910处,过程900使用上下文来对运动矢量进行编码。可在压缩比特流(诸如图4的压缩比特流420)中对运动矢量进行编码。在实现方式中,可将相同的上下文用于对运动矢量的水平偏移(即,mv_x)和垂直偏移(mv_y)进行编码。

在实施方式中,残差块(以及等效地,变换块)可根据其在水平维度和垂直维度中的每一个上的能量分布被分别分类。因此,在操作906处确定类别可包括确定变换块的水平(或第一)类别并且确定变换块的垂直类别(或第二类别)。因此,在操作908处确定上下文可包括使用水平类别来确定用于对运动矢量的水平偏移进行代码化的水平上下文;以及使用垂直类别来确定用于对运动矢量的垂直偏移进行代码化的垂直上下文。因此,在操作910处对运动矢量进行编码可包括将水平上下文用于对运动矢量的水平偏移进行代码化并且将垂直上下文用于对运动矢量的垂直偏移进行代码化。

在实施方式中,可从包括类别DC_ONLY、AC_LOW_X和AC_HIGH_X的集合中选择水平类别;并且可从包括类别DC_ONLY、AC_LOW_Y和AC_HIGH_Y的集合中选择垂直类别。

在另一实施方式中,可从包括类别AC_LOW_X和AC_HIGH_X的集合中选择水平类别;并且可从包括类别AC_LOW_Y和AC_HIGH_Y的集合中选择垂直类别。使用较小数目的类别可减少上下文的数目。减少上下文的数目可避免所谓的上下文稀释问题。上面提及的上下文可具有以下语义。

如上所述,类别DC_ONLY可指示变换块不具有非零AC系数。也就是说,变换的唯一非零系数是DC系数(即,位置(0,0)处的系数)。因此,在DC_ONLY变换块中,如果x!=0或者y!=0则c(x,y)=0。

类别AC_LOW_X可指示变换块在高频位置处不具有非零系数。在AC_LOW_X变换块中,在大于水平阈值(即,T_x)的列中不存在非零系数。因此,在AC_LOW_X变换块中,如果x>T_x,则c(x,y)=0。可将AC_LOW_X类别粗略地解释为在变换块的右部中不存在非零系数。

类别AC_HIGH_X可指示变换块在具有大列号的列中具有至少一个非零系数。在AC_HIGH_X变换块中,在大于水平阈值(即,T_x)的列中存在至少一个非零系数。因此,在AC_HIGH_X变换块中,在x>T_x的某个(x,y)处,c(x,y)!=0。可将AC_HIGH_X类别粗略地解释为在变换块的右部中存在至少一个非零系数。

类别AC_LOW_Y可指示变换块在高频位置处不具有非零系数。在AC_LOW_Y变换块中,在大于垂直阈值(即,T_y)的行中不存在非零系数。因此,在AC_LOW_Y变换块中,如果y>T_y,则c(x,y)=0。可将AC_LOW_Y类别粗略地解释为在变换块的下部中不存在非零系数。

类别AC_HIGH_Y可指示变换块在具有大行号的行中具有至少一个非零系数。在AC_HIGH_Y变换块中,在大于垂直阈值(即,T_y)的行中存在至少一个非零系数。因此,在AC_HIGH_Y变换块中,在y>T_y的某个(x,y)处,c(x,y)!=0。可将AC_HIGH_Y类别粗略地解释为在变换块的底部中存在至少一个非零系数。

水平阈值(即,T_x)和垂直阈值(即,T_y)可如上所述。

再次参考操作904。在一些情形下,多于一个变换块可以与当前块相关联。也就是说,当前块可以被多个变换块消费。例如,诸如由图4的变换级404所执行的变换操作可以执行一组不同大小的变换,使得当前块被划分成(即,对应于)比当前块小的变换块或者使得变换块具有与当前块相同的大小。例如,大小8x8的当前块可以被四个4x4变换块消费。其它当前块大小和变换块大小是可能的。被多个变换块消费的当前块指示当前块中的频率分量高。当频率分量高时,优选使用较小的变换大小(即,在大小上比当前块小)。

在多个变换块对应于当前块的情况下,在操作904处确定用于当前块的变换块可意指选择与当前块相关联的变换块中的一个。

在实施方式中,可以选择变换块中的任何一个。在另一实施方式中,选择具有最高AC分量的变换块。例如,可选择具有最高数目的非零系数的变换块。

在又一个实施方式中,确定用于变换块中的每一个的相应的类别(诸如关于操作906所描述的)。注意的是,类别(如上所述)可以相对于变换块中的非零系数的位置形成级数(progression)。例如,在{DC_ONLY,AC_LOW_X,AC_HIGH_X}的集合中,AC_LOW_X变换块与可能出现非零系数的DC_ONLY变换块相比包括更多的位置,并且AC_HIGH_X与可能出现比非零系数的AC_LOW_X块相比包括更多的位置。因此,具有最高类别(即,最高数目的非零变换系数)的变换块被选择。在类别{DC_ONLY,AC_LOW,AC_HIGH_X,AC_HIGH_Y,AC_HIGH}的集合中,可通过DC_ONLY、AC_LOW、AC_HIGH_X、AC_HIGH_Y和AC_HIGH来给出级数,使得AC_HIGH是最高类别并且DC_ONLY是最低类别。类别AC_HIGH_X和AC_HIGH_Y可以是相等的类别。

可以针对变换块中的每一个确定相应的类别,并且可以通过使用投票过程来选择要在运动矢量代码化时使用的类别。示例投票过程如下:每个变换块对其类别投一票;并且选择接收到最多投票的类别。在另一示例中,通过每个变换块所投的投票通过与变换块大小成比例的因子来加权,并且接收到最大加权投票的类别被选择。

如上所述,变换系数(即,变换块中的信息)用于对运动矢量进行编码。因此,过程900可在运动矢量信息之前将变换系数编码(即,添加、写入等)到压缩比特流中。以这种方式,解码器可首先对变换系数进行解码以确定用于变换块的类别。解码器可使用类别来对运动矢量进行解码。

过程900可在压缩比特流中对类别进行编码。可针对所有块或者针对一些块对类别进行编码。虽然如上所述在残差块(以及等效地,变换块)与运动矢量之间存在相关性(例如,统计相关性),但是该相关性可能不是确切的(即,非确定性的)。在这样的情形下,对类别进行编码以改进代码化效率可以是有用的。

类别的编码可取决于变换系数。例如,变换块中的非零系数的数目可用于确定用于对类别进行代码化的上下文。例如,变换类型可用于确定用于对类别进行代码化的上下文。在变换系数上调节类别的编码可限制与类别的编码相关联的成本(即,以比特为单位)。

编解码器可使用多种变换类型。变换类型可以是由图4的变换级404使用来生成变换块的变换类型。例如,变换类型(即,逆变换类型)可以是要由图5的去量化级504使用的变换类型。可用的变换类型可包括一维(1D)离散余弦变换(DCT)或其近似值、1D离散正弦变换(DST)或其近似值、二维(2D)DCT或其近似值、2D DST或其近似值以及恒等变换。其它变换类型可以是可用的。在示例中,可在一个维度(例如,行或列)上应用一维变换(1D DCT或1DDST)而在另一维度上应用恒等变换。

图10是用于使用帧间预测来对视频帧的当前块进行解码的方法或过程1000的流程图。过程1000可用于对用于对当前块进行帧间预测的运动矢量进行解码。运动矢量包括水平偏移(即,mv_x)和垂直偏移(即,mv_y)。可将过程1000例如实现为可由计算设备(诸如发送站102或接收站106)执行的软件程序。该软件程序可包括机器可读指令,所述机器可读指令可以被存储在诸如存储器204或辅助存储214这样的存储器中,并且当由处理器(诸如CPU 202)执行时,可以使计算设备执行过程900。过程1000可以被全部地或部分地实现在解码器500的熵解码级502中。可使用专用硬件或固件来实现过程1000。可以使用多个处理器、存储器或两者。

在操作1002处,过程1000对用于当前块的变换块进行解码。例如,使用扫描次序,过程1000可从编码比特流(诸如图5的压缩比特流420)中对变换系数进行解码。如本文所使用的,变换系数可以是量化变换系数。过程1000可对变换系数进行解码,直到块结束语法元素被解码为止或者直到变换块的所有变换系数都已被解码为止,以先到者为准。在块结束语法元素被解码的情况下,过程1000可将变换块的所有剩余变换系数设置为零。

可使用任何数目的方法来对变换系数进行解码,只要生成了压缩比特流的编码器和解码器使用相同的方法即可。例如,二进制令牌树可用于对变换系数进行代码化。例如,非二进制符号的字母可用于对变换块进行代码化。例如,可基于变换系数的幅度来针对变换系数对一个或多个语法元素进行代码化。

在操作1004处,过程1000确定用于变换块的类别。在实施方式中,可像关于图9的操作906所描述的那样确定类别。在示例中,可基于变换块中的非零系数的位置来确定类别。在示例中,类别可基于变换块的大小。在示例中,类别可基于变换块中的非零系数的位置和变换块的大小。

在实施方式中,并且如关于过程900类似地描述的,确定类别可意指从压缩比特流中对类别进行解码。在操作902处解码的变换系数可用于对类别进行解码。

如关于图9所描述的,可从包括类别DC_ONLY、AC_LOW、AC_HIGH_X、AC_HIGH_Y和AC_HIGH的集合中选择类别。

在操作1006处,过程1000使用类别来确定用于对运动矢量进行解码的上下文。可像关于图9的908类似地描述的那样确定上下文。

在操作1008处,过程1000使用上下文来对运动矢量进行解码。在实施方式中,上下文可用于对运动矢量的水平偏移(即,mv_x)和垂直偏移(即,mv_y)进行解码。在操作1010处,过程1000可像例如关于图5的帧内/帧间预测级508所描述的那样对当前块进行帧间预测。

在实现方式中,残差块(以及等效地,变换块)可根据其在水平维度和垂直维度中的每一个上的能量分布分别被分类。因此,在操作1004处确定类别可包括确定变换块的水平类别并且确定用于变换块的垂直类别。因此,在操作1006处确定上下文可包括使用水平类别来确定用于对运动矢量的水平偏移进行代码化的水平上下文;以及使用垂直类别来确定用于对运动矢量的垂直偏移进行代码化的垂直上下文。因此,在操作1008处对运动矢量进行解码可包括将水平上下文用于对运动矢量的水平偏移进行代码化并且将垂直上下文用于对运动矢量的垂直偏移进行代码化。

在实施方式中,水平类别选自包括类别DC_ONLY、AC_LOW_X和AC_HIGH_X的集合,而垂直类别选自包括类别DC_ONLY、AC_LOW_Y和AC_HIGH_Y的集合。

在实施方式中,水平类别选自包括类别AC_LOW_X和AC_HIGH_X的集合,而垂直类别选自包括类别AC_LOW_Y和AC_HIGH_Y的集合。

如上所述,在一些情形下,当前块可以被多个变换块消费。因此,在实现方式中,确定变换块的类别包括:确定用于当前块的第一变换块的第一类别;确定用于当前块的第二变换块的第二类别;以及相对于上述级数选择第一类别和第二类别中的与较高类别相对应的一个。也就是说,类别可以具有基于可能在变换块中出现非零变换系数的位置的数目的级数或排名。排名可以从与最低数目的位置相关联的类别开始并且进行到与最高数目的位置相关联的类别。在使用多于一个变换块来对当前预测块进行代码化的情况下,可以确定用于变换块中的每一个的类别,并且所确定的类别中的仅一个是用于当前块的类别。在此示例中,选择是第一类别或第二类别中的哪一个与可用于非零系数的较高数目的位置相关联。实际上,这可以是对变换块中的无论哪一个具有较高数目的非零变换系数的类别的选择。

为了说明的简单,过程900和1000被描绘和描述为一系列步骤或操作。然而,依照本公开的步骤或操作可以各种次序和/或同时发生。附加地,可以使用本文未呈现和描述的其它步骤或操作。此外,可能并不要求所有图示的步骤或操作来实现依照所公开的主题的方法。

上面描述的编码和解码的各方面图示编码和解码技术的一些示例。然而,应当理解的是,当在权利要求中使用那些术语,编码和解码能意指对数据的压缩、解压缩、变换或任何其它处理或改变。

单词“示例”在本文中用于意指用作示例、实例或图示。在本文中被描述为“示例”的任何方面或设计不一定被解释为优于其它方面或设计为优选的或有利的。相反,单词“示例”的使用旨在以具体方式呈现构思。如本申请中所使用的,术语“或”旨在意指包括性“或”而不是排他性“或”。也就是说,除非另外指定或者从上下文中清楚,否则“X包括A或B”旨在意指自然包含性排列中的任一种。也就是说,如果X包括A;X包括B;或者X包括A和B两者,则在上述实例中的任一个下满足“X包括A或B”。此外,除非另外指定或者从上下文中清楚为针对单数形式,否则如本申请和所附权利要求中所使用的冠词“一”和“一个”通常应该被解释成意指“一个或多个”。此外,自始至终使用术语“实施方式”或“一个实施方式”不旨在意指同一实施例或实施方式,除非被如此描述。

发送站102和/或接收站106的实施方式(以及存储在其上并且/或者由此(包括由编码器400和解码器500)执行的算法、方法、指令等)可用硬件、软件或其任何组合加以实现。硬件可包括例如计算机、知识产权(IP)核、专用集成电路(ASIC)、可编程逻辑阵列、光学处理器、可编程逻辑控制器、微码、微控制器、服务器、微处理器、数字信号处理器或任何其它适合的电路。在权利要求中,术语“处理器”应该被理解为单独地或相结合地包含上述硬件中的任一个。术语“信号”和“数据”可互换地使用。另外,发送站102和接收站106的各部分不一定必须被以相同的方式实现。

另外,在一个方面中,例如,可使用具有计算机程序的通用计算机或通用处理器来实现发送站102或接收站106,所述计算机程序当被执行时,执行本文描述的各个方法、算法和/或指令中的任一种。此外或替换地,例如,可利用专用计算机/处理器,所述专用计算机/处理器包含用于执行本文描述的方法、算法或指令中的任一种的其它硬件。

可例如在视频会议系统中的计算机上实现发送站102和接收站106。替换地,可在服务器上实现发送站102,并且可在与服务器分开的设备(诸如手持通信设备)上实现接收站106。在此实例中,发送站102可使用编码器400来将内容编码成编码视频信号并将该编码视频信号发送到通信设备。进而,通信设备然后可使用解码器500来对编码视频信号进行解码。替换地,通信设备可对本地存储在通信设备上的内容(例如,不由发送站102发送的内容)进行解码。其它适合的发送和接收实施方式方案是可用的。例如,接收站106可以是通常固定的个人计算机而不是便携式通信设备,并且/或者包括编码器400的设备也可以包括解码器500。

另外,本公开的实现方式的全部或一部分可采取例如从计算机可用介质或计算机可读介质可访问的计算机程序产品的形式。计算机可用介质或计算机可读介质可以是可例如有形地包含、存储、传送或者输送程序以供由任何处理器使用或者连同任何处理器一起使用的任何设备。介质可以是例如电子、磁、光学、电磁或半导体设备。其它适合的介质也是可用的。

已描述了上述实施例、实施方式和方面以便允许容易理解本发明并且不限制本发明。相反,本发明旨在涵盖包括在所附权利要求的范围内的各种修改和等同布置,该范围应被赋予最广泛解释以便包含如在法律下许可的所有这样的修改和等效结构。

32页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:视频译码中的运动信息传播

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类