通过共帧运动矢量的运动预测代码化的制作方法

文档序号:22627494发布日期:2020-10-23 19:36阅读:148来源:国知局
通过共帧运动矢量的运动预测代码化的制作方法



背景技术:

数字图像和视频可以用于例如在互联网上的经由视频会议的远程商务会议、高清视频娱乐、视频广告或用户生成的内容的共享。由于在传输和处理图像和视频数据中涉及大量数据,所以高性能压缩对于传输和存储可能是有利的。



技术实现要素:

提供通过具有有限带宽的通信信道发送的高分辨率图像和视频将是有利的,诸如使用通过共帧运动矢量的运动预测代码化的图像和视频代码化。

本申请涉及对图像数据、视频流数据或两者进行编码和解码以供传输或存储。本文公开了用于使用利用共帧运动矢量的运动预测代码化进行编码和解码的系统、方法和装置的方面。

一个方面是一种用于视频解码的方法,包括:由处理器通过从编码比特流中对当前帧进行解码来生成解码帧,该处理器执行存储在非暂时性计算机可读介质上的指令。解码包括,从当前帧中识别当前块;基于当前块的代码化信息识别先前解码的块;确定先前解码的块的运动信息是否包括先前解码的块的共帧运动矢量;以及确定是否基于参考共帧识别用于对当前块进行解码的预测块。解码包括,响应于省略基于参考共帧识别用于对当前块进行解码的预测块的确定,并且响应于先前解码的块的运动信息包括先前解码的块的共帧运动矢量的确定,基于先前解码的块的空间位置和先前解码的块的共帧运动矢量在参考共帧中识别对准块;基于对准块的运动场信息确定对准块的运动矢量;基于对准块的运动矢量和先前解码的块的共帧运动矢量确定针对当前块的运动矢量预测;基于针对当前块的运动矢量预测确定所当前块的运动矢量;以及基于由当前块的运动矢量所指示的参考帧识别预测块。视频代码化包括,响应于基于参考共帧识别用于对当前块进行解码的预测块的确定并且响应于先前解码的块的运动信息包括先前解码的块的共帧运动矢量的确定,基于先前解码的块的共帧运动矢量确定针对当前块的共帧运动矢量预测。视频代码化包括,响应于基于参考共帧识别用于解码当前块的预测块的确定并且响应于先前解码的块的运动信息省略先前解码的块的共帧运动矢量的确定,根据先前解码的块的运动信息识别前向运动矢量;根据先前解码的块的运动信息识别后向运动矢量;基于前向运动矢量和后向运动矢量确定针对当前块的共帧运动矢量预测;基于针对当前块的共帧运动矢量预测确定当前块的共帧运动矢量;以及基于参考共帧和当前块的共帧运动矢量识别预测块。视频代码化包括,基于预测块生成与当前块相对应的解码块,将所述解码块包括在解码帧中。该方法包括,基于解码帧输出重构帧。

另一个方面是一种用于视频编码的方法,包括:由处理器通过从输入比特流中对当前帧进行编码来生成编码帧,该处理器执行存储在非暂时性计算机可读介质上的指令。编码包括,从当前帧中识别当前块;识别先前代码化的块;确定先前代码化的块的运动信息是否包括先前代码化的块的共帧运动矢量;以及确定是否基于参考共帧识别用于对当前块进行编码的预测块。编码包括,响应于省略基于参考共帧识别用于对当前块进行编码的预测块的确定,并且响应于先前代码化的块的运动信息包括先前代码化的块的共帧运动矢量的确定,基于先前代码化的块的空间位置和先前代码化的块的共帧运动矢量在参考共帧中识别对准块;基于对准块的运动场信息确定对准块的运动矢量;基于对准块的运动矢量和先前代码化的块的共帧运动矢量确定针对当前块的运动矢量预测;以及在输出比特流中包括用于当前块的运动矢量预测的指示。编码包括,响应于基于参考共帧识别用于对当前块进行编码的预测块的确定并且响应于先前代码化的块的运动信息包括先前代码化的块的共帧运动矢量的确定,基于先前代码化的块的共帧运动矢量确定针对当前块的共帧运动矢量预测。编码包括,响应于基于参考共帧识别用于对当前块编码的预测块的确定并且响应于先前代码化的块的运动信息省略先前代码化的块的共帧运动矢量的确定,根据先前代码化的块的运动信息识别前向运动矢量;根据先前代码化的块的运动信息识别后向运动矢量;以及基于前向运动矢量和后向运动矢量确定针对当前块的共帧运动矢量预测。编码包括,在输出比特流中包括针对当前块的共帧运动矢量预测的指示。该方法包括,输出输出比特流。

另一方面是一种用于视频编码的方法,包括:由执行存储在非暂时性计算机可读介质上的指令的处理器通过对来自输入比特流的当前帧进行编码来生成编码帧。编码包括,在时空上生成与当前帧相对应的参考共帧,其中当前帧是来自输入帧序列的帧,其中来自输入帧序列的每个帧在输入帧序列中具有相应的顺序位置,并且其中当前帧在输入帧序列中具有当前顺序位置,以及使用参考共帧对当前帧进行编码。该方法包括将编码帧包括在输出比特流中并输出该输出比特流。

这些和其他方面的变化将在下文中更详细地描述。

附图说明

本文的描述参考附图,其中,除非另外指出或以其它方式根据上下文是清楚的,否则贯穿若干视图,相似的附图标记指的是相似的部分。

图1是根据本公开的实施方式的计算设备的图。

图2是根据本公开的实施方式的计算和通信系统的图。

图3是根据本发明的实施方式的用于编码和解码的视频流的图。

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

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

图6是根据本发明的实施方式的帧的一部分的表示的框图。

图7是根据本发明的实施方式的帧序列的示例的框图。

图8是根据本公开的实施方式的使用参考共帧800进行编码的示例的流程图。

图9是根据本发明的实施方式的使用参考共帧900解码的示例的流程图。

图10是根据本发明的实施方式的使用参考共帧对视频序列进行代码化的一部分的示例的框图。

图11是根据本发明的实施方式的识别共帧运动矢量的示例的图。

图12是根据本发明的实施方式的帧间代码化的运动数据缩减部分的示例的流程图。

图13示出根据本公开的实施方式的、基于针对先前代码化的块的共帧运动矢量来确定当前块的运动矢量预测的示例,以及根据本公开的实施方式的、为当前块确定共帧运动矢量预测的示例的流程图。

图14是根据本发明的实施方式的、基于先前代码化的块的共帧运动矢量确定当前块的运动矢量预测的示例的图。

图15是根据本发明的实施方式的使用参考共帧的帧间预测的示例的流程图。

图16是根据本发明的实施方式的、基于来自先前代码化的块的共帧运动矢量确定预测块的示例的流程图。

图17是根据本公开的实施方式的、基于参考共帧来确定当前块的预测块的示例的流程图。

图18是根据本发明的实施方式的、基于先前代码化的块的运动矢量来确定当前块的共帧运动矢量预测的示例的图。

具体实施方式

图像和视频压缩方案可以包括:将图像或帧分解成较小的部分,诸如块;以及使用限制输出中每个块所包括的信息的技术来生成输出比特流。在一些实现方式中,可以通过减少空间冗余、减少时间冗余或它们的组合来限制输出中每个块所包括的信息。例如,可以通过以下步骤来减少时间冗余或空间冗余:基于对编码器和解码器两者可用的信息预测帧或其一部分,并且将表示预测帧与原始帧之间的差异或残差的信息包括在编码比特流中。可以通过将残差信息变换成变换系数、对变换系数进行量化并且对量化变换系数进行熵代码化来进一步压缩残差信息。可以在编码比特流中包括诸如运动信息的其他代码化信息,这可以包括发送基于对编码信息的预测的差分信息,该差分信息可以被熵代码化以进一步降低所对应的带宽利用率。能够对编码比特流进行解码以根据有限的信息重新创建块和源图像。

例如,帧间预测可以包括通过对来自当前帧的当前块与预测块之间的差异进行编码来对当前块进行编码。可以基于来自在编码器和解码器处可用的一个或多个参考帧的图像数据生成预测块,该一个或多个参考帧诸如在代码化次序中先前重构的一个或多个帧,其可以对应于按照输入或显示次序依次在当前帧之前或之后的显示帧。可以构建一些参考帧或替代参考帧,替代参考帧是被用于代码化并从显示中省略的具有与当前帧的时间位置不同的时间位置的参考帧。一些运动信息可能不可用于基于具有与当前帧的时间位置不同的时间位置的参考帧使用帧间预测进行视频代码化。

使用通过共帧运动矢量的运动预测代码化的视频代码化可以通过生成参考共帧并且参考该参考共帧预测当前帧来改进预测代码化的准确性和效率。参考共帧可以具有与当前帧的时间位置相对应的时空位置,该时空位置可以包括输入序列或帧索引位置。可以基于光流估计例如基于当前帧的时间位置的运动场信息生成参考共帧,其可以被称为基于运动场的参考帧或运动场参考帧,并且可以包括先前生成的运动信息的线性投影。可以使用共帧运动矢量来指示来自参考共帧的预测块,该共帧运动矢量指示离参考共帧中与当前帧中的当前块的空间位置相对应的空间位置的偏移或位移。

为了改进用于对在与当前帧不同的输入序列位置处参考先前重构的帧而编码的块的运动信息进行代码化的代码化效率,可以使用指示运动矢量预测的信息来在编码比特流中指示运动信息,该运动矢量预测可以是对当前帧的当前块的运动矢量的预测,并且可以基于与当前帧中的当前块邻近的先前代码化的块的共帧运动矢量来生成。共帧运动矢量可以涉及参考共帧,其与当前帧在时空上并发。

为了改进用于对参考参考共帧而编码的块的运动信息进行代码化的代码化效率,可以使用指示共帧运动矢量预测的信息来在编码比特流中指示运动信息,该共帧运动矢量预测可以是对当前帧的当前块的共帧运动矢量的预测,并且可以基于与当前帧中的当前块邻近的先前代码化的块的共帧运动矢量或者基于先前代码化的块的复合运动矢量来生成。

图1是根据本公开的实施方式的计算设备100的图。所示计算设备100包括存储器110、处理器120、用户接口(ui)130、电子通信单元140、传感器150、电源160和总线170。如本文所使用,术语“计算设备”包括本文所公开的能够执行任何方法,或其任何一个或多个部分的任何单元,或单元的组合。

计算设备100可以是固定计算设备,例如,个人计算机(pc)、服务器、工作站、小型计算机,或大型计算机;或移动计算设备,例如,移动电话、个人数字助理(pda)、膝上型计算机或平板pc。尽管示为单个单元,但是计算设备100的任一个或多个元件可以集成到任何数目的单独物理单元中。例如,用户接口130和处理器120可以集成在第一物理单元中,并且存储器110可以集成在第二物理单元中。

存储器110可以包括任何非暂时性计算机可用或计算机可读介质,例如,可以例如含有、存储、传送或传输数据112、指令114、操作系统116,或与其相关联的任何信息,以供计算设备100的其它组件使用或结合计算设备100的其它组件使用的任何有形设备。非暂时性计算机可用或计算机可读介质可以是例如,固态驱动器、存储卡、可移动介质、只读存储器(rom)、随机存取存储器(ram)、包括硬盘、软盘、光盘的任何类型的磁盘、磁卡或光卡、专用集成电路(asic),或适合于存储电子信息的任何类型的非暂时性介质,或其任何组合。

尽管示出单个单元,但是存储器110可以包括多个物理单元,例如,一个或多个主存储器单元,例如随机存取存储器单元;一个或多个辅助数据存储单元,例如磁盘;或其组合。例如,数据112或其一部分、指令114或其一部分,或两者可以存储于辅助存储单元中,并且可以结合处理相应数据112、执行相应指令114或两者加载到或另外传递到主存储单元。在一些实施方式中,存储器110或其一部分可以是可移动存储器。

数据112可以包括信息,例如输入音频数据、编码音频数据、解码音频数据等。指令114可以包括用于执行本文所公开的任何方法,或其任一个或多个部分的指导,例如代码。指令114可以在硬件、软件,或其任何组合中实现。例如,指令114可以实施为存储于存储器110中的信息,例如可以由处理器120执行以执行如本文所描述的相应方法、算法、方面,或其组合中的任一个的计算机程序。

尽管示为包括在存储器110中,但是在一些实施方式中,指令114或其一部分可以实施为专用处理器或电路,所述专用处理器或电路可以包括用于执行如本文所描述的方法、算法、方面或其组合中的任一个的专用硬件。指令114的部分可以分布在同一机器或不同机器上的多个处理器上,或分布在例如局域网、广域网、互联网,或其组合的网络上。

处理器120可以包括现有或以后开发的能够操纵或处理数字信号或其它电子信息的任何设备或系统,包括光学处理器、量子处理器、分子处理器,或其组合。例如,处理器120可以包括专用处理器、中央处理单元(cpu)、数字信号处理器(dsp)、多个微处理器,与dsp核心相关联的一个或多个微处理器、控制器、微控制器、专用集成电路(asic)、现场可编程门阵列(fpga)、可编程逻辑阵列、可编程逻辑控制器、微代码、固件、任何类型的集成电路(ic)、状态机,或其任何组合。如本文所使用,术语“处理器”包括单个处理器或多个处理器。

用户接口130可以包括能够与用户对接的任何单元,例如虚拟或物理小键盘、触摸板、显示器、触摸显示器、扬声器、麦克风、摄像机、传感器或其任何组合。例如,用户接口130可以是视听显示设备,并且计算设备100可以例如结合显示例如解码视频的视频,使用用户接口130视听显示设备呈现例如解码音频的音频。尽管示为单个单元,但是用户接口130可以包括一个或多个物理单元。例如,用户接口130可以包括用于与用户执行音频通信的音频接口,以及用于与用户执行基于视觉和触摸的通信的触摸显示器。

电子通信单元140可以通过有线或无线电子通信介质180,例如射频(rf)通信介质、紫外(uv)通信介质、可见光通信介质、光纤通信介质、有线通信介质、或其组合传输、接收或传输并接收信号。例如,如图所示,电子通信单元140可操作地连接到例如天线的电子通信接口142,所述电子通信接口被配置成通过无线信号进行通信。

尽管在图1中将电子通信接口142示为无线天线,但是电子通信接口142可以是如图所示的无线天线、例如以太网端口、红外端口、串行端口的有线通信端口,或能够与有线或无线电子通信介质180对接的任何其它有线或无线单元。尽管图1示出单个电子通信单元140和单个电子通信接口142,但是可以使用任何数目的电子通信单元和任何数目的电子通信接口。

传感器150可以包括例如音频感测设备、可见光感测设备、运动感测设备,或其组合。例如,传感器150可以包括例如麦克风的声音感测设备,或现有或以后开发的任何其它声音感测设备,其可以感测由操作计算设备100的用户发出的在计算设备100附近的声音,例如语音或其它言语。在另一示例中,传感器150可以包括相机,或现有或以后开发的任何其它图像感测设备,其可以感测图像,例如操作计算设备的用户的图像。尽管示出单个传感器150,但是计算设备100可以包括多个传感器150。例如,计算设备100可以包括以指向计算设备100的用户的视场定向的第一相机,以及以远离计算设备100的用户的视场定向的第二相机。

电源160可以是用于为计算设备100供电的任何合适的设备。例如,电源160可以包括有线外部电源接口;一个或多个干电池,例如,镍镉(nicd)、镍锌(nizn)、镍金属氢化物(nimh)、锂离子(li-ion);太阳能电池;燃料电池;或能够为计算设备100供电的任何其它设备。尽管在图1中示出单个电源160,但是计算设备100可以包括多个电源160,例如,电池和有线外部电源接口。

尽管示为单独的单元,但是电子通信单元140、电子通信接口142、用户接口130、电源160或其一部分可以被配置为组合单元。例如,电子通信单元140、电子通信接口142、用户接口130和电源160可以被实施为能够与外部显示设备对接,提供通信、电力或二者。

存储器110、处理器120、用户接口130、电子通信单元140、传感器150或电源160中的一个或多个可以通过总线170可操作地耦合。尽管图1中示出单个总线170,但是计算设备100可以包括多个总线。例如,存储器110、处理器120、用户接口130、电子通信单元140、传感器150和总线170可以通过总线170从电源160接收电力。在另一示例中,存储器110、处理器120、用户接口130、电子通信单元140、传感器150、电源160或其组合可以例如通过经由总线170发送和接收电子信号来传送数据。

尽管图1中未单独地示出,但是处理器120、用户接口130、电子通信单元140、传感器150或电源160中的一个或多个可以包括内部存储器,例如,内部缓冲器或寄存器。例如,处理器120可以包括内部存储器(未示出),并且可以将数据112从存储器110读取到内部存储器(未示出)中以进行处理。

尽管示为单独的元件,但是存储器110、处理器120、用户接口130、电子通信单元140、传感器150、电源160和总线170、或其任何组合可以集成在一个或多个电子单元、电路或芯片中。

图2是根据本公开的实施方式的计算和通信系统200的图。所示的计算和通信系统200包括计算和通信设备100a、100b、100c、接入点210a、210b以及网络220。例如,计算和通信系统200可以是多址系统,所述多址系统将通信,例如语音、音频、数据、视频、消息传递、广播或其组合提供到一个或多个有线或无线通信设备,例如计算和通信设备100a、100b、100c。尽管为简单起见,图2示出三个计算和通信设备100a、100b、100c、两个接入点210a、210b以及一个网络220,但是可以使用任何数目的计算和通信设备、接入点和网络。

计算和通信设备100a、100b、100c可以是例如计算设备,例如图1中所示的计算设备100。例如,计算和通信设备100a、100b可以是用户设备,例如移动计算设备、膝上型计算机、瘦客户端或智能电话,并且计算和通信设备100c可以是服务器,例如大型机或集群。尽管将计算和通信设备100a以及计算和通信设备100b描述为用户设备,并且将计算和通信设备100c描述为服务器,但是任何计算和通信设备都可以执行服务器的一些或全部功能、用户设备的一些或全部功能,或服务器和用户设备的一些或全部功能。例如,服务器计算和通信设备100c可以接收、编码、处理、存储、传输音频数据或其组合;并且计算和通信设备100a以及计算和通信设备100b中的一个或其两者可以接收、解码、处理、存储、呈现音频数据或其组合。

每个计算和通信设备100a、100b、100c可以被配置成例如通过网络220执行有线或无线通信,所述计算和通信设备可以包括用户设备(ue)、移动站、固定或移动订户单元、蜂窝电话、个人计算机、平板计算机、服务器、消费者电子装置、或任何类似设备。例如,计算和通信设备100a、100b、100c可以被配置成传输或接收有线或无线通信信号。尽管每个计算和通信设备100a、100b、100c示为单个单元,但是计算和通信设备可以包括任何数目的互连元件。

每个接入点210a、210b可以是被配置成通过有线或无线通信链路180a、180b、180c与计算和通信设备100a、100b、100c、网络220或两者通信的任何类型的设备。例如,接入点210a、210b可以包括基站,基站收发台(bts)、节点-b、增强型节点-b(enode-b)、家庭节点-b(hnode-b)、无线路由器、有线路由器、集线器、中继器、交换机,或任何类似的有线或无线设备。尽管每个接入点210a、210b被示为单个单元,但是接入点可以包括任何数目的互连元件。

网络220可以是配置成通过有线或无线通信链路提供例如语音、数据、应用、互联网协议语音(voip),或任何其它通信协议或通信协议的组合的服务的任何类型的网络。例如,网络220可以是局域网(lan)、广域网(wan)、虚拟专用网(vpn)、移动或蜂窝电话网络、互联网或任何其它电子通信方式。网络可以使用通信协议,例如传输控制协议(tcp)、用户数据报协议(udp)、互联网协议(ip)、实时传输协议(rtp)、超文本传输协议(http),或其组合。

计算和通信设备100a、100b、100c可以使用一个或多个有线或无线通信链路,或通过有线和无线通信链路的组合经由网络220彼此通信。例如,如图所示,计算和通信设备100a、100b可以通过无线通信链路180a、180b通信,并且计算和通信设备100c可以通过有线通信链路180c通信。计算和通信设备100a、100b、100c中的任一个可以使用任何一个或多个有线或无线通信链路通信。例如,第一计算和通信设备100a可以使用第一类型的通信链路通过第一接入点210a通信,第二计算和通信设备100b可以使用第二类型的通信链路通过第二接入点210b通信,并且第三计算和通信设备100c可以使用第三类型的通信链路通过第三接入点(未示出)通信。类似地,接入点210a、210b可以通过一种或多种类型的有线或无线通信链路230a、230b与网络220通信。尽管图2示出通过网络220进行通信的计算和通信设备100a、100b、100c,但是计算和通信设备100a、100b、100c可以通过任何数目的通信链路,例如直接有线或无线通信链路彼此通信。

在一些实施方式中,计算和通信设备100a、100b、100c中的一个或多个之间的通信可以省略通过网络220的通信,并且可以包括通过例如数据存储设备的另一介质(未示出)传递数据。例如,服务器计算和通信设备100c可以将例如编码音频数据的音频数据存储在例如便携式数据存储单元的数据存储设备中,并且计算和通信设备100a或计算和通信设备100b中的一个或两个可以例如通过将数据存储设备从服务器计算和通信设备100c物理地断开连接以及将数据存储设备物理地连接到计算和通信设备100a或计算和通信设备100b而从数据存储单元访问、读取或检索所存储的音频数据。

计算和通信系统200的其它实施方式是可能的。例如,在实施方式中,网络220可以是自组织网络,并且可以省略接入点210a、210b中的一个或多个。计算和通信系统200可以包括图2中未示出的设备、单元或元件。例如,计算和通信系统200可以包括更多的通信设备、网络和接入点。

图3是根据本公开的实施方式的用于编码和解码的视频流300的图。视频流300,例如由摄像机捕获的视频流或由计算设备生成的视频流可以包括视频序列310。视频序列310可以包括相邻帧320的序列。尽管示出三个相邻帧320,但是视频序列310可以包括任何数目的相邻帧320。

来自相邻帧320的每个帧330可以表示来自视频流的单个图像。尽管在图3中未示出,但是帧330可以包括一个或多个段、图块或平面,所述一个或多个段、图块或平面可以被独立地,例如并行地代码化或以其他方式处理。帧330可以包括块340。尽管在图3中未示出,但是块可以包括像素。例如,块可以包括16×16像素组、8×8像素组、8×16像素组,或任何其它像素组。除非本文另外指示,否则术语“块”可以包括帧的超块、宏块、段、切片,或任何其它部分。帧、块、像素或其组合可以包括显示信息,例如亮度信息、色度信息,或可以用于存储、修改、传送或显示视频流或其一部分的任何其它信息。

图4是根据本公开的实施方式的编码器400的框图。在例如图1中所示的计算设备100或图2中所示的计算和通信设备100a、100b、100c的设备中,编码器400可以实施为例如存储在例如图1中所示的存储器110的数据存储单元中的计算机软件程序。计算机软件程序可以包括可以由处理器,例如图1中所示的处理器120执行的机器指令,并且可以使设备对本文所描述的视频数据进行编码。编码器400可以实施为例如包括在计算设备100中的专用硬件。

编码器400可以对输入视频流402(例如图3中所示的视频流300)进行编码以生成编码(压缩)比特流404。在一些实施方式中,编码器400可以包括用于生成压缩比特流404的前向路径。前向路径可以包括帧内/帧间预测单元410、变换单元420、量化单元430、熵编码单元440,或其任何组合。在一些实施方式中,编码器400可以包括用于重构帧以对其它块进行编码的(由断开的连接线指示的)重构路径。重构路径可以包括去量化单元450、逆变换单元460、重构单元470、滤波单元480,或其任何组合。编码器400的其它结构变型可以用于对视频流402进行编码。

为了对视频流402进行编码,可以块为单位处理视频流402内的每个帧。因此,可以从帧中的块中识别出当前块并且可以对当前块进行编码。

在帧内/帧间预测单元410处,可以使用可以在单个帧内的帧内预测或可以是从帧到帧的帧间预测来对当前块进行编码。帧内预测可以包括根据先前已进行编码和重构的当前帧中的样本生成预测块。帧间预测可以包括根据一个或多个先前重构的参考帧中的样本生成预测块。为当前帧中的当前块生成预测块可以包括执行运动估计以生成指示参考帧的适当参考部分的运动矢量。

帧内/帧间预测单元410可以从当前块(原始块)减去预测块以产生残差块。变换单元420可以执行基于块的变换,其可以包括将残差块变换为例如频域中的变换系数。基于块的变换的示例包括karhunen-loève变换(klt)、离散余弦变换(dct)、奇异值分解变换(svd)、和不对称离散正弦变换(adst)。在示例中,dct可以包括将块变换到频域中。dct可以包括使用基于空间频率的变换系数值,其中在矩阵的左上方具有最低频率(即,dc)系数并且在矩阵的右下方具有最高频率系数。

量化单元430可以将变换系数转换成离散量子值,所述离散量子值可以被称为量化变换系数或量化等级。量化变换系数可以由熵编码单元440进行熵编码以产生熵编码系数。熵编码可以包括使用概率分布度量。可以将用于对块进行解码的熵编码系数和信息输出到压缩比特流404,所述熵编码系数和信息可以包括所使用的预测的类型、运动矢量和量化器值。可以使用例如行程长度编码(rle)和零行程代码化的各种技术来格式化压缩比特流404。

重构路径可以用于维持编码器400与相应的解码器—例如图5中所示的解码器500—之间的参考帧同步。重构路径可以类似于下面讨论的解码过程,并且可以包括对编码帧或其一部分进行解码,对编码帧或其一部分进行解码可以包括对编码块进行解码,对编码块进行解码可以包括在去量化单元450处对量化变换系数进行去量化并且在逆变换单元460处对去量化变换系数进行逆变换,以产生导数残差块。重构单元470可以将由帧内/帧间预测单元410生成的预测块添加到导数残差块,以创建解码块。滤波单元480可以应用于解码块以生成重构块,这可以减少失真,例如构块伪像。尽管在图4中示出一个滤波单元480,但是对解码块进行滤波可以包括环路滤波、去块滤波,或其它类型的滤波,或滤波类型的组合。如通过482处的虚线所指示,所述重构块可以作为用于对当前帧的另一部分、另一帧或两者进行编码的重构块进行存储或以其他方式可访问,所述重构块可以是参考帧的一部分。如在484处的虚线所指示,帧的代码化信息,例如去块阈值索引值可以被编码、包括在压缩比特流404中,或可以被编码并包括在压缩比特流404中。

编码器400的其它变型可以用于对压缩比特流404进行编码。例如,基于非变换的编码器400可以在不具有变换单元420的情况下直接量化残差块。在一些实施方式中,量化单元430和去量化单元450可以组合成单个单元。

图5是根据本公开的实施方式的解码器500的框图。在例如图1中所示的计算设备100或图2中所示的计算和通信设备100a、100b、100c的设备中,解码器500可以实施为例如存储于例如图1中所示的存储器110的数据存储单元中的计算机软件程序。计算机软件程序可以包括可以由处理器,例如图1中所示的处理器120执行的机器指令,并且可以使设备对本文所描述的视频数据进行解码。解码器500可以实施为例如包括在计算设备100中的专用硬件。

解码器500可以接收压缩比特流502,例如图4中所示的压缩比特流404,并且可以对压缩比特流502进行解码以生成输出视频流504。解码器500可以包括熵解码单元510、去量化单元520、逆变换单元530、帧内/帧间预测单元540、重构单元550、滤波单元560,或其任何组合。解码器500的其它结构变型可以用于对压缩比特流502进行解码。

熵解码单元510可以使用例如上下文自适应二进制算术解码来对压缩比特流502内的数据元素进行解码,以产生一组量化变换系数。去量化单元520可以对量化变换系数进行去量化,并且逆变换单元530可以对去量化变换系数进行逆变换以产生导数残差块,所述导数残差块可以对应于由图4中所示的逆变换单元460生成的导数残差块。使用从压缩比特流502解码的标头信息,帧内/帧间预测单元540可以生成与在编码器400中创建的预测块相对应的预测块。在重构单元550处,可以将预测块添加到导数残差块以创建解码块。滤波单元560可以被应用于解码块以减少例如构块伪像的伪像,其可以包括环路滤波、去块滤波,或其它类型的滤波或滤波类型的组合,并且可以包括生成重构块,所述重构块可以作为输出视频流504输出。

解码器500的其它变型可以用于对压缩比特流502进行解码。例如,解码器500可以在不具有滤波单元560的情况下产生输出视频流504。

图6是根据本公开的实现方式的诸如图3中所示的帧330的帧的一部分600的表示的框图。如图所示,帧的部分600在矩阵或笛卡尔平面中的两行和两列中包括四个64×64块610。在一些实现方式中,64×64块可以是最大代码化单元,n=64。每个64×64块可以包括四个32×32块620。每个32×32块可以包括四个16×16块630。每个16×16块可以包括四个8×8块640。每个8×8块640可以包括四个4×4块650。每个4×4块650可以包括16个像素,这16个像素可以被表示在笛卡尔平面或矩阵中的每个相应块中的四行和四列中。像素可以包括表示在帧中捕获的图像的信息,诸如亮度信息、颜色信息和位置信息。在一些实现方式中,诸如所示16×16像素块的块可以包括:亮度块660,其可以包括亮度像素662;和两个色度块670、680,诸如u或cb色度块670和v或cr色度块680。色度块670、680可以包括色度像素690。例如,如图所示亮度块660可以包括16×16亮度像素662并且每个色度块670、680可以包括8×8色度像素690。尽管示出了块的一种布置,但是可以使用任何布置。尽管图6示出n×n块,但是在一些实现方式中,可以使用n×m块。例如,可以使用32×64块、64×32块、16×32块、32×16块或任何其他尺寸的块。在一些实现方式中,可以使用n×2n块、2n×n块或它们的组合。

在一些实现方式中,视频代码化可以包括有序块级代码化。有序块级代码化可以包括以诸如光栅扫描次序的次序对帧的块进行代码化,其中可以从帧的左上角或帧的一部分中的块开始识别并处理块,并且从顶行向底行且从左向右沿着行继续进行,依次识别每个块以进行处理。例如,帧的顶行和左列中的64×64块可以是被代码化的第一块并且紧接在第一块右边的64×64块可以是被代码化的第二块。从顶部起的第二行可以是被代码化的第二行,使得第二行的左列中的64×64块可以在第一行的最右列中的64×64块之后被代码化。

在一些实现方式中,对块进行代码化可以包括使用四叉树代码化,该四叉树代码化可以包括以光栅扫描次序对块内的更小的块单元进行代码化。例如,可以使用四叉树代码化来对图6中所示的帧的部分的左下角中所示的64×64块进行代码化,其中可以对左上部32×32块进行代码化,然后可以对右上部32×32块进行代码化,然后可以对左下部32×32块进行代码化,并且然后可以对右下部32×32块进行代码化。可以使用四叉树代码化来对每个32×32块进行代码化,其中可以对左上部16×16块进行代码化,然后可以对右上部16×16块进行代码化,然后可以对左下部16×16块进行代码化,并且然后可以对右下部16×16块进行代码化。可以使用四叉树代码化来对每个16×16块进行代码化,其中可以对左上部8×8块进行代码化,然后可以对右上部8×8块进行代码化,然后可以对左下部8×8块进行代码化,并且然后可以对右下部8×8块进行代码化。可以使用四叉树代码化来对每个8×8块进行代码化,其中可以对左上部4×4块进行代码化,然后可以对右上部4×4块进行代码化,然后可以对左下部4×4块进行代码化,并且然后可以对右下部4×4块进行代码化。在一些实现方式中,可以对于一16×16块省略8×8块,并且可以使用四叉树代码化来对该16×16块进行代码化,其中可以对左上部4×4块进行代码化,然后可以以光栅扫描次序对该16×16块中的其他4×4块进行代码化。

在一些实现方式中,视频代码化可以包括通过例如从对应的编码帧中省略原始帧中的一些信息来压缩原始帧或输入帧中包括的信息。例如,代码化可以包括减少频谱冗余、减少空间冗余、减少时间冗余或它们的组合。

在一些实现方式中,减少频谱冗余可以包括使用基于亮度分量(y)和两个色度分量(u和v或cb和cr)的颜色模型,该颜色模型可以被称为yuv或ycbcr颜色模型或颜色空间。使用yuv颜色模型可以包括使用相对大量的信息来表示帧的一部分的亮度分量并且使用相对少量的信息来表示帧的该部分的每个对应的色度分量。例如,帧的一部分可以由高分辨率亮度分量并由两个较低分辨率色度分量来表示,该高分辨率亮度分量可以包括16×16像素块,而这两个较低分辨率色度分量中的每一个均将帧的该部分表示为8×8像素块。像素可以指示值,例如,范围从0到255的值,并且可以使用例如八个比特来存储或发送。尽管参考yuv颜色模型描述了本公开,但是可以使用任何颜色模型。

在一些实现方式中,减少空间冗余可以包括使用例如离散余弦变换(dct)来将块变换到频域中。例如,编码器的单元,诸如图4中所示的变换单元420,可以使用基于空间频率的变换系数值来执行dct。

在一些实现方式中,减少时间冗余可以包括使用帧之间的相似性以基于一个或多个参考帧使用相对少量的数据来对帧进行编码,该一个或多个参考帧可以是视频流的先前编码、解码和重构的帧。例如,当前帧的块或像素可以类似于参考帧的在空间上对应的块或像素。在一些实现方式中,当前帧的块或像素可以类似于参考帧在不同空间位置处的块或像素,并且减少时间冗余可以包括生成指示该块或像素在当前帧中的位置与该块或像素在参考帧中的对应位置之间的空间差异或平移的运动信息。

在一些实现方式中,减少时间冗余可以包括识别参考帧的与当前帧的当前块或像素相对应的一部分。例如,可以搜索可以被存储在存储器中的参考帧或参考帧的一部分以识别用于生成预测的一部分以用于以最大效率对当前帧的当前块或像素进行编码。例如,搜索可以识别参考帧的一部分并且可以被称为运动搜索,针对该部分使当前块与基于参考帧的该部分而生成的预测块之间的像素值方面的差异最小化。在一些实现方式中,所搜索的参考帧的部分可以是受限的。例如,可以被称为搜索区域的所搜索的参考帧的部分可以包括参考帧的有限数目的行。在一个示例中,识别用于生成预测的参考帧的部分可以包括计算成本函数,诸如搜索区域的各部分的像素与当前块的像素之间的绝对差之和(sad)。

在一些实现方式中,可以将用于生成预测的参考帧的部分在参考帧中的位置与当前帧中的当前块之间的空间差异表示为运动矢量。可以将预测块与当前块之间的像素值方面的差异称为差分数据、残差数据、预测误差或残差块。在一些实现方式中,可以将生成运动矢量称为运动估计,并且可以基于使用为fx,y的笛卡尔坐标的位置来指示当前块的像素。类似地,可以基于使用为rx,y的笛卡尔坐标的位置来指示参考帧的搜索区域的像素。可以基于例如当前帧的像素与参考帧的对应像素之间的sad确定当前块的运动矢量(mv)。

尽管为了清楚在本文中参考帧的矩阵或笛卡尔表示来描述,但是可以在任何数据结构中存储、发送、处理帧或它们的任何组合,使得可以针对帧或图像有效率地表示像素值。例如,可以在诸如所示矩阵的二维数据结构中或在诸如矢量数组的一维数据结构中存储、发送、处理帧,或它们的任何组合。在一个实现方式中,帧的表示诸如所示二维表示可以对应于帧作为图像的渲染中的物理位置。例如,在帧的左上角中的块的左上角中的位置可以与帧作为图像的渲染的左上角中的物理位置相对应。

在一些实现方式中,可以通过将输入块分区成一个或多个预测分区来改进基于块的代码化效率,该一个或多个预测分区可以是用于预测代码化的矩形分区,包括正方形分区。在一些实现方式中,使用预测分区的视频代码化可以包括从多种候选预测分区方案当中选择一预测分区方案。例如,在一些实现方式中,用于64×64代码化单元的候选预测分区方案可以包括尺寸范围从4×4到64×64的矩形尺寸的预测分区,诸如4×4、4×8、8×4、8×8、8×16、16×8、16×16、16×32、32×16、32×32、32×64、64×32或64×64。在一些实现方式中,使用预测分区的视频代码化可以包括完整预测分区搜索,该完整预测分区搜索可以包括:通过使用每种可用的候选预测分区方案来对代码化单元进行编码来选择预测分区方案;以及选择最佳方案,诸如产生最小率失真误差的方案。

在一些实现方式中,对视频帧进行编码可以包括识别用于对当前块例如块610进行编码的预测分区方案。在一些实现方式中,识别预测分区方案可以包括确定是否将块编码为最大代码化单元尺寸(其可以为如图所示的64×64)的单个预测分区,或者将块分区成多个预测分区,这多个预测分区可以如图所示与诸如32×32块620、16×16块630或8×8块640的子块相对应,并且可以包括确定是否分区成一个或多个更小的预测分区。例如,可以将64×64块分区成四个32×32预测分区。可以将四个32×32预测分区中的三个编码为32×32预测分区,并且可以将第四32×32预测分区进一步分区成四个16×16预测分区。可以将四个16×16预测分区中的三个编码为16×16预测分区,并且可以将第四16×16预测分区进一步分区成四个8×8预测分区,其中的每一个均可以被编码为8×8预测分区。在一些实现方式中,识别预测分区方案可以包括使用预测分区决策树。

在一些实现方式中,针对当前块的视频代码化可以包括从多种候选预测代码化模式中识别最优预测代码化模式,这可以在处理具有各种统计性质的视频信号时提供灵活性,并且可以改进压缩效率。例如,视频代码化器可以评价每种候选预测代码化模式以识别最优预测代码化模式,该最优预测代码化模式可以是例如使当前块的误差度量诸如率失真成本最小化的预测代码化模式。在一些实现方式中,可以通过基于当前块与对应的预测块之间的相似性限制可用的候选预测代码化模式的集合来降低搜索候选预测代码化模式的复杂性。在一些实现方式中,可以通过执行有向细化模式搜索来降低搜索每种候选预测代码化模式的复杂性。例如,可以针对诸如16×16、8×8和4×4的有限的一组候选块尺寸来生成度量,与每个块尺寸相关联的误差度量可以是降序,并且可以评价附加候选块尺寸,诸如4×8和8×4块尺寸。

在一些实现方式中,可以通过将当前残差块分区成一个或多个变换分区来改进基于块的代码化效率,该一个或多个变换分区可以是用于变换代码化的矩形分区,包括正方形分区。在一些实现方式中,使用变换分区的视频代码化可以包括选择均匀变换分区方案。例如,诸如块610的当前残差块可以是64×64块并且可以在不使用64×64变换进行分区的情况下被变换。

虽然在图6中未明确地示出,但是可以使用均匀变换分区方案来对残差块进行变换分区。例如,可以使用包括四个32×32变换块的均匀变换分区方案、使用包括十六个16×16变换块的均匀变换分区方案、使用包括六十四个8×8变换块的均匀变换分区方案或者使用包括256个4×4变换块的均匀变换分区方案来对64×64残差块进行变换分区。

在一些实现方式中,使用变换分区的视频代码化可以包括使用多形式变换分区代码化来识别残差块的多个变换块尺寸。在一些实现方式中,多形式变换分区代码化可以包括:递归地确定是使用当前块尺寸变换来变换当前块还是通过对当前块进行分区并对每个分区进行多形式变换分区代码化来变换当前块。例如,图6中所示的左下部块610可以是64×64残差块,并且多形式变换分区代码化可以包括确定是使用64×64变换来对当前64×64残差块进行代码化还是通过将64×64残差分区成诸如四个32×32块620的分区并对每个分区进行多形式变换分区代码化来对64×64残差块进行代码化。在一些实现方式中,确定是否对当前块进行变换分区可以基于将用于使用当前块尺寸变换来对当前块进行编码的成本与用于使用分区尺寸变换来对每个分区进行编码的成本之和进行比较。

图7是根据本公开的实现方式的帧序列700的示例的框图。序列700表示正方形702从视场的左上部移动到视场的右下部的场景。序列700包括输入帧710-780,这些输入帧被按照时间次序从左向右示出,该时间次序可以被称为输入次序或帧索引次序fi.1-fi.8。例如,第一输入帧710可以具有一(1)的帧索引,第二输入帧720可以具有二(2)的帧索引,第三输入帧730可以具有三(3)的帧索引,第四输入帧740可以具有四(4)的帧索引,第五输入帧750可以具有五(5)的帧索引,第六输入帧760可以具有六(6)的帧索引,第七输入帧770可以具有七(7)的帧索引,并且第八输入帧780可以具有八(8)的帧索引。

正方形702在每个相应帧710-780中的位置被示出为实线正方形。例如,正方形702在第一帧710中的位置被示出在第一帧710的左上部处,而正方形702在第八帧780中的位置被示出在第八帧780的右下部处。正方形702沿着使用实线示出的非线性路径790移动。从正方形702在第一帧710的左上部处的位置到正方形702在第八帧780的右下部处的位置的估计线性路径795使用虚线来示出。沿着估计线性路径795的正方形702的估计位置使用第二帧720、第三帧730、第四帧740、第五帧750、第六帧760和第七帧770中的虚线正方形来示出。

图8是根据本公开的实现方式的、使用参考共帧800来编码的示例的流程图。可以在诸如图4中所示的编码器400的编码器中实现使用参考共帧800来编码。例如,图4中所示的编码器400的帧内/帧间预测单元410可以实现使用参考共帧800来编码。如图8中所示,使用参考共帧800来编码包括在810处识别当前输入帧、在820处识别运动场参考帧、在830处确定估计运动场、在840处生成参考共帧、在850处进行运动估计、在860处进行运动数据缩减和在870处输出。

在810处识别当前输入帧。识别当前帧包括识别输入帧,诸如图7中所示的输入帧710-780中的一个。识别当前输入帧可以包括:确定当前输入帧是来自输入帧序列的帧;识别用于对输入帧序列进行代码化的代码化次序;确定当前代码化次序;以及根据当前代码化次序来识别当前输入帧。例如,帧序列可以包括诸如图7中所示的帧710-780的八个帧和定义的代码化次序,诸如输入次序,或第一帧后面是第八帧,第八帧后面是第五帧,第五帧后面是第三帧,第三帧后面是第二帧,第二帧后面是第四帧,第四帧后面是第六帧,第六帧后面是第七帧。

当前输入帧可以是帧序列中的第一帧,诸如图7中所示的第一帧710,或者可以以其他方式被识别为黄金帧、关键帧,或者编码器可以以其他方式将当前帧的代码化模式识别为帧内代码化,可以对当前帧进行帧内代码化以生成第一编码帧,可以通过对第一编码帧进行解码和重构来生成第一重构帧,并且可以对于当前帧省略使用参考共帧800来编码。

在820处识别运动场参考帧。在810处识别的当前帧可以是被识别用于帧间预测代码化的帧,诸如图7中所示的第二帧720至第八帧280中的一个,并且编码器可以将可用于帧间预测代码化的参考帧识别为用于对当前帧进行代码化的运动场参考帧。运动场参考帧可以是基于当前可用于对编码视频序列进行解码的信息而生成的帧,诸如先前重构的帧,这些帧可以包括:后向参考帧,其可以是例如在时间或帧索引次序上依次在当前帧之前的先前重构的帧;或前向参考帧,其可以是例如在时间或帧索引次序上依次在当前帧之后的先前重构的帧。为了简单和清楚,可以在此将在820处识别的可用的参考帧称为运动场参考帧。可以基于可用的参考帧或其子集诸如在前向和后向方向上最近的两个参考帧来生成参考共帧。

例如,当前帧可以是以代码化次序代码化的第二帧,诸如图7中所示的第八帧780,其可以是帧序列中的最后帧。可以将与第一代码化帧相对应的第一重构帧识别为运动场参考帧。编码器可以确定运动场参考帧省略了帧间运动信息。可以通过参考作为参考帧的第一重构帧对当前帧进行帧间代码化来生成第二编码帧。可以基于第二编码帧生成第二重构帧以用作参考帧。另外可以对于当前帧省略使用参考共帧800来编码。

在另一示例中,可以将可以包括前向参考帧、后向参考帧或两者的两个或更多个可用的参考帧识别为运动场参考帧。

在830处确定估计运动场。编码器可以确定运动场参考帧包括表示与当前时间位置线性地相交的运动的帧间运动信息,该当前时间位置是当前帧的时间位置或帧索引位置。例如,指示序列的第一帧与序列的最后帧之间的运动的运动信息,诸如参考第一重构帧的一部分的序列的最后帧的运动矢量,与序列中的每个其他帧相交。

可以针对与当前帧相对应的当前时间位置来确定估计运动场。确定估计运动场可以包括例如以每像素方式或每块方式识别与当前时间位置相交的运动信息,诸如一个或多个运动矢量。例如,运动场参考帧可以具有大于当前帧的当前帧索引的帧索引,运动场参考帧的运动矢量可以涉及具有在当前帧索引之前的帧索引的重构的参考帧,并且可以将运动矢量识别为与当前时间位置相交。在另一示例中,运动场参考帧可以具有大于当前帧索引的帧索引,运动场参考帧的运动矢量可以涉及具有大于当前帧索引的帧索引的重构的参考帧,并且可以将运动矢量识别为与当前时间位置不相交。在另一示例中,运动场参考帧可以具有小于当前帧索引的帧索引,运动场参考帧的运动矢量可以涉及具有小于当前帧索引的帧索引的重构的参考帧,并且可以将运动矢量识别为与当前时间位置不相交。可以评价每个可用的参考帧的每个块或每个像素以识别相交运动信息。

可以使用线性投影来将相交运动信息投影到当前时间位置。对于来自相交运动信息的运动矢量,可以使用运动矢量与当前时间位置的交点处的线性投影来识别估计运动场中的当前空间位置。可以识别可用的前向参考帧,诸如在时间次序上最近的可用的前向参考帧,并且可以通过以下操作来生成估计运动场的前向分量,其可以是估计前向运动矢量:例如使用线性投影来基于在当前空间位置处与当前时间位置相交的对应运动矢量从估计运动场中的空间位置投影到所识别的前向参考帧。可以识别可用的后向参考帧,诸如在时间次序上最近的可用的后向参考帧,并且可以通过以下操作来生成估计运动场的后向分量,其可以是估计后向运动矢量:例如使用线性投影来基于在当前空间位置处与当前时间位置相交的对应运动矢量从估计运动场中的空间位置投影到所识别的后向参考帧。可以针对估计运动场位置处的每个空间位置诸如每个块位置来确定可以包括前向分量和后向分量的估计运动场,该估计运动场可以具有等同于当前输入帧的维度。为了简单和清楚,可以将可用的前向参考帧和可用的后向参考帧称为运动场投影帧。

在840处生成参考共帧。参考共帧可以通过以下操作来生成:对来自由估计运动场所指示的参考帧诸如运动场投影帧的像素值进行插值。尽管在图8中单独地示出,但是830处的运动场确定和840处的参考共帧生成可以被以组合方式执行并且可以包括多次或处理级,诸如多尺度处理,其能够包括遮挡检测。生成参考共帧可以包括使用每像素运动场或每块运动场。在一些实现方式中,生成参考共帧可以包括使用仿射同构模型。可以使用其他插值模型。

在850处使用参考共帧来对当前帧执行运动估计。除了如本文所描述的或另外从上下文中清楚的之外,运动估计可以类似于关于图4描述的运动估计。例如,图4中所示的编码器400的帧内/帧间预测单元410可以执行运动估计。运动估计可以被包括在针对当前帧的基于块的代码化中,其可以包括针对当前帧的每个块的在850处进行运动估计、在860处进行运动数据缩减和在870处输出,诸如以定义的次序,诸如光栅扫描次序或另一定义次序。在一些实现方式中,编码器可以在830处确定估计运动场的相应部分并且在840处针对关于参考共帧代码化的块以逐块方式生成参考共帧的相应部分。

运动估计可以包括:识别当前输入帧的当前块;以及生成用于对当前块进行编码的预测块。可以基于诸如后向参考帧的单个参考帧生成预测块,并且可以将该预测块称为单个参考代码化块。可以基于诸如后向参考帧和前向参考帧的组合的多个参考帧生成预测块,并且可以将该预测块称为复合参考代码化块。可以基于参考共帧生成预测块,并且可以将该预测块称为共帧参考代码化块。

例如,运动估计可以包括识别当前块并且基于参考共帧—诸如通过在参考共帧中执行运动搜索—来为当前块生成预测块。预测块可以在空间上与参考共帧的一部分相对应,并且运动估计可以包括识别共帧运动矢量,该共帧运动矢量指示当前块在当前帧中的空间位置与参考共帧中与预测块相对应的空间位置之间的位移。共帧运动矢量可以表示运动场线性投影的基于运动的参考共帧与由输入帧捕获的非线性运动之间的空间发散。在图10中示出了使用参考共帧来对诸如图7中所示的视频序列700的视频序列进行代码化的一部分的示例。在图11中示出了生成共帧运动矢量的示例。可以使用其他编码元件,诸如关于图4描述的元件。

在860处执行运动数据缩减。运动数据缩减可以通过以下操作来减少用于存储或发送在850处识别的运动信息的带宽利用率:识别可能可用于对运动信息进行解码的可用的先前生成的上下文运动信息并且基于该上下文运动信息对运动信息进行代码化。例如,与当前块邻近的先前代码化的块的运动矢量可以等同于针对当前块识别的运动矢量,并且可以将针对当前块识别的运动矢量代码化为对先前代码化的邻近块的参考。在另一示例中,先前代码化的邻近块的运动矢量可以类似于当前块的运动矢量,可以确定基于在850处识别的运动信息与先前代码化的邻近块的运动矢量之间的差异的差分运动信息,并且可以将针对当前块识别的运动矢量代码化为对先前代码化的邻近块和差分运动信息的参考。识别上下文运动信息可以包括评价多个邻近块并且基于定义的准则来识别上下文运动信息,该定义的准则可以包括次序准则。在图12中示出了运动数据缩减的示例。

在870处输出通过使用参考共帧800或其一部分来编码而生成的数据。例如,可以诸如以每块方式存储指示用于生成运动场、共帧运动矢量和运动场运动矢量的参考帧—如前向参考帧和后向参考帧—的信息,诸如帧标识符。共帧运动矢量或对应的差分运动信息以及当前块与预测块之间的残差可以被编码并包括在输出比特流中,该输出比特流可以被存储,并且可以被发送或以其他方式提供给解码器以用于对编码视频进行解码。

图9是根据本公开的实现方式的使用参考共帧900来解码的示例的流程图。可以在诸如图5中所示的解码器500的解码器中实现使用参考共帧900来解码。例如,图5中所示的解码器500的帧内/帧间预测单元540可以实现使用参考共帧900来解码。如图9中所示,使用参考共帧900来解码包括在910处识别当前编码帧、在920处识别运动场参考帧、在930处确定估计运动场、在940处生成参考共帧、在950处重构当前帧和在960处输出。

在910处识别当前编码帧。识别当前编码帧可以包括对来自编码比特流的编码帧数据进行解码或部分地解码。例如,解码器可以接收压缩比特流,诸如图4中所示的压缩比特流404,包括编码数据,并且可以对该压缩比特流进行解码或部分地解码以识别编码帧数据,诸如通过对帧数据进行熵解码并且对帧数据进行去量化。诸如在图8中的860处或在图4中的410处所示的,识别当前编码帧可以包括识别由编码器输出的残差数据。

在920处识别运动场参考帧。在910处识别的当前编码帧可以是被识别为帧间代码化的帧,诸如图7中所示的第二帧720至第八帧780中的一个,并且解码器可以将可用于帧间预测代码化的参考帧识别为用于对当前帧进行代码化的运动场参考帧。运动场参考帧可以是基于当前可用于对解码视频序列进行解码的信息而生成的帧,诸如先前重构的帧,这些帧可以包括:后向参考帧,其可以是例如在时间或帧索引次序上依次在当前帧之前的先前重构的帧;或前向参考帧,其可以是例如在时间或帧索引次序上依次在当前帧之后的先前重构的帧。为了简单和清楚,可以在此将在920处识别的可用的参考帧称为运动场参考帧。

例如,当前帧可以是在代码化次序中代码化的第二帧,诸如图7中所示的第八帧780,其可以是帧序列中的最后帧。可以将与第一代码化帧相对应的第一重构帧识别为运动场参考帧。解码器可以确定运动场参考帧省略了帧间运动信息。可以通过使用帧间代码化来参考作为参考帧的第一重构帧对当前编码帧进行解码来生成第二解码帧。可以基于第二解码帧生成第二重构帧以用作参考帧。另外可以对于当前帧省略使用参考共帧900来解码。

在另一示例中,可以将可以包括前向参考帧、后向参考帧或两者的两个或更多个运动场参考帧识别为运动场参考帧。帧间运动信息可能可用于所识别的运动场参考帧中的一个或多个。

在930处确定估计运动场。解码器可以确定运动场参考帧包括表示与当前时间位置线性地相交的运动的帧间运动信息,该当前时间位置是当前帧的时间位置或帧索引位置。例如,指示序列的第一帧与序列的最后帧之间的运动的运动信息—诸如参考第一重构帧的一部分的序列的最后帧的运动矢量—与序列中的每个其他帧相交。

可以针对与当前帧相对应的当前时间位置确定估计运动场。确定估计运动场可以包括例如以每像素方式或每块方式识别与当前时间位置相交的运动信息,诸如一个或多个运动矢量。例如,运动场参考帧可以具有大于当前帧的当前帧索引的帧索引,运动场参考帧的运动矢量可以涉及具有在当前帧索引之前的帧索引的重构的参考帧,并且可以将运动矢量识别为与当前时间位置相交。在另一示例中,运动场参考帧可以具有大于当前帧索引的帧索引,运动场参考帧的运动矢量可以涉及具有大于当前帧索引的帧索引的重构的参考帧,并且可以将运动矢量识别为与当前时间位置不相交。在另一示例中,运动场参考帧可以具有小于当前帧索引的帧索引,运动场参考帧的运动矢量可以涉及具有小于当前帧索引的帧索引的重构的参考帧,并且可以将运动矢量识别为与当前时间位置不相交。可以评价每个运动场参考帧的每个块或每个像素以识别相交运动信息。

可以使用线性投影来将相交运动信息投影到当前时间位置。对于来自相交运动信息的运动矢量,可以使用运动矢量与当前时间位置的交点处的线性投影来识别估计运动场中的当前空间位置。可以识别可用的前向参考帧,诸如在时间次序上最近的可用的前向参考帧,并且可以通过以下操作来生成估计运动场的前向分量,其可以是估计前向运动矢量:例如使用线性投影基于在当前空间位置处与当前时间位置相交的对应运动矢量,从估计运动场中的空间位置投影到所识别的前向参考帧。可以识别可用的后向参考帧,诸如在时间次序上最近的可用的后向参考帧,并且可以通过以下操作来生成估计运动场的后向分量,其可以是后向运动矢量:例如使用线性投影基于在当前空间位置处与当前时间位置相交的对应运动矢量,从估计运动场中的空间位置投影到所识别的后向参考帧。可以针对当前时间位置处的每个空间位置诸如每个块位置来确定可以包括前向分量和后向分量的估计运动场,该当前时间位置可以具有等同于当前编码帧的维度。为了简单和清楚,可以将可用的前向参考帧和可用的后向参考帧称为运动场投影帧。

在940处生成参考共帧。可以通过对来自由估计运动场指示的参考帧—诸如运动场投影帧—的像素值进行插值来生成参考共帧。尽管在图9中单独地示出,但是930处的运动场确定和940处的参考共帧生成可以被以组合方式执行并且可以包括多次或处理级,诸如多尺度处理,其能够包括遮挡检测。生成参考共帧可以包括使用每像素运动场或每块运动场。在一些实现方式中,生成参考共帧可以包括使用仿射同构模型。可以使用其他插值模型。

可以在950处生成重构的当前帧。可以在针对当前帧的基于块的解码中包括使用参考共帧900来解码,除了如本文所描述的或另外从上下文中清楚的之外,针对当前帧的基于块的解码可以类似于关于图5的基于块的解码。例如,可以在块基础上对当前帧进行解码,这可以包括例如以诸如光栅扫描次序或另一定义次序的定义次序对当前帧的每个块进行解码。在一些实现方式中,解码器可以在930处确定估计运动场的相应部分并且在940处针对关于参考共帧代码化的块以逐块方式生成参考共帧的相应部分。生成重构的当前帧的当前块可以包括使用参考共帧的帧间预测。在图15中示出了使用参考共帧的帧间预测的示例。可以使用其他解码元件,诸如关于图15描述的元件。

在960处输出通过使用参考共帧900或其一部分来解码而生成的数据。例如,可以存储重构帧,诸如以用作用于对另一编码帧进行解码的参考帧。在另一示例中,可以将重构帧输出到呈现设备以供呈现给用户。

图10是根据本公开的实现方式的、使用参考共帧1000来对视频序列进行代码化的一部分的示例的框图。如本文所使用的,术语代码化或其变体可以是指编码、解码或其相应的变体。可以在诸如图4中所示的编码器400的编码器中实现使用参考共帧1000来对视频序列进行代码化的部分。例如,图4中所示的编码器400的帧内/帧间预测单元410可以实现使用参考共帧1000来对视频序列进行代码化的部分。可以在诸如图5中所示的解码器500的解码器中实现使用参考共帧1000来对视频序列进行代码化的部分。例如,图5中所示的解码器500的帧内/帧间预测单元540可以实现使用参考共帧1000来对视频序列进行代码化的部分。

如在图10的顶部处所示的,参考图7中所示的输入序列700描述使用参考共帧1000来对视频序列进行代码化的部分。对输入序列700进行代码化可以包括以与输入次序不同的代码化次序对输入帧710-780进行代码化。例如,第一输入帧710可以按照代码化次序被第一代码化,第八输入帧780可以按照代码化次序被第二代码化,第五输入帧750可以按照代码化次序被第三代码化,第三输入帧730可以按照代码化次序被第四代码化,第二输入帧720可以按照代码化次序被第五代码化,第四输入帧740可以按照代码化次序被第六代码化,第六输入帧760可以按照代码化次序被第七代码化,并且第七输入帧770可以按照代码化次序被第八代码化。

第一代码化部分1010按照代码化次序被示出在输入序列700下面。第一代码化部分1010包括在对其他输入帧720-780进行代码化之前对第一输入帧710的至少一部分进行代码化。在第一代码化部分1010中可以生成第一代码化帧1012。例如,如由第一代码化帧1012与第一输入帧710之间的实方向线所指示的,可以对第一输入帧710进行帧内代码化以生成第一代码化帧1012。

第二代码化部分1020按照代码化次序被示出在第一代码化部分1010下面。第二代码化部分1020包括在对第二输入帧720至第七输入帧770进行代码化之前对第八输入帧780的至少一部分进行代码化。如由1014处的点画背景所指示的,可以基于第一代码化帧1012生成第一重构帧1014,其可以是第一输入帧710的重构。在第二代码化部分1020中可以生成第二代码化帧1022。如由第二代码化帧1022与第一重构帧1014之间的实方向线1024所指示的,可以对第八输入帧780进行帧间代码化以使用第一重构帧1014来生成第二代码化帧1022。第二代码化帧1022的一部分使用反斜线背景来示出以指示根据按照输入序列次序在第八输入帧780之前的具有更低帧索引的重构帧的帧间预测。尽管在图10中未示出,但是可以基于第八输入帧780使用帧内代码化来生成第二代码化帧1022的一个或多个部分。

第三代码化部分1030按照代码化次序被示出在第二代码化部分1020下面。第三代码化部分1030包括在对第二输入帧720、第三输入帧730、第四输入帧740、第六输入帧760和第七输入帧770进行代码化之前对第五输入帧750的至少一部分进行代码化。如由1026处的点画背景所指示的,可以基于第二代码化帧1022生成第二重构帧1026,其可以是第八输入帧780的重构。

图10中所示的第三代码化部分1030包括五行r1-r5,其包括有生成第三代码化帧的相应示例或其部分。例如,可以像第一行或顶行r1中所示的那样参考第一重构帧1014使用帧间预测来生成第三代码化帧。可以像第二行r2中所示的那样参考第二重构帧1026使用帧间预测来生成第三代码化帧。可以像第三行r3中所示的那样参考第一重构帧1014和第二重构帧1026使用诸如双向预测或复合预测的帧间预测来生成第三代码化帧。可以像第四行r4和第五行r5中所示的那样参考参考共帧使用帧间预测来生成第三代码化帧。

生成第三代码化帧的第一示例被示出在使用第一重构帧1014作为参考帧的第三代码化部分1030的第一行r1中的1032处。在第一示例中在1032处使用反斜线背景来示出第三代码化帧的一部分,以指示根据按照输入序列次序在第五输入帧750之前的具有更低帧索引的重构帧的帧间预测。

生成第三代码化帧的第二示例被示出在使用第二重构帧1026作为参考帧的第三代码化部分1030的第二行r2中的1034处。在第二示例中在1034处使用正斜线背景来示出第三代码化帧的一部分,以指示根据按照输入序列次序在第五输入帧750之后的具有更大帧索引的重构帧的帧间预测。

生成第三代码化帧的第三示例被示出在使用第一重构帧1014作为第一参考帧并且使用第二重构帧1026作为第二参考帧的第三代码化部分1030的第三行r3中的1036处。在第三示例中在1036处使用交叉阴影背景来示出第三代码化帧1036的一部分,以指示根据按照输入序列次序在第五输入帧750之后的具有更大帧索引的前向重构帧以及按照输入序列次序在第五输入帧750之前的具有更低帧索引的后向重构帧的双向或复合帧间预测。

第三代码化部分1030的第四行r4包括如由虚线矩形所指示的与第五帧索引相对应的视频序列位置处的运动场1038的表示。第三代码化部分1030的第五行r5包括参考共帧1040。

参考共帧1040被生成以用作用于对对应帧索引处的帧进行代码化的帧间预测的参考帧。参考共帧1040在空间上且在时间上与具有相应帧索引的输入帧并发。参考共帧1040是基于不同于对应的输入帧的信息而生成的。参考共帧1040可以由编码器基于不同于对应的输入帧的、可用于对对应的输入帧进行代码化的信息而生成。参考共帧1040可以由解码器独立地生成以用于对具有相应帧索引的编码帧进行解码。

可以基于光流估计生成参考共帧1040并且可以将其称为基于光流的参考帧。光流估计可以包括确定与相应帧索引相对应的运动场1038,并且可以将参考共帧1040称为基于运动场的参考帧。运动场1038可以是每像素运动场或每块运动场。

确定运动场1038可以包括识别参考帧,其可以是可用于对相应帧索引处的帧进行代码化的先前重构的帧,对于该相应帧索引处的帧,对应的运动信息和与相应帧索引相对应的视频序列位置相交,诸如作为图8和图9中描述的运动场参考帧。例如,如第三代码化部分1030的第一、第二和第三行r1-r3中所指示的,第一重构帧1014和第二重构帧1026是用于对第五帧索引处的第五输入帧750进行代码化的参考帧。如由第二代码化部分1020中的实方向线1024所表示的,与第二重构帧1026相对应的运动信息包括参考第一重构帧1014的运动矢量。为了简单和清楚,可以在此将由与所识别的先前重构的运动场参考帧(例如,在此示例中为第二重构帧1026)相对应的运动信息所参考的参考帧(例如,在此示例中为第一重构帧1014)称为在先参考帧,并且可以将所对应的运动矢量(例如,由第二代码化部分1020中的实方向线1024所表示的运动矢量)称为轨迹运动矢量。

与由第二代码化部分1020中的实方向线1024所表示的运动矢量相对应的轨迹运动矢量1042由第四行r4中的虚方向线指示。轨迹运动矢量1042与和第五帧索引相对应的视频序列位置的交点的投影空间位置1044由第四行r4中的虚线正方形指示。轨迹运动矢量1042与和第五帧索引相对应的视频序列位置的交点的投影空间位置1044对应于以下的概率:由帧序列捕获的场景或其一部分的运动在相应帧之间具有沿着轨迹运动矢量1042的轨迹。

可以线性地投影轨迹运动矢量1042以估计所对应的视频序列位置处的运动场1038。第五行r5包括使用线性投影基于轨迹运动矢量1042从相应的视频序列位置诸如与第五帧索引相对应的视频序列位置投影到运动场投影帧的前向投影运动矢量1046和后向投影运动矢量1048,这些运动场投影帧可以是可用于对相应帧索引处的帧进行代码化的参考帧,诸如本示例中的第一重构帧1014和第二重构帧1026。

可以基于来自运动场投影帧的值如像素值来对参考共帧1040进行插值,这些运动场投影帧可以是由投影运动矢量1046、1048所指示的重构帧1014、1026。基于来自运动场投影帧的值如像素值进行插值的参考共帧1040的一部分1050可以由第五行r5中的虚线框指示,这些运动场投影帧可以是由投影运动矢量1046、1048所指示的重构帧1014、1026。

可以使用参考共帧1040来对第五输入帧750或其一部分诸如块进行编码以用于帧间预测。例如,如由具有浅点画背景的实线正方形所指示的,第三代码化部分1030的第五行r5包括用于基于参考共帧1040对第五输入帧750进行帧间代码化的预测块1052的表示。基于参考共帧1040对预测块1052的帧间预测可以包括识别如由从预测块1052到参考共帧1040的对应部分1050的实方向线所指示的共帧运动矢量1054。共帧运动矢量1054可以指示所对应的输入帧(例如,第五输入帧750)与运动场插值的参考共帧1040之间的运动差异,诸如与非线性运动相对应的差异。

尽管在图10中示出了一个轨迹运动矢量1042,但是可以基于与各种重构的参考帧相关联的多个轨迹运动矢量生成参考共帧。例如,可以基于第八帧与第一帧、第五帧与第一帧、第三帧与第五帧、第三帧与第八帧、第二帧与第五帧、第二帧和第八帧或它们的组合之间的与和第四帧索引相对应的视频序列位置相交的运动信息来生成与第四输入帧740相对应的第四帧索引处的参考共帧。

图11是根据本公开的实现方式的识别共帧运动矢量1100的示例的图。除了如本文所描述的或另外从上下文中清楚的之外,识别共帧运动矢量1100可以类似于像关于如图8中所示的850处的运动估计所描述的那样识别共帧运动矢量。例如,图4中所示的编码器400的帧内/帧间预测单元410可以实现识别共帧运动矢量1100。尽管为了简单和清楚图11示出使用一个垂直空间维度的空间位置,但是可以使用其他空间维度,诸如水平维度。

图11将第一重构帧1110的表示示出为在左边的实垂直线。第一重构帧1110的一部分如像素或块的第一空间位置1112的垂直分量被示出为靠近第一重构帧1110的表示的顶部的实线圆。

第二重构帧1120的表示被显示为在右边的实垂直线。第二重构帧1120的一部分如像素或块的第二空间位置1122的垂直分量被示出为靠近第二重构帧1120的表示的底部的实线圆。

当前帧1130的表示被示出为在中间的实垂直线。当前帧1130的一部分如像素或块的当前空间位置1132的垂直分量被示出为靠近当前帧1130的表示的顶部的实线圆。相对于当前帧1130,第一重构帧1110是后向参考帧并且第二重构帧1120是前向参考帧。尽管在图11中示出了三个帧,但是可以使用其他帧,诸如在时间上在第一重构(参考)帧1110之前的帧、在第一重构(参考)帧1110与当前帧1130之间的帧、在当前帧1130与第二重构(参考)帧1120之间的帧、在第二重构(参考)帧1120之后的帧或它们的任何组合。

可以将当前帧1130的时间次序位置或帧索引表达为n。第一重构帧1110可以按照代码化次序在当前帧1130之前,可以按照时间次序在当前帧1130之前,并且可以具有低于当前帧1130的时间次序位置或帧索引n的时间次序位置或帧索引。可以将第一重构帧1110的时间次序位置或帧索引与当前帧1130的时间次序位置或帧索引n之间的时间或帧索引距离表达为d1,并且可以将第一重构帧1110的时间次序位置或帧索引表达为n-d1。

第二重构帧1120可以按照代码化次序在当前帧1130之前并且可以按照时间次序在当前帧1130之后。第二重构帧1120可以具有大于当前帧1130的时间次序位置或帧索引n的时间顺序位置或帧索引。可以将第二重构帧1120的时间次序位置或帧索引与当前帧1130的时间次序位置或帧索引n之间的时间或帧索引距离表达为d2,并且可以将第二重构帧1120的时间次序位置或帧索引表达为n+d2。

由与第一空间位置1112处的第一重构帧1110相对应的第一输入帧、当前空间位置1132处的当前帧1130以及与第二空间位置1122处的第二重构帧1120相对应的第二输入帧所捕获的内容的非线性运动1140被示出为实曲线。第一空间位置1112与第二空间位置1122之间的估计线性运动1150使用虚线来示出。在当前帧1130的帧索引n处的参考共帧(未单独地示出)的一部分如像素或块的空间位置1152的垂直分量被示出为估计线性运动1150和与当前帧1130相对应的时间位置的交点处的虚线圆。

可以例如使用运动估计基于参考共帧来预测当前帧1130的当前空间位置1132处的当前部分以根据参考共帧识别空间位置1152,这可以包括识别共帧运动矢量,其指示在参考共帧中从当前空间位置1132到空间位置1152的空间差异或位移。除了如本文所描述的或另外从上下文中清楚的之外,共帧运动矢量1160可以类似于运动矢量。

图12是根据本公开的实现方式的、帧间代码化的运动数据缩减1200部分的示例的流程图。可以在诸如图4中所示的编码器400的编码器中实现运动数据缩减1200。例如,图4中所示的编码器400的帧内/帧间预测单元410可以实现运动数据缩减1200。如图12中所示,运动数据缩减1200包括在1210处识别当前块、在1220处识别先前代码化的块以及在1230处确定针对当前块的帧间预测是否基于参考共帧。

在1210处识别当前块。例如,可以在块基础上对当前帧进行编码,这可以包括例如以诸如光栅扫描次序或另一定义次序的定义次序对当前帧的每个块进行编码。可以根据图8中所示的850处的运动估计和860处的运动数据缩减来识别当前块。

在1220处识别先前代码化的块。例如,编码器可以使用定义搜索程序来搜索邻近块以生成候选先前代码化的块的有序集合,其可以包括在空间上邻近的先前代码化的块、在时间上共定位的先前代码化的块或它们的组合,并且可以从候选先前代码化的块的集合中识别候选先前代码化的块作为先前代码化的块。

在1220处识别先前代码化的块可以包括识别先前代码化的块的代码化信息,诸如运动信息。例如,先前代码化的块的运动信息可以包括涉及一参考帧的运动矢量(单一参考)。在另一示例中,先前代码化的块的运动信息可以包括涉及相应参考帧的运动矢量(复合参考)。在另一示例中,先前代码化的块的运动信息可以包括涉及参考共帧的共帧运动矢量(共帧参考)。

编码器在1230处确定针对当前块的帧间预测是否基于参考共帧。

针对当前块的帧间预测可以基于参考帧或参考帧的组合,而不是参考共帧,并且运动数据缩减1200可以包括在1240处确定先前代码化的块的运动信息是否包括先前代码化的块的共帧运动矢量。先前代码化的块的运动信息可以包括先前代码化的块的共帧运动矢量,并且运动数据缩减1200可以包括:在1250处基于先前代码化的块的共帧运动矢量确定针对当前块的运动矢量预测并且可以在1260处输出运动矢量预测的指示。在图13中的1300处示出了基于先前代码化的块的共帧运动矢量确定针对当前块的运动矢量预测的示例。

针对当前块的帧间预测可以基于参考共帧,并且运动数据缩减1200可以包括在1270处识别针对当前块的共帧运动矢量预测并且可以包括在1280处输出共帧运动矢量预测的指示。在图13中的1310处示出了确定针对当前块的共帧运动矢量预测的示例。

图13示出根据本公开的实现方式的、基于先前代码化的块的共帧运动矢量确定针对当前块的运动矢量预测1300的示例以及根据本公开的实现方式的、确定针对当前帧1310的共帧运动矢量预测的示例的流程图。可以在诸如图4中所示的编码器400的编码器中实现确定针对当前块的运动矢量预测1300。例如,图4中所示的编码器400的帧内/帧间预测单元410可以实现确定针对当前块的运动矢量预测1300。如图13中所示,确定针对当前块的运动矢量预测1300包括在1302处识别对准块、在1304处确定对准块的运动信息以及在1306处确定运动矢量预测。

在1302处识别对准块。可以基于来自与当前块邻近的先前代码化的块的共帧运动矢量—诸如像图12中所示的那样根据先前解码的块的运动信息识别的共帧运动矢量—来识别对准块。对准块可以是来自参考共帧的块,诸如4×4块。对准块的空间位置可以被定中心在参考共帧中的这样的位置处:在空间上与当前帧中的先前代码化的块移位或偏移了共帧运动矢量的空间位置相对应的位置。

在1304处确定对准块的运动信息。确定对准块的运动信息可以包括确定从参考共帧到参考共帧的运动投影参考帧的运动矢量。确定对准块的运动信息可以包括:确定第一运动矢量(opfl_mv1),诸如指示后向参考帧的一部分的后向运动矢量。确定对准块的运动信息可以包括:确定第二运动矢量(opf1_mv2),诸如指示前向参考帧的一部分的前向运动矢量。可以通过将与对准块相对应的运动场取平均来确定对准块的运动矢量。

在1306处确定针对当前块的运动矢量预测。运动矢量预测可以指示与当前帧的当前块邻近的先前代码化的块与在1304处识别的相应参考帧之间的位移。可以基于对准块的第一运动矢量(opfl_mv1)和共帧运动矢量(cf_mv)确定第一运动矢量预测(mv_pred1),其可以被表达为mv_pred1=cf_mv+opfl_mv1。可以基于对准块的第二运动矢量(opfl_mv2)和共帧运动矢量(cf_mv)确定第二运动矢量预测(mv_pred2),其可以被表达为mv_pred2=cf_mv+opfl_mv2。可以将针对与当前块邻近的先前代码化的块的运动矢量预测识别为针对当前块的运动矢量预测。可以参考单个参考帧对当前块进行代码化,并且可以将针对与当前块邻近并与单个参考帧相关联的先前代码化的块的运动矢量预测识别为针对当前块的运动矢量预测。

可以在诸如图4中所示的编码器400的编码器中实现确定针对当前块1310的共帧运动矢量预测。例如,图4中所示的编码器400的帧内/帧间预测单元410可以实现确定针对当前块1310的共帧运动矢量预测。如图13中所示,确定针对当前块1310的共帧运动矢量预测包括在1312处确定先前代码化的块的运动信息是否包括先前代码化的块的共帧运动矢量。

先前代码化的块的运动信息可以省略先前代码化的块的共帧运动矢量,并且确定针对当前块1310的共帧运动矢量预测可以包括在1314处识别先前代码化的块的运动矢量并且在1316处基于先前代码化的块的运动矢量确定共帧运动矢量预测。

尽管在图13中未单独地示出,但是确定针对当前块1310的共帧运动矢量预测可以包括确定先前代码化的块的运动信息是否包括复合运动矢量,诸如后向运动矢量和前向运动矢量。在一些实现方式中,先前代码化的块的运动信息可以包括单个运动矢量,并且可以另外省略基于先前代码化的块确定针对当前块1310的共帧运动矢量预测。

在一些实现方式中,先前代码化的块的运动信息可以包括后向运动矢量和前向运动矢量,并且可以在1316处基于后向运动矢量和前向运动矢量确定共帧运动矢量预测。先前代码化的块的后向运动矢量可以涉及与当前帧相距第一时间距离的、与第一顺序位置(d1)相对应的后向参考帧。先前代码化的块的前向运动矢量可以涉及与当前帧相距第二时间距离的、与第二顺序位置(d2)相对应的前向参考帧。基于后向运动矢量(mv_ref1)和前向运动矢量(mv_ref2)确定共帧运动矢量预测(cf_mv_pred)可以包括:确定第二顺序位置(d2)与第一顺序位置(d1)和第二顺序位置(d2)之和的商与后向运动矢量(mv_ref1)的乘积以及第一顺序位置(d1)与第一顺序位置(d1)和第二顺序位置(d2)之和的商与前向运动矢量(mv_ref2)的乘积的和,其可以被表达如下:

cf_mv_pred=d2/(d1+d2)*mv_ref1+d1/(d1+d2)*mv_ref2.[等式1]

先前代码化的块的运动信息可以包括先前代码化的块的共帧运动矢量,并且确定针对当前块1310的共帧运动矢量预测可以包括在1318处将先前代码化的块的共帧运动矢量用作针对当前块的共帧运动矢量预测。

图14是根据本公开的实现方式的、基于先前代码化的块的共帧运动矢量确定针对当前块的运动矢量预测1400的示例的图。除了如本文所描述的或另外从上下文中清楚的之外,确定针对当前块的运动矢量预测1400可以类似于像图13中的1300处所示的那样确定针对当前块的运动矢量预测。

图14示出来自当前帧的当前块1410的表示。作为先前代码化的块的邻近块1420被示出为与当前块1410相邻。粗体方向线指示邻近块1420的共帧运动矢量1430。共帧运动矢量1430指示在参考共帧中在空间上与当前帧中的邻近块1420相对应的空间位置与对准块1440在参考共帧中的空间位置之间的空间位移。对准块1440可以是来自参考共帧的块,诸如4×4块。

对准块1440处的参考共帧的运动场1450使用点线来指示。可以基于运动场1450识别对准块1440的后向运动矢量1460和对准块1440的前向运动矢量1462。对准块1440的后向运动矢量1460可以涉及后向参考帧(未示出)。对准块1440的前向运动矢量1462可以涉及前向参考帧(未示出)。

针对邻近块1420的后向运动矢量预测1470指示由对准块1440的后向运动矢量1460所指示的后向参考帧中的位置与邻近块1420的当前帧中的位置之间的时空位移。针对邻近块1420的前向运动矢量预测1472指示由对准块1440的前向运动矢量1462所指示的前向参考帧中的位置与邻近块1420的当前帧中的位置之间的时空位移。

针对当前块1410的后向运动矢量预测1480指示由针对当前块1410的后向运动矢量预测1480所指示的后向参考帧中的位置与当前块1410的当前帧中的位置之间的时空位移并且使用虚方向线来指示。针对当前块1410的前向运动矢量预测1482指示由针对当前块1410的前向运动矢量预测1482所指示的前向参考帧中的位置与当前块1410的当前帧中的位置之间的时空位移并且使用虚方向线来指示。

图15是根据本公开的实现方式的、使用参考共帧的帧间预测1500的示例的流程图。可以在诸如图5中所示的解码器500的解码器中实现使用参考共帧的帧间预测1500。例如,图5中所示的解码器500的帧内/帧间预测单元540可以实现使用参考共帧的帧间预测1500。

如图15中所示,使用参考共帧的帧间预测1500包括:在1510处识别当前块、在1520处对当前块运动信息进行解码、在1530处识别先前解码的块以及在1540处确定是否基于参考共帧识别预测块。

在1510处识别来自当前帧的当前块。例如,可以在块基础上对当前帧进行解码,这可以包括例如以诸如光栅扫描次序或另一定义次序的定义次序对当前帧的每个块进行解码。

在1520处对当前块的代码化信息进行解码。对当前块的代码化信息进行解码可以包括从编码比特流中对当前块的代码化信息进行解码。

在1530处识别先前解码的块。可以基于当前块的代码化信息识别先前解码的块。例如,在1520处解码的当前块的代码化信息可以识别当前块的代码化模式,诸如帧间预测模式,并且可以基于当前块的代码化模式识别先前解码的块。在一些实现方式中,解码器可以使用定义搜索程序来搜索邻近块以生成候选先前解码的块的有序集合,其可以包括在空间上邻近的先前解码的块、在时间上共定位的先前解码的块或它们的组合,并且当前块的代码化信息诸如代码化模式可以将来自候选先前解码的块的集合的候选先前解码的块指示为先前解码的块。

在1530处识别先前解码的块可以包括识别先前解码的块的代码化信息,诸如运动信息。例如,先前代码化的块的运动信息可以包括涉及一参考帧的运动矢量(单一参考)。在另一示例中,先前代码化的块的运动信息可以包括涉及相应参考帧的运动矢量(复合参考)。在另一示例中,先前代码化的块的运动信息可以包括涉及参考共帧的共帧运动矢量(共帧参考)。

在1540处确定是否基于参考共帧识别预测块。可以基于当前块的代码化信息确定是否基于参考共帧识别预测块。

当前块的代码化信息可以指示当前块是参考诸如时间参考帧的参考帧代码化的,该参考帧可以是先前重构的帧,并且可以与参考共帧不同。解码器可以确定当前块的代码化信息指示当前块是参考参考帧代码化的,解码器可以确定可以省略基于参考共帧识别用于对当前块进行解码的预测块,并且解码器可以在1550处确定先前解码的块的运动信息是否包括先前解码的块的共帧运动矢量。解码器可以在1550处确定先前解码的块的运动信息包括先前解码的块的共帧运动矢量,并且解码器可以在1560处基于先前解码的块的共帧运动矢量确定用于当前块的预测块。在图15中示出了基于先前解码的块的共帧运动矢量确定用于当前块的预测块的示例。

尽管参考一个先前解码的块描述了使用参考共帧的帧间预测1500,但是使用参考共帧的帧间预测1500可以包括在1530处识别多个先前解码的块并且对于在1550处确定为包括共帧运动矢量的每个先前解码的块,在1560处确定相应的候选预测块。

当前块的代码化信息可以指示当前块是参考参考共帧代码化的。解码器可以确定当前块的代码化信息指示当前块是参考参考共帧代码化的,并且解码器可以在1570处基于参考共帧识别用于当前块的预测块。在图16中示出了基于参考共帧确定用于当前块的预测块的示例。尽管参考一个先前解码的块描述了使用参考共帧的帧间预测1500,但是使用参考共帧的帧间预测1500可以包括在1530处识别多个先前解码的块并且对于每个先前解码的块,在1570处确定相应的候选预测块。

图16是根据本公开的实现方式的、基于来自先前代码化的块的共帧运动矢量确定预测块1600的示例的流程图。可以在诸如图5中所示的解码器500的解码器中实现确定预测块1600。例如,图5中所示的解码器500的帧内/帧间预测单元540可以实现确定预测块1600。

如图16中所示,确定预测块1600包括在1610处识别对准块、在1620处确定对准块的运动信息、在1630处确定运动矢量预测、在1640处确定运动矢量以及在1650处识别预测块。

在1610处识别对准块。可以基于来自与当前块邻近的先前代码化的块的共帧运动矢量—诸如像图14中所示的那样根据先前解码的块的运动信息识别的共帧运动矢量—来识别对准块。对准块可以是来自参考共帧的块,诸如4×4块。对准块的空间位置可以被定中心在参考共帧中的这样的位置处:在空间上与当前帧中的先前代码化的块移位或偏移了共帧运动矢量(cf_mv)的空间位置相对应的位置。

在1620处确定对准块的运动信息。确定对准块的运动信息可以包括:确定指示从参考共帧到参考共帧的运动投影参考帧的位移的运动矢量。确定对准块的运动信息可以包括:确定第一运动矢量(opfl_mv1),诸如指示后向参考帧的一部分的后向运动矢量。确定对准块的运动信息可以包括:确定第二运动矢量(opf1_mv2),诸如指示前向参考帧的一部分的前向运动矢量。可以通过将与对准块相对应的运动场取平均来确定对准块的运动矢量。

在1630处确定针对当前块的运动矢量预测。运动矢量预测可以指示与当前帧中的当前块邻近的先前代码化的块与在1620处识别的相应参考帧之间的位移。可以基于对准块的第一运动矢量(opfl_mv1)和共帧运动矢量(cf_mv)确定第一运动矢量预测(mv_pred1),其可以被表达为mv_pred1=cf_mv+opfl_mv1。可以基于对准块的第二运动矢量(opfl_mv2)和共帧运动矢量(cf_mv)确定第二运动矢量预测(mv_pred2),其可以被表达为mv_pred2=cf_mv+opfl_mv2。可以将针对与当前块邻近的先前代码化的块的运动矢量预测识别为针对当前块的运动矢量预测。

在1640处确定当前块的运动矢量。尽管在图16中未单独地示出,但是确定当前块的运动矢量可以包括确定当前块的运动信息是否包括差分运动矢量。当前块的代码化信息可以省略差分运动矢量,并且可以将针对当前块的运动矢量预测识别为当前块的运动矢量。当前块的代码化信息可以包括差分运动矢量,并且可以将后向差分运动矢量与后向运动矢量预测之和识别为当前块的后向运动矢量,而且可以将前向差分运动矢量与前向运动矢量预测之和识别为当前块的前向运动矢量。

在1650处识别用于对当前块进行解码的预测块。例如,可以基于在1640处确定的当前块的运动矢量来识别复合参考预测块。

图17是根据本公开的实现方式的、基于参考共帧确定用于当前块的预测块1700的示例的流程图。可以在诸如图5中所示的解码器500的解码器中实现基于参考共帧确定用于当前块的预测块1700。例如,图5中所示的解码器500的帧内/帧间预测单元540可以实现基于参考共帧确定用于当前块的预测块1700。

如图17中所示,基于参考共帧确定用于当前块的预测块1700包括:在1710处确定先前代码化的块的运动信息是否包括先前代码化的块的共帧运动矢量。

先前代码化的块的运动信息可以省略先前代码化的块的共帧运动矢量,并且基于参考共帧确定用于当前块的预测块1700可以包括:在1720处识别先前代码化的块的运动矢量、在1730处确定当前块的共帧运动矢量预测、在1740处确定当前块的共帧运动矢量以及在1750处识别预测块。

可以在1720处根据先前代码化的块的运动信息来识别先前代码化的块的一个或多个运动矢量。尽管在图17中未单独地示出,但是基于参考共帧确定用于当前块的预测块1700可以包括确定先前代码化的块的运动信息是否包括复合运动矢量,诸如后向运动矢量和前向运动矢量。在一些实现方式中,先前代码化的块的运动信息可以包括单个运动矢量,并且可以另外省略基于先前代码化的块来基于参考共帧确定用于当前块的预测块1700。

在一些实现方式中,先前代码化的块的运动信息可以包括后向运动矢量和前向运动矢量,并且可以在1730处基于后向运动矢量和前向运动矢量确定针对当前块的共帧运动矢量预测。先前代码化的块的后向运动矢量可以涉及与当前帧相距第一时间距离(d1)的后向参考帧。先前代码化的块的前向运动矢量可以涉及与当前帧相距第二时间距离(d2)的前向参考帧。可以像等式1中所示的那样表达基于后向运动矢量(mv_ref1)和前向运动矢量(mv_ref2)确定共帧运动矢量预测(cf_mv_pred)。

先前代码化的块的运动信息可以包括先前代码化的块的共帧运动矢量,并且基于参考共帧1700确定用于当前块的预测块可以包括:在1740处将先前代码化的块的共帧运动矢量用作针对当前块的共帧运动矢量预测。

在1750处确定当前块的共帧运动矢量。尽管在图17中未单独地示出,但是确定当前块的共帧运动矢量可以包括确定当前块的运动信息是否包括差分共帧运动矢量。当前块的代码化信息可以省略差分共帧运动矢量,并且可以将针对当前块的共帧运动矢量预测识别为当前块的共帧运动矢量。当前块的代码化信息可以包括差分共帧运动矢量,并且可以将差分共帧运动矢量与共帧运动矢量预测之和识别为当前块的共帧运动矢量。

在1760处识别用于对当前块进行解码的预测块。例如,可以相对于当前块在当前帧中的位置基于由在1750处识别的共帧运动矢量所指示的参考共帧的一部分来识别预测块。

图18是根据本公开的实现方式的、基于先前代码化的块的运动矢量确定针对当前块1800的共帧运动矢量预测的示例的图。除了如本文所描述的或另外从上下文中清楚的之外,基于先前代码化的块的运动矢量确定针对当前块1800的共帧运动矢量预测可以类似于像图17中的1730处所示的那样确定共帧运动矢量预测。

图18示出来自当前帧的当前块1810的表示。作为先前代码化的块的邻近块1820被示出为与当前块1810相邻。可以基于先前代码化的邻近块1820的运动信息识别邻近块1820的后向运动矢量1830和邻近块1820的前向运动矢量1832。邻近块1820的后向运动矢量1830可以涉及用于对邻近块1820进行代码化的后向参考帧(未示出)。后向参考帧与当前帧之间的时间或帧索引距离以d1进行指示。邻近块1820的前向运动矢量1832可以涉及用于对邻近块1820进行代码化的前向参考帧(未示出)。前向参考帧与当前帧之间的时间或帧索引距离以d2进行指示。

粗体方向线指示针对邻近块1820的共帧运动矢量预测1840。可以基于邻近块1820的后向运动矢量1830和邻近块1820的前向运动矢量1832生成共帧运动矢量预测1840,后向参考帧与当前帧之间的时间或帧索引距离以d1进行指示,而前向参考帧与当前帧之间的时间或帧索引距离以d2进行指示。粗体虚方向线指示针对当前块1810的共帧运动矢量预测1850,其可以基于针对邻近块1820的共帧运动矢量预测1840被识别。

词语“示例”或“示例性”在本文中用于表示充当示例、实例或说明。本文描述为“示例”或“示例性”的任何方面或设计未必解释为比其它方面或设计优选或有利。相反,使用词语“示例”或“示例性”旨在以具体方式呈现概念。如本申请中使用的术语“或”旨在表示包括性“或”,而不是排他性“或”。也就是说,除非另外指定或从上下文中清楚可知,否则“x包括a或b”旨在表示任何自然的包括性置换。也就是说,如果x包括a;x包括b;或x包括a和b两者,则“x包括a或b”满足任何前述情况。另外,本申请和所附权利要求书中使用的冠词“一”和“一个”一般应解释为表示“一个或多个”,除非另外指定或从上下文清楚地指示为单数形式。此外,除非如此描述,否则贯穿全文使用术语“一实施例”或“一个实施例”或“一实现方案”或“一个实施方案”并不意图表示相同的实施例或实施方案。如本文所用,术语“确定”和“识别”或其任何变体包括以无论任何方式使用图1中所示的一个或多个设备来选择、确定、计算、查找、接收、确定、建立、获得或以其它方式识别或确定。

此外,为了简化说明,尽管本文的附图和描述可以包括步骤或阶段的序列或系列,但是本文公开的方法的要素可以按各种顺序和/或同时发生。另外,本文公开的方法的元素可以与本文未明确呈现和描述的其它元素一起出现。此外,根据所公开的主题,可以从方法的实施方案中省略本文所描述的方法的一个或多个要素。

传输计算和通信设备100a和/或接收计算和通信设备100b(以及存储在其上和/或由此执行的算法、方法、指令等)的实施可以用硬件,软件,或其任何组合来实现。硬件可以包括例如,计算机、知识产权(ip)内核、专用集成电路(asic)、可编程逻辑阵列、光处理器、可编程逻辑控制器、微代码、微控制器、服务器、微处理器、数字信号处理器,或任何其它合适的电路。在权利要求中,术语“处理器”应被理解为单独地或组合地包括任何前述硬件。术语“信号”和“数据”可互换使用。此外,传输计算和通信设备100a以及接收计算和通信设备100b的部分不必以相同的方式实施。

此外,在一个实施方案中,例如,可以使用计算机程序来实施传输计算和通信设备100a或接收计算和通信设备100b,所述计算机程序在被执行时实施本文描述的相应方法、算法和/或指令中的任一个。另外或替代地,例如,可以利用专用计算机/处理器,所述专用计算机/处理器可以包含用于实施本文描述的方法、算法或指令中的任一个的专用硬件。

传输计算和通信设备100a以及接收计算和通信设备100b可以例如在实时视频系统中的计算机上实施。或者,传输计算和通信设备100a可以在服务器上实施,而接收计算和通信设备100b可以在例如手持式通信设备的与服务器分开的设备上实施。在这种情况下,传输计算和通信设备100a可以使用编码器400将内容编码成编码视频信号并且将编码视频信号传输到通信设备。随后,通信设备又可以使用解码器500对编码视频信号进行解码。或者,通信设备可以对本地存储在通信设备上的内容,例如,不由传输计算和通信设备100a传输的内容进行解码。其它合适的传输计算和通信设备100a和接收计算和通信设备100b实施方案是可用的。例如,接收计算和通信设备100b可以是通常固定的个人计算机,而不是便携式通信设备,和/或包括编码器400的设备也可以包括解码器500。

此外,所有或部分实施方案可以采用可从例如有形计算机可用或计算机可读介质访问的计算机程序产品的形式。计算机可用或计算机可读介质可以是可以例如有形地包含、存储、传送,或输送程序以供任何处理器使用或结合任何处理器使用的任何设备。介质可以是例如电子、磁性、光学、电磁或半导体设备。

也可以使用其它合适的介质。已经描述了上述实施方案,以允许容易地理解本申请不是限制性的。相反,本申请涵盖所附权利要求书的范围内所包括的各种修改和等效布置,所述范围应被赋予最广泛解释,使得涵盖法律允许的所有这样的修改和等效结构。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1