视频编码系统和方法中的运动向量选择和预测与流程

文档序号:19351623发布日期:2019-12-06 21:27阅读:216来源:国知局
视频编码系统和方法中的运动向量选择和预测与流程
相关申请的交叉引用本申请是2015年12月22日提交的标题为“motionvectorselectionandpredictioninvideocodingsystemsandmethods(视频编码系统和方法中的运动向量选择和预测)”(代理人案卷号为real-2015731)的pct申请pct/cn2015/098329的部分继续申请,其是2015年3月31日提交的标题为“motionvectorselectionandpredictioninvideocodingsystemsandmethods(视频编码系统和方法中的运动向量选择和预测)”(代理人案卷号为real-2015693)的pct申请pct/cn2015/075599的部分继续申请,上述申请的整个公开内容在此出于所有目的并入本文。本公开涉及视频信号的编码和解码,并且更具体地,涉及针对视频序列的帧选择预测运动向量。
背景技术
:诸如数字图像、语音/音频、图形和视频的数字多媒体的出现由于其相对容易实现内容的可靠存储、通信、传输、以及搜索和访问而显著改进了各种应用并且打开了品牌新应用。总体而言,数字多媒体的应用领域非常广泛,涵盖娱乐、信息、医学和安全性等广泛领域,并以多种方式使社会受益。由诸如相机和麦克风的传感器捕获的多媒体通常是模拟的,并且以脉冲编码调制(pcm)形式进行的数字化过程使其成为数字。然而,就在数字化之后,作为重新创建扬声器和/或电视显示器所需的模拟表示所需的结果数据量可能会非常大。因此,大量数字多媒体内容的有效通信、存储或传输需要将其从原始pcm形式压缩为压缩表示。因此,已经发明了许多用于多媒体压缩的技术。多年来,视频压缩技术已经变得非常复杂,以至于它们通常可以达到10与100之间的高压缩系数,同时又保持了很高的心理视觉质量,通常类似于未压缩的数字视频。迄今为止,虽然在视频压缩的艺术和科学方面已取得了巨大的进步(如众多标准机构驱动的视频编码标准(诸如mpeg-1、mpeg-2、h.263、mpeg-4part2、mpeg-4avc/h.264、mpeg-4svc和mvc)、以及行业驱动的专有标准(诸如windowsmediavideo、realvideo、on2vp等)所展示的),但消费者对更高质量、更高清晰度的需求的日益增长,以及现在的可用于访问的3d(立体声)视频无论何时何地,只要有必要就可以经由诸如dvd/bd的各种手段通过空中广播、电缆/卫星、有线和移动网络输送到各种客户端设备(诸如pc/膝上型电脑、电视、机顶盒、游戏机、便携式媒体播放器/设备、智能电话和可穿戴计算设备)激起了对更高水平视频压缩的需求。在标准机构驱动的标准中,isompeg最近在高效率视频编码方面所做的努力就证明了这一点,所述技术有望通过itu-t标准委员会将来自h.265视频压缩多年探索性工作的新技术贡献和技术相结合。所有前述标准都采用通用的帧内/帧间预测编码框架,以便减少编码位流中的空间和时间冗余。帧间预测的基本概念是通过使用块匹配方法消除相邻图片之间的时间依赖性。在编码过程开始时,未编码视频序列的每个帧被分组成以下三类之一:i型帧、p型帧和b型帧。i型帧是帧内编码的。也就是说,仅将来自帧本身的信息用于对图片进行编码,并且不使用帧间运动补偿技术(但是可以应用帧内运动补偿技术)。其他两种类型的帧(p型和b型)使用帧间运动补偿技术进行编码。p图片与b图片之间的差异是用于运动补偿的参考图片的时间方向。p型图片按显示次序利用来自先前图片的信息,而b型图片可以按显示次序利用来自先前图片和未来图片的信息。对于p型帧和b型帧,每个帧被划分成用每个像素的亮度和色度分量的系数表示的像素块,并针对每个块获得一个或多个运动向量(因为b型图片可以利用来自未来和过去编码帧的信息,可以针对每个块对两个运动向量进行编码)。运动向量(mv)表示从当前块的位置到另一个先前编码帧(按显示次序可以是过去或未来帧)中的相似块(分别称为参考块和参考帧)的位置的空间位移。计算参考块与当前块之间的差以生成残差(也称为“残差信号”)。因此,对于帧间编码帧的每个块,仅需要对残差和运动向量进行编码,而无需对块的全部内容进行编码。通过消除视频序列的帧之间的这种时间冗余,可以压缩视频序列。为了进一步压缩视频数据,在已应用帧间或帧内预测技术之后,通常将残差信号的系数从空间域变换为频域(例如,使用离散余弦变换(“dct”))或离散正弦变换(“dst”)。对于自然出现的图像,诸如通常构成人类可感知视频序列的图像类型,低频能量始终比高频能量强。因此,频域中的残差信号比空间域中的残差信号具有更好的能量压缩效果。在正向变换之后,可以对系数和运动向量进行量化和熵编码。在解码器侧上,应用逆量化和逆变换来恢复空间残差信号。这些是所有视频压缩标准中的典型变换/量化过程。然后可以执行反向预测过程以便生成原始未编码视频序列的重新创建的版本。在过去的标准中,编码中所使用的块通常为16×16像素(在许多视频编码标准中称为宏块)。然而,由于这些标准的发展,因此帧尺寸变得更大,并且许多设备已经获得了显示比“高清晰度”(或“hd”)帧尺寸(诸如2048×1530像素)更高的功能。因此,可能希望具有更大的块以针对这些帧尺寸(例如,64×64像素)有效地对运动向量进行编码。然而,由于分辨率的对应提高,因此可能还希望能够以相对较小的规模(例如,4×4像素)执行运动预测和变换。随着运动预测分辨率提高,对于每帧以及整个视频序列来说,编码和传输运动向量所需的带宽量都将增加。附图说明图1示出了根据至少一个实施例的示例性视频编码/解码系统。图2示出了根据至少一个实施例的示例性编码设备的若干组件。图3示出了根据至少一个实施例的示例性解码设备的若干组件。图4示出了根据至少一个实施例的示例性视频编码器的框图。图5示出了根据至少一个实施例的示例性视频解码器的框图。图6示出了根据至少一个实施例的示例性运动向量选择例程。图7示出了根据至少一个实施例的示例性运动向量候选项生成子例程。图8示出了根据至少一个实施例的示例性运动向量恢复例程。图9示出了根据至少一个实施例的示例性8×8预测块的示意图。图10a至图10b示出了根据至少一个实施例的替代示例性运动向量候选项生成子例程。图11示出了根据至少一个实施例的示例性递归编码块分割方案的示意图。图12示出了根据至少一个实施例的示例性编码块索引例程。图13示出了根据至少一个实施例的示例性编码块分割子例程。图14a至图14c示出了根据至少一个实施例的图11所示的示例性递归编码块分割方案的应用的示意图。图15a至图15b示出了根据至少一个实施例的与相应视频帧的部分相对应的像素的两个区域的示意图。图16示出了包括图15a所示的像素区域的视频帧的示意图。图17示出了根据至少一个实施例的示例性矩形编码块预测值选择例程。图18示出了根据至少一个实施例的示例性处理区域搜索子例程。图19示出了根据至少一个实施例的示例性模板匹配测试子例程。图20a至图20e示出了根据至少一个实施例的与相应视频帧的部分相对应的像素的五个区域的示意图。图21至图21b示出了根据至少一个实施例的与视频帧的一部分相对应的像素区域的示意图。图22示出了根据至少一个实施例的示例性定向预测值选择例程。具体实施方式以下的详细描述主要由常规计算机组件的过程和操作的符号表示来表示,所述常规计算机组件包括处理器、用于处理器的存储器存储设备、连接的显示设备和输入设备。此外,这些过程和操作可以在异构分布式计算环境中利用常规计算机组件,包括远程文件服务器、计算机服务器和存储器存储设备。这些常规分布式计算组件中的每一个都可以由处理器经由通信网络访问。短语“在一个实施例中”、“在至少一个实施例中”、“在各个实施例中”、“在一些实施例中”等在本文中可以重复使用。此类短语不一定指的是同一实施例。除非上下文另有指示,否则术语“包括(comprising)”、“具有”和“包括(including)”是同义词。如上所述,在典型的“混合”视频编码方法的上下文中描述了各个实施例,因为其使用图片间/图片内预测和变换编码。现在详细参考附图中所示的实施例的描述。尽管结合附图和相关描述描述了实施例,但本领域普通技术人员将理解,在不脱离本公开的范围的情况下,替代和/或等同实现方式可以代替所示出且所描述的特定实施例,包括所有替代、修改和等同物,无论是否明确示出和/或描述。在各种替代实施例中,可以将另外的设备或所示设备的组合添加或组合,而不将范围限制于本文所公开的实施例。示例性视频编码/解码系统图1示出了根据至少一个实施例的示例性视频编码/解码系统100。编码设备200(在图2中示出并且在下面描述)和解码设备300(在图3中示出并且在下面描述)与网络104进行数据通信。解码设备200可以通过诸如存储区域网络(“san”)的直接数据连接、高速串行总线和/或经由其他合适的通信技术或经由网络104(如图1中的虚线所指示)与未编码视频源108进行数据通信。类似地,编码设备300可以通过诸如存储区域网络(“san”)的直接数据连接、高速串行总线和/或经由其他合适的通信技术或经由网络104(如图1中的虚线所指示)与可选的编码视频源112进行数据通信。在一些实施例中,编码设备200、解码设备300、编码视频源112和/或未编码视频源108可以包括一个或多个复制和/或分布式物理或逻辑设备。在许多实施例中,可能存在比图示更多的编码设备200、解码设备300、未编码视频源108和/或编码视频源112。在各个实施例中,编码设备200可以是通常能够通过网络104例如从解码设备300接受请求并相应地提供响应的联网计算设备。在各个实施例中,解码设备300可以是具有诸如移动电话的形状因数的联网计算设备;手表、眼镜或其他可穿戴计算设备;专用媒体播放器;计算平板电脑;机动车头单元;音频视频点播(avod)系统;专用媒体控制台;游戏设备、“机顶盒”、数字视频录像机、电视或通用计算机。在各个实施例中,网络104可以包括互联网、一个或多个局域网(“lan”)、一个或多个广域网(“wan”)、蜂窝数据网络和/或其他数据网络。网络104在各个点处可以是有线和/或无线网络。示例性编码设备参考图2,示出了示例性编码设备200的若干组件。在一些实施例中,编码设备可以包括比图2所示的组件更多的组件。然而,不必为了公开说明性实施例而示出所有这些通常常规的组件。如图2所示,示例性编码设备200包括用于连接到诸如网络104的网络的网络接口204。示例性编码设备200还包括处理单元208、存储器212、可选的用户输入端214(例如,字母数字键盘、小键盘、鼠标或其他定点设备、触摸屏和/或麦克风)以及可选的显示器216,它们都经由总线220与网络接口204互连。存储器212通常包括ram、rom和永久大容量存储设备,诸如磁盘驱动器、闪存存储器等。示例性编码设备200的存储器212存储操作系统224以及用于许多软件服务的程序代码,诸如具有用于执行运动向量选择例程600(以下参考图6描述)的指令的软件实现的帧间视频编码器400(以下参考图4描述)。存储器212还可以存储视频数据文件(未示出),所述视频数据文件可以表示音频/视频媒体作品的未编码副本,诸如作为示例的电影和/或电视剧集。可使用与非暂时性计算机可读介质232(诸如软盘、磁带、dvd/cd-rom驱动器、存储卡等)相关联的驱动器机制(未示出)将这些和其他软件组件加载到编码设备200的存储器212中。尽管已经描述了示例性编码设备200,但编码设备可以是能够与网络120通信并执行用于实现视频编码软件(诸如示例性软件实现的视频编码器400)和运动向量选择例程600的指令的大量联网计算设备中的任一者。在操作中,操作系统224管理编码设备200的硬件和其他软件资源,并为诸如软件实现的帧间视频编码器400的软件应用提供通用服务。对于诸如经由网络接口204进行的网络通信、经由输入端214接收数据、经由显示器216输出数据以及为各种软件应用(诸如软件实现的帧间视频编码器400)分配存储器212的硬件功能,操作系统224在编码设备上执行的软件与硬件之间充当中介。在一些实施例中,编码设备200可以进一步包括专用的未编码视频接口236,以用于通过诸如高速串行总线等与未编码视频源108通信。在一些实施例中,编码设备200可以经由网络接口204与未编码视频源108进行通信。在其他实施例中,未编码视频源108可以驻留在存储器212或计算机可读介质232中。尽管已经描述了通常符合常规通用计算设备的示例性编码设备200,但编码设备200可以是能够对视频进行编码的大量设备中的任一者,例如,视频记录设备、视频协处理器和/或加速器、个人计算机、游戏机、机顶盒、手持或可穿戴计算设备、智能电话或任何其他合适的设备。举例来说,编码设备200可以根据点播媒体服务(未示出)来操作。在至少一个示例性实施例中,点播媒体服务可以根据在线点播媒体商店操作编码设备200,所述在线点播媒体商店在每个作品和/或订阅基础上向用户提供诸如视频内容的媒体作品的数字副本。点播媒体服务可以从未编码视频源108获得此类媒体作品的数字副本。示例性解码装置参考图3,示出了示例性解码设备300的若干组件。在一些实施例中,解码设备可以包括比图3所示的组件更多的组件。然而,不必为了公开说明性实施例而示出所有这些通常常规的组件。如图3所示,示例性解码设备300包括用于连接到诸如网络104的网络的网络接口304。示例性解码设备300还包括处理单元308、存储器312、可选的用户输入端314(例如,字母数字键盘、小键盘、鼠标或其他定点设备、触摸屏和/或麦克风)、可选的显示器316以及可选的扬声器318,它们都经由总线320与网络接口304互连。存储器312通常包括ram、rom和永久大容量存储设备,诸如磁盘驱动器、闪存存储器等。示例性解码设备300的存储器312可以存储操作系统324以及用于许多软件服务的程序代码,诸如具有用于执行运动向量恢复例程800(以下参考图8描述)的指令的软件实现的视频解码器500(以下参考图5描述)。存储器312还可以存储视频数据文件(未示出),所述视频数据文件可以表示音频/视频媒体作品的编码副本,诸如作为示例的电影和/或电视剧集。可使用与非暂时性计算机可读介质332(诸如软盘、磁带、dvd/cd-rom驱动器、存储卡等)相关联的驱动器机制(未示出)将这些和其他软件组件加载到解码设备300的存储器312中。尽管已经描述了示例性解码设备300,但解码设备可以是能够与诸如网络120的网络通信并执行用于实现视频解码软件(诸如示例性软件实现的视频解码器500)和伴随消息提取例程700的指令的大量联网计算设备中的任一者。在操作中,操作系统324管理解码设备300的硬件和其他软件资源,并为诸如软件实现的视频解码器500的软件应用提供通用服务。对于诸如经由网络接口304进行的网络通信、经由输入端314接收数据、经由显示器316和/或可选的扬声器318输出数据、以及分配存储器312的硬件功能,操作系统324在编码设备上执行的软件与硬件之间充当中介。在一些实施例中,解码设备300可以进一步包括可选的编码视频接口336,以用于通过诸如高速串行总线等与编码视频源116通信。在一些实施例中,解码设备300可以经由网络接口304与诸如编码视频源116的编码视频源进行通信。在其他实施例中,编码视频源116可以驻留在存储器312或计算机可读介质332中。尽管已经描述了通常符合常规通用计算设备的示例性解码设备300,但解码设备300可以是能够对视频进行解码的大量设备中的任一者,例如,视频记录设备、视频协处理器和/或加速器、个人计算机、游戏机、机顶盒、手持或可穿戴计算设备、智能电话或任何其他合适的设备。举例来说,解码设备300可以根据点播媒体服务来操作。在至少一个示例性实施例中,点播媒体服务可以在每个作品和/或订阅基础上向操作解码设备300的用户提供诸如视频内容的媒体作品的数字副本。解码设备可以经由网络104通过例如编码设备200从未编码视频源108获得此类媒体作品的数字副本。软件实现的帧间视频编码器图4示出了根据至少一个实施例的采用残差变换技术的软件实现的帧间视频编码器400(以下称为“编码器400”)的一般功能框图。可以按显示次序将视频序列的一个或多个未编码视频帧(vidfrms)提供给定序器404。定序器404可以将预测编码图片类型(例如i、p或b)分配给每个未编码视频帧,并将帧序列或帧序列中的帧组重新排序成用于运动预测目的(例如,i型帧后跟p型帧,然后是b型帧)的编码次序。然后可以按编码次序将已定序的未编码视频帧(seqfrms)输入到块索引器408。对于已定序的未编码视频帧(seqfrms)中的每一个,块索引器408可以确定当前帧的最大编码块(“lcb”)尺寸(例如六十四乘六十四像素)并将未编码帧划分成编码块阵列(blcks)。给定帧内的单独编码块的尺寸可能会变化,例如从四乘四像素多至当前帧的lcb尺寸。然后,每个编码块可以一次将一个输入到差分器412,并且可以与从先前编码的编码块生成的对应的预测信号块(pred)进行差分。为了生成预测块(pred),还将编码块(blcks)提供给帧内预测器444和运动评估器416。在差分器412处进行差分之后,可以通过变换器420(下面所讨论)将所得的残差块(res)正向变换为频域表示,从而产生变换系数块(tcof)。然后可以将变换系数块(tcof)发送到量化器424,从而产生量化系数块(qcf),然后可以将所述量化系数块发送到熵编码器428和本地解码回路430。对于帧内编码的编码块而言,帧内预测器444提供表示与当前编码块相同帧的先前编码区域的预测信号。对于帧间编码的编码块而言,运动补偿预测器442提供表示与当前编码块不同帧的先前编码区域的预测信号。在本地解码回路430的开始时,逆量化器432可以对变换系数块(cf′)进行解量化,并将它们传递给逆变换器436以生成解量化的残差块(res′)。在加法器440处,可以将来自运动补偿预测器442或帧内预测器444的预测块(pred)与解量化的残差块(res′)相加以生成本地解码块(rec)。然后可以将本地解码块(rec)发送到帧组合器和解块滤波器处理器444,这可减少块效应并组合恢复帧(recd),所述恢复帧可用作运动评估器416和运动补偿预测器442的参考帧。熵编码器428对量化的变换系数(qcf)、差分运动向量(dmv)和其他数据进行编码,从而生成编码视频位流448。对于未编码视频序列的每个帧而言,编码视频位流448可以包括编码图片数据(例如,编码量化的变换系数(qcf)和差分运动向量(dmv))和编码帧头(例如语法信息,诸如当前帧的lcb尺寸)。帧间编码模式对于在帧间编码模式下进行编码的编码块而言,运动评估器416可以将每个编码块划分成一个或多个预测块,例如,具有诸如4×4像素、8×8像素、16×16像素、32×32像素或64×64像素的尺寸。例如,可以将64×64编码块划分成十六个16×16预测块、四个32×32预测块、或两个32×32预测块和八个16×16预测块。然后,运动评估器416可通过标识适当的参考块并确定从预测块到参考块的相对空间位移来针对每个预测块计算运动向量(mvcalc)。根据至少一个实施例的一方面,为了提高编码效率,可以通过从计算出的运动向量(mvcalc)减去运动向量预测项(mvpred)来对计算出的运动向量(mvcalc)进行编码,以获得运动向量差(δmv)。例如,如果计算出的运动向量(mvcalc)为(5,-1)(即,来自先前编码帧的参考块,其相对于当前帧中的当前预测块位于右五列和上一行)并且运动向量预测项为(5,0)(即,来自先前编码帧的参考块,其相对于当前帧中的当前预测块位于右五列且在同一行中),运动向量差(δmv)将为:mvcalc–mvpred=(5,-1)–(5,0)=(0,-1)=δmv.运动向量预测项(mvpred)与计算出的运动向量(mvcalc)越近,运动向量差(δmv)的值越小。因此,独立于当前预测块的内容的准确运动向量预测(使其在解码器侧上可重复)在整个视频序列的过程中与计算出的运动向量相比,可以导致对运动向量差所需的信息大大减少。根据至少一个实施例的一方面,运动评估器416可以使用多种技术来获得运动向量预测项(mvpred)。例如,可以通过针对当前帧的预测块计算若干先前编码的运动向量的中值来获得运动向量预测项。例如,运动向量预测项可以是当前预测块的附近空间中的多个先前编码的参考块的中值,诸如:在同一列且当前块上一行中的参考块(rba)的运动向量;在右一列且当前预测块上一行中的参考块(rbb)的运动向量;以及在左一列且与当前块同一行中的参考块(rbc)的运动向量。如上所述,并且根据至少一个实施例的一方面,运动评估器416可以使用另外或替代技术来在帧间编码模式下为预测块提供运动向量预测项。例如,用于提供运动向量预测项的另一种技术可以是确定当前预测块的附近空间中的多个先前编码的参考块的平均值,诸如:在同一列且当前块上一行中的参考块(rba)的运动向量;在右一列且当前预测块上一行中的参考块(rbb)的运动向量;以及在左一列且与当前块同一行中的参考块(rbc)的运动向量。根据至少一个实施例的一方面,为了提高编码效率,编码器400可以通过设置当前帧的图片头(或当前预测块的预测块头)中的选择运动向量预测方法(smv-pm)标志来指示在当前预测块的编码中使用了哪些可用技术。例如,在至少一个实施例中,smv-pm标志可以是具有两个可能值的一位变量,其中一个可能值指示运动向量预测项是使用上述中值技术获得的,而第二可能值指示运动向量预测项是使用替代技术获得的。在以帧间编码模式编码的编码块中,运动向量和残差都可以被编码到位流中。跳过编码和直接编码模式对于以跳过编码或直接编码模式进行编码的编码块而言,运动评估器416可以使用整个编码块作为对应的预测块(pb)。根据至少一个实施例的一方面,在跳过编码和直接编码模式下,运动评估器416可以使用预限定的方法(以下参考图7描述的)来生成运动向量候选项的有序列表,而不是针对预测块(pb)确定计算出的运动向量(mvcalc)。例如,对于当前预测块(pbcur)而言,运动向量候选项的有序列表可以由先前用于对当前帧的其他块(称为“参考块”(rb))进行编码的运动向量组成。根据至少一个实施例的一方面,运动评估器416然后可以从有序列表中选择最佳运动向量候选项(mvc)以对当前预测块(pbcur)进行编码。如果用于生成运动向量候选项的有序列表的过程在解码器侧上是可重复的,则仅选定运动向量(mvsel)在运动向量候选项的有序列表中的索引可以被包括在编码位流中,而不是运动向量本身中。在整个视频序列的过程中,与实际的运动向量相比,对索引值进行编码所需的信息可能少得多。根据至少一个实施例的一方面,被选择来填充运动向量候选项列表的运动向量优选地从三个参考块(rba、rbb、rbc)中获取,所述参考块具有已知运动向量并且共享当前预测块(pbcur)和/或另一个参考块(rb)的边界。例如,第一参考块(rba)可以位于当前预测块(pbcur)的正上方,第二参考块(rbb)可以直接位于第一参考块(rba)的右侧,并且第三参考块(rbc)可以位于当前预测块(rbc)的左侧。然而,参考块相对于当前预测块的特定位置可能并不重要,只要它们是预限定的,以便下游解码器可以知道它们在哪里。根据至少一个实施例的一方面,如果全部三个参考块都具有已知的运动向量,则当前预测块(pbcur)的运动向量候选项列表中的第一运动向量候选项(mvc1)可以是运动来自第一参考块(rba)的运动向量(mva)(或呈b型帧的运动向量),第二运动向量候选项(mvc2)可以是来自第二参考块(rbb)的运动向量(mvb)(或多个运动向量),并且第三运动向量候选项(mvc3)可以是来自第三参考块(rbc)的运动向量(mvc)(或多个运动向量)。运动向量候选项列表因此可以是:(mva,mvb,mvc)。然而,如果任何参考块(rb)都不具有可用的运动向量,例如,因为没有预测信息可用于给定参考块或当前预测块(pbcur)在当前帧的顶行、最左列或最右列中,所以可以跳过该运动向量候选项,而下一个运动向量候选项可以取而代之,并且可用零值运动向量(0,0)代替其余的候选项级别。例如,如果没有运动向量可用于rbb,则运动向量候选项列表可以是:(mva,mvc,(0,0))。根据至少一个实施例,在给定运动向量候选项可用性的各种组合的情况下,运动向量候选项列表的组合的完整集合如表1所示:表1运动评估器416然后可以评估运动向量候选项并选择待用作当前预测块的选定运动向量的最佳运动向量候选项。注意,只要下游解码器知道如何填充给定预测块的运动向量候选项的有序列表,就可以在解码器侧上重复该计算,而无需知道当前预测块的内容。因此,仅需要通过例如在当前预测块的预测块头中设置运动向量选择标记来将从运动向量候选项列表中选择的运动向量的索引而不是运动向量本身包括在编码位流中,并且因此,在整个视频序列的过程内,相较于实际的运动向量,将需要显著更少的信息来对索引值进行编码。在直接编码模式下,对运动向量选择标志和当前预测块与由运动向量指示的参考帧的块之间的残差进行编码。在跳过编码模式下,对运动向量选择标记进行编码,但跳过残差信号的编码。本质上,这告知下游解码器使用由运动向量指示的参考帧的块来代替当前帧的当前预测块。软件实现的帧间解码器图5示出了根据至少一个实施例并且适用于与诸如解码设备300的解码设备一起使用的对应软件实现的帧间视频解码器500(以下称为“解码器500”)逆残差变换技术的一般功能框图。解码器500可以类似于编码器400处的本地解码回路455来工作。具体地,可以将待解码的编码视频位流504提供给熵解码器508,所述熵解码器可以对量化系数(qcf)、差分运动向量(dmv)、伴随消息数据包(msg-data)以及包括预测模式(帧内或帧间)的其他数据的块进行解码。然后可以由逆量化器512重新组织量化系数块(qcf),从而得到恢复的变换系数块(tcof′)。然后可以通过逆变换器516(如下所述)将恢复的变换系数块(tcof′)逆变换出频域,从而得到解码的残差块(res′)。加法器520可以添加通过使用来自运动补偿预测器528的对应运动向量(dmv)获得的运动补偿预测块(psb)。可以在帧组合器和解块滤波处理器524中对所得的解码视频(dv)进行解块滤波。帧组合器和解块滤波处理器524的输出端处的块(recd)形成视频序列的重构帧,所述重构帧可以从解码器500输出,并且也可以用作运动补偿预测器528的参考帧以供对后续编码块进行解码。运动向量选择例程图6示出了适用于至少一个实施例(诸如编码器400)的运动向量选择例程600。如本领域普通技术人员将认识到的,图6中未示出编码过程中的所有事件。相反,为了清楚起见,仅示出与描述运动向量选择例程合理相关的那些步骤。在执行块603处,例如通过运动评估器416获得编码块。在判定块624处,运动向量选择例程600针对编码块选择编码模式。例如,如上所述,可以选择帧间编码模式、直接编码模式或跳过编码模式。如果针对当前编码块选择了跳过编码或直接编码模式,则运动向量选择例程600可以进行到以下描述的执行块663。如果在判定块624处针对当前编码块选择了帧间编码模式,则在执行块627处,运动向量选择例程600可以将当前编码块划分成一个或多个预测块,并且开始在开始循环块630处,可以依次对当前编码块的每个预测块进行寻址。在执行块633处,运动向量选择例程600可以针对当前预测块选择预测索引,所述预测索引指示在b型图片的情况下参考帧是前一图片、未来图片还是两者。在执行块636,运动向量选择例程600然后可以选择运动向量预测方法,诸如上述的中值或均值技术或任何可用的替代运动向量预测方法。在执行块642处,运动向量选择例程600可使用所选择的运动向量预测方法来获得当前预测块的运动向量预测项(mvpred)。在执行块645处,运动向量选择例程600可获得当前预测块的计算出的运动向量(mvcalc)。在执行块648处,运动向量选择例程600可获得当前预测块的运动向量差(δmv)(请注意,对于p型图片可能存在单个运动向量差,而对于b型图片可能存在两个运动向量差)。在执行块651处,运动向量选择例程600可获得当前预测块(pbcur)相对于由计算出的运动向量(mvcalc)指示的块之间的残差。在执行块654处,运动向量选择例程600可以对运动向量差和当前预测块的残差进行编码。在执行块657处,运动向量选择例程600可以在当前帧的图片头(或当前预测块的预测块头)中设置smv-pm标志,所述标志指示针对当前预测块使用了哪种运动向量预测技术。在结束循环块660处,运动向量选择例程600返回到开始循环块630以处理当前编码块的下一个预测块(如果存在的话)。返回到判定块624,如果针对当前编码块选择了跳过编码或直接编码模式,则在执行块663处,运动向量选择例程600将当前预测块设置为等于当前编码块。运动向量选择例程600然后可以调用运动向量候选项生成子例程700(下面参考图7描述),其可以将运动向量候选项的有序列表返回到运动向量选择例程600。在执行块666处,运动向量选择例程600然后可以从运动向量候选项列表中选择运动向量以用于对当前预测块进行编码。在判定块667处,如果所选择的编码模式是直接编码,则在执行块669处,运动向量选择例程600计算当前预测块于由选定运动向量指示的参考块之间的残差。在执行块672处,运动向量选择例程600可以对残差进行编码,并且在执行块675处,运动向量选择例程600可以在当前预测块的预测块头中设置运动向量选择标志,所述标志指示选择哪个运动向量候选项以供用于对当前预测块进行编码。运动向量选择例程600在终止块699处结束。运动向量候选项生成子例程700图7描绘了根据至少一个实施例的用于生成运动向量候选项的有序列表的运动向量候选项生成子例程700。在所示的实施例中,生成三个运动向量候选项。然而,本领域普通技术人员将认识到,使用相同技术可以生成更多或更少数量的候选项,并且此外,在不脱离本公开范围的情况下,替代和/或等效实现方式可以代替所示出并描述的特定实施例。运动向量候选项生成子例程700在执行块704处获得针对当前预测块生成运动向量候选项列表的请求。在判定块708处,如果可从第一候选项参考块(rba)获得运动向量,则在执行块712处,运动向量候选项生成子例程700可将第一运动向量候选项(mvc1)设置为mva,并进行到判定块716。在判定块716处,如果可从第二候选项参考块(rba)获得运动向量,则在执行块724处,运动向量候选项生成子例程700可将第二运动向量候选项(mvc2)设置为mvb,并进行到判定块728。在判定块728处,如果可从第三候选项块(rba)获得运动向量,则在执行块736处,运动向量候选项生成子例程700可将第三运动向量候选项(mvc3)设置为mvc。运动向量候选项生成子例程700然后可以在返回块799处返回具有mvc1=mva、mvc2=mvb、且mvc3=mvc的相应值的运动向量候选项列表。再次参考判定块728,如果不可从第三候选项块(rbc)获得运动向量,则在执行块740处运动向量候选项生成子例程700可将第三运动向量候选项(mvc3)设置为(0,0)。运动向量候选项生成子例程700然后可以在返回块799处返回具有mvc1=mva、mvc2=mvb、且mvc3=(0,0)的相应值的运动向量候选项列表。再次参考判定块716,如果不可从第二候选项块(rbb)获得运动向量,则运动向量候选项生成子例程700可进行到判定块732。在判定块732处,如果可从第三候选项参考块(rbc)获得运动向量,则在执行块744处运动向量候选项生成子例程700可将第二运动向量候选项(mvc2)设置为mvc。然后可以在执行块740处将第三运动向量候选项(mvc3)设置为(0,0)。运动向量候选项生成子例程700然后可以在返回块799处返回具有mvc1=mva、mvc2=mvc、且mvc3=(0,0)的相应值的运动向量候选项列表。再次参考判定块732,如果不可从第三候选项块(rbc)获得运动向量,则在执行块748处运动向量候选项生成子例程700)可将第二运动向量候选项(mvc2)设置为(0,0),并且在执行块740处可将第三运动向量候选项(mvc3)设置为(0,0)。运动向量候选项生成子例程700然后可以在返回块799处返回具有mvc1=mva、mvc2=(0,0)、且mvc3=(0,0)的相应值的运动向量候选项列表。再次参考判定块708,如果不可从第一候选项参考块(rba)获得运动向量,则运动向量候选项生成子例程700可进行到判定块720。在判定块720处,如果可从第二候选项参考块(rbb)获得运动向量,则在执行块752处运动向量候选项生成子例程700可将第一运动向量候选项(mvc1)设置为mvb。运动向量候选项生成子例程700然后可以进行到判定块732。再次返回到判定块732,如果可从第三候选项参考块(rbc)获得运动向量,则在执行块744处运动向量候选项生成子例程700可将第二运动向量候选项(mvc2)设置为mvc。然后可以在执行块740处将第三运动向量候选项(mvc3)设置为(0,0)。运动向量候选项生成子例程700然后可以在返回块799处返回具有mvc1=mvb、mvc2=mvc、且mvc3=(0,0)的相应值的运动向量候选项列表。再次参考判定块732,如果不可从第三候选项块(rbc)获得运动向量,则在执行块748处运动向量候选项生成子例程700)可将第二运动向量候选项(mvc2)设置为(0,0),并且在执行块740处可将第三运动向量候选项(mvc3)设置为(0,0)。运动向量候选项生成子例程700然后可以在返回块799处返回具有mvc1=mvb、mvc2=(0,0)、且mvc3=(0,0)的相应值的运动向量候选项列表。再次参考判定块720,如果不可从第二候选项参考块(rbb)获得运动向量,则运动向量候选项生成子例程700可进行到判定块756。在判定块756处,如果可从第三候选项参考块(rbc)获得运动向量,则在执行块760处运动向量候选项生成子例程700可将第一运动向量候选项(mvc1)设置为mvc。运动向量候选项生成子例程700然后可以在执行块748处将第二运动向量候选项(mvc2)设置为(0,0),并且在执行块740处将第三运动向量候选项(mvc3)设置为(0,0)。运动向量候选项生成子例程700然后可以在返回块799处返回具有mvc1=mvc、mvc2=(0,0)、且mvc3=(0,0)的相应值的运动向量候选项列表。再次参考判定块756,如果不可从第三候选项参考块(rbc)获得运动向量,则在执行块764处运动向量候选项生成子例程700可将第一运动向量候选项(mvc1)设置为(0,0)。运动向量候选项生成子例程700然后可以在执行块748处将第二运动向量候选项设置为(0,0),,并且在执行块740处将第三运动向量候选项设置为(0,0)。运动向量候选项生成子例程700然后可以在返回块799处返回具有mvc1=mvb、mvc2=(0,0)、且mvc3=(0,0)的相应值的运动向量候选项列表。运动向量恢复例程800图8示出了适用于至少一个实施例(诸如解码器500)的运动向量恢复例程800。如本领域普通技术人员将认识到的,图8中未示出解码过程中的所有事件。相反,为了清楚起见,仅示出与描述运动向量选择例程合理相关的那些步骤。在执行块803处,运动向量恢复例程800可以获得与编码块相对应的数据。在执行块828处,运动向量恢复例程800可以标识用于对编码块进行编码的编码模式。如上所述,可能的编码模式可以是帧间编码模式、直接编码模式或跳过编码模式。在判定块830处,如果使用帧间编码模式对编码块进行编码,则在执行块833处,运动向量恢复例程800可以标识用于编码块的对应预测块。在开始循环块836处,可以依次对当前编码块的每个预测块进行寻址。在执行块839处,运动向量恢复例程800可以从预测块头中标识当前预测块的预测索引。在执行块842处,运动向量恢复例程800可例如通过读取当前帧的图片头中的smv-pm标志来标识用于预测当前预测块的运动向量的运动向量预测方法。在执行块848处,运动向量恢复例程800可获得当前预测块的运动向量差(δmv)。在执行块851处,运动向量恢复例程800可以使用在执行块842中标识的运动向量预测方法来获得当前预测块的预测运动向量(mvpred)。在执行块854处,运动向量恢复例程800可例如通过将预测的运动向量(mvpred)与运动向量差(δmv)相加来恢复当前预测块的计算出的运动向量(mvcalc)(请注意,对于p型图片可能存在单个恢复的运动向量,而对于b型图片可能存在两个恢复的运动向量)。在执行块857处,运动向量恢复例程800然后可以将当前预测块的残差添加到由计算出的运动向量(mvcalc)指示的块,以获得预测块的恢复值。再次参考判定块830,如果当前编码块使用跳过编码模式或直接编码模式进行编码,则运动向量恢复例程800随后可以调用运动向量候选项生成子例程700(以上参考图7所述),其可以将运动向量候选项的有序列表返回给运动向量恢复例程800。在执行块863处,运动向量恢复例程800然后可以在执行块863处从预测块头读取运动向量选择标志。在执行块866处,运动向量恢复例程800然后可以使用运动向量选择标志来从用于对当前预测块进行编码的运动向量候选项的有序列表中标识运动向量。在判定块869处,如果当前编码块是在直接编码模式下进行编码的,则在执行块872处,运动向量恢复例程800可以将预测块的残差添加到由选定运动向量标识的块的系数,以恢复预测块系数。如果当前编码块是在跳过编码模式下进行编码的,则在执行块875处,运动向量恢复例程800可以将由选定运动向量指示的参考块的系数用作预测块的系数。运动向量恢复例程800在终止块899处结束。用于跳过编码和直接编码模式的替代运动向量选择例程再次参考图4,对于以跳过编码或直接编码模式进行编码的编码块而言,运动评估器416可以使用整个编码块作为对应的预测块(pb)。根据至少一个实施例的一方面,在跳过编码和直接编码模式下,运动评估器416可以使用预限定的方法来生成四个运动向量候选项的有序列表(mvcl),而不是针对预测块(pb)确定计算出的运动向量(mvcalc)。例如,对于当前预测块(pbcur)而言,运动向量候选项的有序列表可以由先前用于对当前帧的其他块(称为“参考块”(rb))进行编码的运动向量和/或零值运动向量组成。根据至少一个实施例的一方面,运动评估器416然后可以从有序列表中选择最佳运动向量候选项(mvc)以对当前预测块(pbcur)进行编码。如果用于生成运动向量候选项的有序列表的过程在解码器侧上是可重复的,则仅选定运动向量(mvsel)在运动向量候选项的有序列表中的索引可以被包括在编码位流中,而不是运动向量本身中。在整个视频序列的过程中,与实际的运动向量相比,对索引值进行编码所需的信息可能少得多。根据至少一个实施例的一方面,被选择来填充运动向量候选项列表的运动向量优选地从七个参考块(rba、rbb、rbc、rbd、rbe、rbf、rbg)中获取,所述参考块具有已知运动向量并且共享当前预测块(pbcur)的边界和/或顶点。参考图9,其示出了作为当前预测块(pbcur)的8×8预测块902,所述预测块例如具有左上角的像素904、右上角的像素906和左下角的像素908:(a)第一参考块(rba)可以是包含像素904的左侧的像素910的预测块;(b)第二参考块(rbb)可以是包含像素904上方的像素912的预测块;(c)第三参考块(rbc)可以是包含像素906的上方和右侧的像素914的预测块;(d)第四参考块(rbd)可以是包含像素908下方和左侧的像素916的预测块;(e)第五参考块(rbe)可以是包含像素908的左侧的像素918的预测块;(f)第六参考块(rbf)可以是包含像素906上方的像素920的预测块;并且(g)第七参考块(rbg)可以是包含像素904上方和左侧的像素922的预测块。然而,参考块相对于当前预测块的特定位置可能并不重要,只要它们通过下游解码器是已知的。根据本实施例的一方面,如果全部三个参考块都具有已知的运动向量,则当前预测块(pbcur)的运动向量候选项列表中的第一运动向量候选项(mvc1)可以是运动来自第一参考块(rba)的运动向量(mva)(或呈b型帧的运动向量),第二运动向量候选项(mvc2)可以是来自第二参考块(rbb)的运动向量(mvb)(或多个运动向量),第三运动向量候选项(mvc3)可以是来自第三参考块(rbc)的运动向量(mvc)(或多个运动向量),当前预测块(pbcur)的运动向量候选项列表中的运动向量候选项(mvc4)可以是来自第四参考块(rbd)的运动向量(mvd)(或呈b型帧的运动向量)。根据本实施例,如果前四个参考块(rba-d)中的一个或多个不能提供运动向量候选项,则可以考虑另外三个参考块(rbe-g)。然而,如果另外三个参考块(rbe-g)中的一个或多个都不具有可用的运动向量,例如,因为没有预测信息可用于给定参考块或当前预测块(pbcur)在当前帧的顶行、底行、左列或最右列中,所以可以跳过该运动向量候选项,而下一个运动向量候选项可以取而代之,并且可用零值运动向量(0,0)代替其余的候选项级别。例如,如果没有运动向量可用于第二、第三和第四参考块rbb-d,则运动向量候选项列表可以是:(mva,mve,(0,0))。下面参考图10描述根据本实施例的用于填充运动向量候选项列表的示例性规程。运动评估器416然后可以评估运动向量候选项并选择待用作当前预测块的选定运动向量的最佳运动向量候选项。注意,只要下游解码器知道如何填充给定预测块的运动向量候选项的有序列表,就可以在解码器侧上重复该计算,而无需知道当前预测块的内容。因此,仅需要通过例如在当前预测块的预测块头中设置运动向量选择标记来将从运动向量候选项列表中选择的运动向量的索引而不是运动向量本身包括在编码位流中,并且因此,在整个视频序列的过程内,相较于实际的运动向量,将需要显著更少的信息来对索引值进行编码。在直接编码模式下,对运动向量选择标志和当前预测块与由运动向量指示的参考帧的块之间的残差进行编码。在跳过编码模式下,对运动向量选择标记进行编码,但跳过残差信号的编码。本质上,这告知下游解码器使用由运动向量指示的参考帧的块来代替当前帧的当前预测块。替代运动向量候选项生成子例程1000图10a至图10b示出了根据至少一个实施例的用于生成运动向量候选项的有序列表的运动向量候选项生成子例程1000。在所示的实施例中,生成三个运动向量候选项。然而,本领域普通技术人员将认识到,使用相同技术可以生成更多或更少数量的候选项,并且此外,在不脱离本公开范围的情况下,替代和/或等效实现方式可以代替所示出并描述的特定实施例。替代运动向量候选项生成子例程1000在执行块1003处获得针对当前预测块生成运动向量候选项列表的请求。替代运动向量候选项生成子例程1000在执行块1005处将索引值(i)设置为零。在判定块1008处,如果第一候选项参考块(rba)不具有可用的运动向量(mva),则替代运动向量候选项生成子例程1000进行到判定块1015;如果第一候选项参考块(rba)确实具有可用的运动向量(mva),则替代运动向量候选项生成子例程1000进行到执行块1010。替代运动向量候选项生成子例程1000在执行块1010处将第一候选项参考块的运动向量(mva)分配成运动向量候选项列表中的第i个运动向量候选项(mcvl[i])。替代运动向量候选项生成子例程1000在执行块1013处递增索引值(i)。在判定块1015处,如果第二候选项参考块(rbb)不具有可用的运动向量(mvb),则替代运动向量候选项生成子例程1000进行到判定块1023;如果第二候选项参考块(rbb)确实具有可用的运动向量(mvb),则替代运动向量候选项生成子例程1000进行到执行块1018。替代运动向量候选项生成子例程1000在执行块1018处将第二候选项参考块的运动向量(mvb)分配成运动向量候选项列表中的第i个运动向量候选项(mcvl[i])。替代运动向量候选项生成子例程1000在执行块1020处递增索引值(i)。在判定块1023处,如果第三候选项参考块(rbc)不具有可用的运动向量(mvc),则替代运动向量候选项生成子例程1000进行到判定块1030;如果第三候选项参考块(rbc)确实具有可用的运动向量(mvc),则替代运动向量候选项生成子例程1000进行到执行块1025。替代运动向量候选项生成子例程1000在执行块1023处将第三候选项参考块的运动向量(mvc)分配成运动向量候选项列表中的第i个运动向量候选项(mcvl[i])。替代运动向量候选项生成子例程1000在执行块1025处递增索引值(i)。在判定块1030处,如果第四候选项参考块(rbd)不具有可用的运动向量(mvd),则替代运动向量候选项生成子例程1000进行到判定块1038;如果第四候选项参考块(rbd)确实具有可用的运动向量(mvd),则替代运动向量候选项生成子例程1000进行到执行块1033。替代运动向量候选项生成子例程1000在执行块1033处将第四候选项参考块的运动向量(mvd)分配成运动向量候选项列表中的第i个运动向量候选项(mcvl[i])。替代运动向量候选项生成子例程1000在执行块1035处递增索引值(i)。在判定块1038处,如果索引值(i)小于四,则表示在替代运动向量候选项生成子例程1000中到目前为止已标识出少于四个运动向量候选项,并且第五候选项参考块(rbe)具有可用的运动向量(mve),替代运动向量候选项生成子例程1000进行到执行块1040;否则,替代运动向量候选项生成子例程1000进行到判定块1045。替代运动向量候选项生成子例程1000在执行块1040处将第五候选项参考块的运动向量(mve)分配成运动向量候选项列表中的第i个运动向量候选项(mcvl[i])。替代运动向量候选项生成子例程1000在执行块1043处递增索引值(i)。在判定块1045处,如果索引值(i)小于四,并且第六候选项参考块(rbf)具有可用的运动向量(mvf),替代运动向量候选项生成子例程1000进行到执行块1048;否则,替代运动向量候选项生成子例程1000进行到判定块1053。替代运动向量候选项生成子例程1000在执行块1048处将第六候选项参考块的运动向量(mvf)分配成运动向量候选项列表中的第i个运动向量候选项(mcvl[i])。替代运动向量候选项生成子例程1000在执行块1050处递增索引值(i)。在判定块1053处,如果索引值(i)小于四,并且第七候选项参考块(rbg)具有可用的运动向量(mvg),替代运动向量候选项生成子例程1000进行到执行块1055;否则,替代运动向量候选项生成子例程1000进行到判定块1060。替代运动向量候选项生成子例程1000在执行块1055处将第七候选项参考块的运动向量(mvg)分配成运动向量候选项列表中的第i个运动向量候选项(mcvl[i])。替代运动向量候选项生成子例程1000在执行块1058处递增索引值(i)。在判定块1060处,如果索引值(i)小于四,替代运动向量候选项生成子例程1000进行到执行块1063;否则,替代运动向量候选项生成子例程1000进行到返回块1099。替代运动向量候选项生成子例程1000在执行块1063处将零值运动向量分配成运动向量候选项列表中的第i个运动向量候选项(mcvl[i])。替代运动向量候选项生成子例程1000在执行块1065处递增索引值(i),然后循环回到判定块1060。替代运动向量候选项生成子例程1000在返回块1099处返回运动向量候选项列表(mcvl)。递归编码块分割方案图11示出了根据各个实施例的可以由编码器400实现的示例性递归编码块分割方案1100。在块索引器408处,在将帧划分成lcb尺寸的像素区域(以下称为编码块候选项(“cbc”))之后,每个lcb尺寸的编码块候选项(“lcbc”)可以根据递归编码块分割方案1100划分成较小的cbc。该过程可以递归地继续直到块索引器408确定(1)当前cbc适合于编码(例如,因为当前cbc仅包含单个值的像素)或(2)当前cbc是用于特定实现方式的编码块候选项的最小尺寸,例如2×2、4×4等(“mcbc”),以先到者为准。块索引器408然后可以将当前cbc索引为适合于编码的编码块。诸如lcbc的方形cbc1102可以沿着竖直和水平横轴1104、1106中的一者或二者分割。沿竖直横轴1104的分割将方形cbc1102竖直分割成第一矩形编码块结构1108,如矩形(1:2)cbc1110和1112所示。沿水平横轴1106的分割将方形cbc1102水平分割成第二矩形编码块结构1114,如一起截取的矩形(2:1)cbc1116和1118所示。第一矩形编码结构1114的矩形(2:1)cbc(诸如cbc1116)可以被分割成两个矩形编码块结构1148,如一起截取的矩形cbc1150和1152所示。沿水平横轴1106和竖直横轴1104的分割将方形cbc1102分割成四方形编码块结构1120,如一起截取的方形cbc1122、1124、1126和1128所示。第一矩形编码块结构1108的矩形(1:2)cbc(诸如cbc1112)可以沿水平横轴1130分割成两个第一方形编码块结构1132,如一起截取的方形cbc1134和1136所示。第二矩形编码结构1114的矩形(2:1)cbc(诸如cbc1118)可以被分割成两个第二方形编码块结构1138,如一起截取的方形cbc1140和1142所示。四方形编码块结构1120、两个第一方形编码块结构1132或两个第二方形编码块结构1138的方形cbc可以与cbc1102相同的方式沿编码块的竖直和水平横轴中的一者或两者分割。例如,可以将64×64位lcbc尺寸的编码块分割为两个32×64位编码块、两个64×32位编码块或四个32×32位编码块。在编码位流中,可以使用两位编码块分割标志来指示是否进一步分割当前编码块:编码块分割标志值分割类型00当前编码块未分割01当前编码块被水平分割10当前编编码块被竖直分割11当前编码块被水平和竖直分割编码块索引例程图12示出了根据各个实施例的诸如可以由块索引器408执行的示例性编码块索引例程1200。编码块索引例程1200可以在执行块1202处获得视频序列的帧。编码块索引例程1200可以在执行块1204处将帧分割成lcbc。在开始循环块1206处,编码块索引例程1200可以依次处理每个lcbc,例如,从帧左上角的lcbc开始,然后从左到右,从上到下进行。在子例程块1300处,编码块索引例程1200调用下面参考图13描述的编码块分割子例程1300。在结束循环块1208处,编码块索引例程1200循环回到开始循环块1206以处理帧的下一lcbc(如果存在的话)。编码块索引例程1200在返回块1299处结束。编码块分割子例程图13示出了根据各个实施例的诸如可以由块索引器408执行的示例性编码块分割子例程1300。子例程1300在执行块1302处获得cbc。如下所述,可以从例程1400或递归地提供编码块候选项。在判定块1304处,如果所获得的cbc是mcbc,则编码块分割子例程1300可以进行到执行块1306;否则,编码块分割子例程1300可以进行到执行块1308。编码块分割子例程1300可以在执行块1306处将所获得的cbc索引为编码块。然后,编码块分割子例程1300可以在返回块1398处终止。编码块分割子例程1300可以在执行块1308处测试当前cbc的编码适合性。例如,编码块分割子例程1300可以对当前cbc的像素值进行分析,并确定当前cbc是否仅包含单个值的像素,或者当前cbc是否与预限定图案匹配。在判定块1310处,如果当前cbc适于进行编码,则编码块分割子例程1300可以进行到执行块1306;否则,编码块分割子例程1300可以进行到判定块1314。编码块分割子例程1300可以在执行块1314处针对当前方形cbc选择编码块分割结构。例如,编码块分割子例程1300可以在以上参考图11描述的递归编码块分割方案1100的第一矩形编码块结构1108、第二矩形编码结构1114或四方形编码块结构1120之间进行选择。编码块分割子例程1300可以在执行块1316处根据递归编码块分割方案1100来将当前cbc分割成两个或四个子cbc。在开始循环块1318处,编码块分割子例程1300可以依次处理由执行块1316的分割规程依次产生的每个子cbc。在子例程块1300,编码块分割子例程1300可以调用自身以便以当前描述的方式处理当前子cbc。在结束循环块1320处,编码块分割子例程1300循环回到开始循环块1318,以处理当前cbc的下一个子cbc(如果存在的话)。然后,编码块分割子例程1300可以在返回块1399处终止。编码块树分割规程图14a至图14c示出了将编码块分割方案1100应用于“根”lcbc1402的示例性编码块树分割规程1400。图14a示出了通过编码块树分割规程1400创建的各种子编码块1404-1454;图14b示出了作为树数据结构的编码块树分割规程,示出了各种编码块1402-1454之间的父/子关系;图14c示出了在根编码块1402的配置内的相应位置的由虚线指示的图14b的各种“叶节点”子编码块。假设64×64lcbc1402不适于进行编码,则可以将其分割成以上参考图11描述的递归编码块分割方案1100的第一矩形编码块结构1108、第二矩形编码结构1114或四方形编码块结构1120。出于本示例的目的,假设将64×64lcbc1402分割成两个32×64子cbc、32×64cbc1404和32×64cbc1406。然后可以依次处理这些子cbc中的每一个。假设64×64lcbc1402的第一子32×64cbc1404不适于进行编码,则可以将其分割成两个32×32子编码块候选项32×32cbc1408和32×32cbc1410。然后可以依次处理这些子cbc中的每一个。假设32×64lcbc1404的第一子32×32cbc1408不适于进行编码,则可以将其分割成两个16×32子编码块候选项16×32cbc1412和16×32cbc1414。然后可以依次处理这些子cbc中的每一个。编码器400可以确定32×32cbc1408的第一子16×32cbc1412适于进行编码;编码器400因此可以将16×32cbc1412索引为编码块1413,并且返回到父32×32cbc1408以处理其下一个子(如果存在的话)。假设32×32lcbc1408的第二子16×32cbc1414不适于进行编码,则可以将其分割成两个16×16子编码块候选项16×16cbc1416和16×16cbc1418。然后可以依次处理这些子cbc中的每一个。假设16×32lcbc1414的第一子16×16cbc1416不适于进行编码,则可以将其分割成两个8×16子编码块候选项8×16cbc1420和8×16cbc1422。然后可以依次处理这些子cbc中的每一个。编码器400可以确定16×16cbc1416的第一子8×16cbc1420适于进行编码;编码器400因此可以将8×16cbc1420索引为编码块1421,并且返回到父16×16cbc1416以处理其下一个子(如果存在的话)。编码器400可以确定16×16cbc1416的第二子8×16cbc1422适于进行编码;编码器400因此可以将8×16cbc1422索引为编码块1423,并且返回到父16×16cbc1416以处理其下一个子(如果存在的话)。现在已经处理了16×16cbc1416的所有子,从而对8×16编码块1421和1423进行了索引。编码器400因此可以返回到父16×32cbc1414以处理其下一个子(如果存在的话)。假设16×32lcbc1414的第二子16×16cbc1418不适于进行编码,则可以将其分割成两个8×16编码块候选项8×16cbc1424和8×16cbc1426。然后可以依次处理这些子cbc中的每一个。假设16×16lcbc1418的第一子8×16cbc1424不适于进行编码,则可以将其分割成两个8×8编码块候选项8×8cbc1428和8×8cbc1430。然后可以依次处理这些子cbc中的每一个。编码器400可以确定8×16cbc1424的第一子8×8cbc1428适于进行编码;编码器400因此可以将8×8cbc1428索引为编码块1429,并且返回到父8×16cbc1424以处理其下一个子(如果存在的话)。编码器400可以确定8×16cbc1424的第二子8×8cbc1430适于进行编码;编码器400因此可以将8×8cbc1430索引为编码块1431,并且返回到父8×16cbc1424以处理其下一个子(如果存在的话)。现在已经处理了8×16cbc1424的所有子,从而对8×8编码块1429和1431进行了索引。编码器400因此可以返回到父16×16cbc1418以处理其下一个子(如果存在的话)。编码器400可以确定8×16cbc1418的第二子16×16cbc1426适于进行编码;编码器400因此可以将8×16cbc1426索引为编码块1427,并且返回到父16×16cbc1418以处理其下一个子(如果存在的话)。现在已经处理了16×16cbc1418的所有子,从而对8×8编码块1429和1431以及8×16编码块1427进行了索引。编码器400因此可以返回到父16×32cbc1414以处理其下一个子(如果存在的话)。现在已经处理了16×32cbc1414的所有子,从而对8×8编码块1429和1431、8×16编码块1421、1423和1427进行了索引。编码器400因此可以返回到父32×32cbc1408以处理其下一个子(如果存在的话)。现在已经处理了32×32cbc1408的所有子,从而对8×8编码块1429和1431、8×16编码块1421、1423和1427以及16×32编码块1413进行了索引。编码器400因此可以返回到父32×64cbc1404以处理其下一个子(如果存在的话)。编码器400可以确定32×64cbc1404的第二子32×32cbc1410适于进行编码;编码器400因此可以将32×32cbc1410索引为编码块1411,并且返回到父32×64cbc1404以处理其下一个子(如果存在的话)。现在已经处理了32×64cbc1404的所有子,从而对8×8编码块1429和1431、8×16编码块1421、1423和1427以及16×32编码块1411以及32×32编码块1411进行了索引。编码器400因此可以返回到父根64×64lcbc1402以处理其下一个子(如果存在的话)。假设64×64lcbc1402的第二子32×64cbc1406不适于进行编码,则可以将其分割成两个32×32编码块候选项32×32cbc1432和32×32cbc1434。然后可以依次处理这些子cbc中的每一个。假设32×64lcbc1406的第一子32×32cbc1432不适于进行编码,则可以将其分割成两个32×16编码块候选项32×16cbc1436和32×16cbc1438。然后可以依次处理这些子cbc中的每一个。编码器400可以确定32×32cbc1432的第一子32×16cbc1436适于进行编码;编码器400因此可以将32×16cbc1436索引为编码块1437,并且返回到父32×32cbc1432以处理其下一个子(如果存在的话)。编码器400可以确定32×32cbc1432的第二子32×16cbc1438适于进行编码;编码器400因此可以将32×16cbc1438索引为编码块1439,并且返回到父32×32cbc1432以处理其下一个子(如果存在的话)。现在已经处理了32×32cbc1432的所有子,从而对32×16编码块1437和1439进行了索引。编码器400因此可以返回到父32×64cbc1406以处理其下一个子(如果存在的话)。假设32×64lcbc1406的第二子32×32cbc1434不适于进行编码,则可以将其分割成两个16×16编码块候选项16×16cbc1440和16×16cbc1446。然后可以依次处理这些子cbc中的每一个。编码器400可以确定32×32cbc1434的第一子16×16cbc1440适于进行编码;编码器400因此可以将16×16cbc1440索引为编码块1441,并且返回到父32×32cbc1434以处理其下一个子(如果存在的话)。编码器400可以确定32×32cbc1434的第二子16×16cbc1442适于进行编码;编码器400因此可以将16×16cbc1442索引为编码块1443,并且返回到父32×32cbc1434以处理其下一个子(如果存在的话)。假设32×32lcbc1406的第三子16×16cbc1444不适于进行编码,则可以将其分割成两个8×8编码块候选项8×8cbc1448、8×8cbc1452和8×8cbc1454。然后可以依次处理这些子cbc中的每一个。编码器400可以确定32×32cbc1444的第一子16×16cbc1448适于进行编码;编码器400因此可以将8×8cbc1448索引为编码块1449,并且返回到父16×16cbc1444以处理其下一个子(如果存在的话)。编码器400可以确定16×16cbc1444的第二子8×8cbc1450适于进行编码;编码器400因此可以将8×8cbc1450索引为编码块1451,并且返回到父16×16cbc1444以处理其下一个子(如果存在的话)。编码器400可以确定16×16cbc1444的第三子8×8cbc1452适于进行编码;编码器400因此可以将8×8cbc1452索引为编码块1453,并且返回到父16×16cbc1444以处理其下一个子(如果存在的话)。编码器400可以确定16×16cbc1444的第四子8×8cbc1454适于进行编码;编码器400因此可以将8×8cbc1454索引为编码块1455,并且返回到父16×16cbc1444以处理其下一个子(如果存在的话)。现在已经处理了16×16cbc1444的所有子,从而产生8×8编码块1449、1451、1453和1455。编码器400因此可以返回到父32×32cbc1434以处理其下一个子(如果存在的话)。编码器400可以确定32×32cbc1434的第四子16×16cbc1446适于进行编码;编码器400因此可以将16×16cbc1446索引为编码块1447,并且返回到父32×32cbc1434以处理其下一个子(如果存在的话)。现在已经处理了32×32cbc1434的所有子,从而对16×16编码块1441和1447、8×8编码块1449、1451、1453和1455进行了索引。编码器400因此可以返回到父32×64cbc1406以处理其下一个子(如果存在的话)。现在已经处理了32×64cbc1406的所有子,从而对32×16编码块1437和1439、16×16编码块1441、1443和1447以及8×8编码块1449、1451、1453和1455进行了索引。编码器400因此可以返回到父根64×64lcbc1402以处理其下一个子(如果存在的话)。现在已经处理了根64×64lcbc1402的所有子,从而对8×8编码块1429、1431、1449、1451、1453和1455;8×16编码块1421、1423和1427;16×32编码块1441以及32×32编码块1411;32×16编码块1437和1439;以及16×16编码块1441、1443和1447进行了索引。编码器400因此可以进行到帧的下一个lcbc(如果存在的话)。模板匹配预测选择技术根据本方法和系统的各个实施例的各方面,为了选择用于矩形编码块的帧内预测器,编码器400可以尝试将用于矩形编码块的预测边界模板与当前视频帧的已编码部分进行匹配。预测边界模板是当前编码块上方和左侧的像素的l形区域。图15a至图15b示出了对应于视频帧的一部分的两个像素区域1500a、1500b。像素1500a-b的区域被示出为被部分编码,每个区域具有已处理区域1502a-b、未处理区域1504a-b(由单阴影线指示)和当前编码块1506a-b(由双重阴影线指示)。已处理区域1502a-b表示已经由块索引器408索引到编码块中并且已经由帧内预测器444或运动补偿预测器442处理的像素。未处理区域1504a-b表示未被帧内预测器444处理的像素。当前编码块1506a-b是由帧内预测器444当前正在处理的矩形编码块。(出于说明性目的,任意选择编码块1506a和1506b的尺寸-根据本方法和系统,当前技术可以应用于任何矩形编码块。)在编码块1506a-b的正上方和左侧的像素形成示例性预测模板1508a-b。预测模板是当前编码块附近的像素的布置,所述像素已经被帧内预测器444或运动补偿预测器442处理,因此已经具有与其相关联的预测值。根据一些实施例,预测模板可以包括与当前编码块的像素接界的像素。预测模板1508a-b的空间配置形成“l”形布置,所述布置使编码块1506a-b沿编码块的上侧和左侧(即,与已处理区域1502a-b接界的编码块1506a-b的两侧)的像素接界。图16示出了如何根据本方法和系统来使用预测模板来针对示例性视频帧1600中的矩形编码块的像素选择帧内预测值,所述视频帧包括像素区域1500a并且因此包括当前编码块1506a。注意,出于说明性目的,放大了关于视频帧1600的编码块1506a的尺寸。像素区域1500a既在视频帧1600的背景内显示,又在图16的右下部分放大显示。像素的第二区域,即像素区域1601,既在视频帧1600内显示又在图16的左下部分放大显示。视频帧1600还包括已处理区域1602(包括已处理区域1502a和像素区域1601);以及未处理区域1604(包括未处理区域1504a)。根据本方法和系统,为了给编码块1506a(或任何矩形编码块)的像素选择预测值,编码器400可以:(1)在已处理区域1602中标识预测模板,诸如示例性预测模板1508a;(2)在已处理区域1602中搜索在相对空间配置和预测值方面都与预测模板1508a相匹配的像素布置(出于本示例的目的,假定在像素区域1601内任意选择的像素布置1606匹配预测模板1508a);(3)将像素区域1608标识为与当前编码块相对于预测模板的匹配布置具有相对空间关系的区域;并且(4)将像素区域1608的每个像素的相应预测值映射到当前编码块的对应像素。在各个实施例中,当确定诸如预测模板1508a-b的预测模板与像素的可能匹配布置(例如像素布置1606)之间是否存在匹配时,编码器400可以将各种公差应用于匹配算法,诸如检测匹配:(a)仅在预测模板的预测值与可能的像素匹配布置完全匹配的情况下;(b)仅在所有预测值都匹配+/-2%的情况下;(c)仅在一个预测值以外的所有预测值均完全匹配且其余预测值匹配+/-5%的情况下;(d)仅在除一个预测值以外的所有预测值均完全匹配且其余预测值匹配+/-5%或所有预测值匹配+/-2%的情况下(即(b)或(c)的组合);(d)预测模板的预测成本和可能的像素匹配布置小于预限定阈值(预测成本可以是例如绝对差之和(sad)、平方误差之和(sse)或源自率失真函数);等。在各个实施例中,匹配算法可以:(a)在找到可容忍的像素匹配布置之后,停止处理可能的像素匹配布置,并将对应像素区域的预测值映射到当前编码块的像素;(b)处理所有可能的像素匹配布置,然后选择最佳的可用像素匹配布置并将对应像素区域的预测值映射到当前编码块的像素;(c)开始处理所有可能的像素匹配布置,如果找到完美匹配则停止,并将对应像素区域的预测值映射到当前编码块的像素,否则继续处理所有可能的像素匹配布置,选择最佳可用的非完美匹配,并将对应像素区域的预测值映射到当前编码块的像素;等。矩形编码块预测值选择例程图17示出了根据各个实施例的可由帧内预测器444实现的示例性矩形编码块预测值选择例程1700。矩形编码块预测值选择例程1700可以在执行块1702处获得矩形编码块。例如,矩形编码块预测值选择例程1700可以获得帧内的像素位置、编码块宽度尺寸和编码块高度尺寸。像素位置可以对应于当前编码块的右上角的像素,编码块宽度尺寸可以对应于多个像素列,并且编码块高度尺寸可以对应于多个像素行。矩形编码块预测值选择例程1700可以在执行块1704为矩形编码块选择预测模板。例如,矩形编码块预测值选择例程1700可以选择预测模板,所述预测模板包括与沿着当前编码块的上侧和左侧接界的像素,如以上关于图15所述。矩形编码块预测值选择例程1700可以在执行块1706处标识当前帧中的搜索区域。例如,搜索区域可以包括当前帧的具有已经分配的预测值的所有像素。在子例程块1800处,矩形编码块预测值选择例程1700调用下面参考图18进行描述的已处理区域搜索子例程1800。子例程块1800可以返回像素区域或预测失败错误。在判定块1708处,如果子例程块1800返回预测失败错误,则矩形编码块预测值选择例程1700可能在返回块1798处失败地终止;否则,矩形编码块预测值选择例程1700可以进行到开始循环块1710。在开始循环块1710处,矩形编码块预测值选择例程1700可以依次处理矩形编码块的每个像素。例如,矩形编码块预测值选择例程1700可以从左到右和从上到下处理矩形编码块的像素。矩形编码块预测值选择例程1700可以在执行块1712处将从已处理区域搜索子例程1800获得的像素区域的像素的预测值映射到矩形编码块的当前像素。例如,可以将像素区域的左上角的像素的预测值映射到当前编码块的左上角的像素等。在结束循环块1714处,矩形编码块预测值选择例程1700可以循环回到开始循环块1710以处理矩形编码块的下一个像素(如果存在的话)。矩形编码块预测值选择例程1700可以在返回块1799处成功终止。已处理区域搜索子例程图18示出了根据各个实施例的可由帧内预测器444实现的示例性已处理区域搜索子例程1800。已处理区域搜索子例程1800可以在执行块1802处获得预测模板和搜索区域。已处理区域搜索子例程1800可以在执行块1804处为预测模板选择锚像素。例如,如果预测模板是沿着编码块的顶部和左侧边界的l形像素布置,则锚像素可以是“l”交点处的像素,即编码块左上角中的像素上方的一个像素行和左侧的一个像素列。在开始循环块1806处,已处理区域搜索子例程1800可以依次处理搜索区域的每个像素。已处理区域搜索子例程1800可以生成具有与预测模板相同布置的测试模板,但使用当前搜索区域像素作为测试模板的锚像素。在子例程块1900处,已处理区域搜索子例程1800可以调用下面参考图19描述的模板匹配测试子例程1900。模板匹配测试子例程1900可以返回完美匹配结果、可能匹配结果或不匹配结果。在判定块1810处,如果模板匹配测试子例程1900返回完美匹配结果,则已处理区域搜索子例程1800可以继续进行以返回块1897,并且将当前测试模板与当前编码块相对于预测模板具有相同的相对空间关系的像素区域返回;否则,已处理区域搜索子例程1800可以进行到判定块1812。在判定块1812处,如果模板匹配测试子例程1900返回可能匹配结果,则已处理区域搜索子例程1800可以进行到执行块1814;否则,已处理区域搜索子例程1800可以进行到结束循环块1816。已处理区域搜索子例程1800在执行块1814处可以将与当前搜索区域像素相关联的测试模板标记为对应于可能匹配。在结束循环块1816处,已处理区域搜索子例程1800可以循环回到开始循环块1806以处理搜索区域的下一个像素(如果存在的话)。在判定块1818处,如果没有测试模板被标记为可能匹配;则已处理区域搜索子例程1800可以通过在返回块1898处返回不匹配错误来终止;否则,已处理区域搜索子例程1800可以进行到判定块1820。在判定块1820处,如果在执行块1814处发现多个测试模板是可能匹配,则已处理区域搜索子例程1800可进行到执行块1822;否则,即仅将一个测试模板标记为可能匹配,已处理区域搜索子例程1800可以进行到返回块1899。已处理区域搜索子例程1800可以选择已标识的可能匹配测试模板中的最佳匹配测试模板,并丢弃其余的已标识的可能匹配测试模板,仅留下一个已标识的测试模板。已处理区域搜索子例程1800可以通过将测试模板与当前编码块相对于预测模板具有相同的相对空间关系的像素区域返回来在返回块1899处终止。模板匹配测试子例程图18示出了根据各个实施例的可由帧内预测器444实现的示例性模板匹配测试子例程1900。模板匹配测试子例程1900可以在执行块1902处获得测试模板和预测模板。模板匹配测试子例程1900可以在执行块1904处将匹配变量设置为真。在开始循环1906处,模板匹配测试子例程1900可以依次处理测试模板的每个像素。在判定块1908处,如果当前测试模板像素的预测值与对应的预测模板像素的预测值匹配,则模板匹配测试子例程1900可以进行到结束循环块1912;否则,模板匹配测试子例程1900可以进行到执行块1910。模板匹配测试子例程1900可以在执行块1910处将匹配变量设置为假。在结束循环块1912处,模板匹配测试子例程1900可以循环回到开始循环块1906以处理测试模板的下一个像素(如果存在的话)。在判定块1914处,如果匹配变量的值为真,则模板匹配测试子例程1900可以在返回块1997处返回完美匹配结果;否则,模板匹配测试子例程1900可以进行到执行块1916。模板匹配测试子例程1900可以在执行块1916处将匹配变量的值设置为真。在开始循环1918处,模板匹配测试子例程1900可以依次处理测试模板的每个像素。在判定块1920处,如果当前测试模板像素的预测值在对应预测模板像素的预测值的预限定公差水平内,则模板匹配测试子例程1900可以进行到结束循环块1924;否则,模板匹配测试子例程1900可以进行到执行块1922。模板匹配测试子例程1900可以在执行块1922处将匹配变量设置为假。在结束循环块1924处,模板匹配测试子例程1900可以循环回到开始循环块1906以处理测试模板的下一个像素(如果存在的话)。在判定块1926处,如果匹配变量的值为真,则模板匹配测试子例程1900可以通过在返回块1998处返回可能匹配结果来终止;否则,模板匹配测试子例程1900可以通过在返回块1999处返回不匹配结果来终止。定向预测技术根据本方法和系统的各个实施例的各方面,为了选择用于编码块的帧内预测器,编码器400可以尝试将已经选择的预测值从编码块附近的像素映射到编码块的像素。图20a至图20e示出了各自对应于视频帧(未示出)的一部分的五个像素区域2000a-e。像素区域2000a-e被示出为被部分编码,每个区域具有已处理区域2002a-e、未处理区域2004a-e(由单阴影线指示)和当前编码块2006a-e。已处理区域2002a-e表示已经由块索引器408索引到编码块中并且已经由帧内预测器444处理的像素。未处理区域2004a-e表示未被帧内预测器444处理的像素。当前编码块2006a-e是由帧内预测器444当前正在处理的矩形编码块。(出于说明性目的,任意选择编码块2006a-e的尺寸-根据本方法和系统,当前技术可以应用于任何编码块。)在图20a至图20c中,来自编码块2006a-c的正上方的行和左侧列的像素形成示例性预测区域2008a-c。预测区域是当前编码块附近的像素的布置,所述像素已经被帧内预测器444处理,因此已经具有与其相关联的预测值。预测区域2008a-c的像素的相对空间配置形成“l”形预测区域,所述预测区域使编码块2006a-c的沿编码块的上侧和左侧(即,与已处理区域2002a-c接界的编码块2006a-c的两侧)的像素接界。在图20d至图20e中,来自编码块2006a-c的正上方的行的像素形成示例性预测区域2008d-e。预测区域2008d-e的像素的相对空间配置形成“条”形预测区域,所述预测区域使编码块2006a-c的沿编码块的上侧和延伸到左侧的像素接界。根据本方法和系统的各个方面,可以将预测区域2008a-e内的像素的预测值映射到编码块2006a-e的对角连续像素,例如沿斜率为-1的对角线向量。根据本方法和系统的其他方面,如图20a至图20c所示,对于单个编码块,l形预测区域中的像素的预测值可以与条形预测区域中的像素的预测值组合。例如,可以根据等式1生成预测值pv:pv=a*pl+(1-a)pb其中pl是l形预测区域中的像素,pb是条形预测区域中的像素,并且a是控制预测效率的系数。图21a至图21b示出了对应于视频帧(未示出)的一部分的像素区域2100。像素区域2100被示出为被部分编码,具有已处理区域2102、未处理区域2104(由单阴影线指示)和当前编码块2106。已处理区域2102表示已经由块索引器408索引到编码块中并且已经由帧内预测器444处理的像素。未处理区域2104表示未被帧内预测器444处理的像素。当前编码块2106是当前由帧内预测器444根据以上关于图20描述的定向预测技术来处理的8×16矩形编码块。预测区域2108包括来自编码块2106的正上方的行和左侧列的像素。在图21a中,预测区域2108的每个像素的预测值由字母数字指示符指示,所述字母数字指示符对应于预测区域内像素的相对行(以字母表示)和列(以数字表示)。对角向量从预测区域2108的每个像素延伸到编码块2106的一个或多个像素,对应于预测区域的预测值到编码块的像素的映射。在图21b中,编码块2106的每个像素的映射的预测值由对应于像素预测值来源的字母数字指示符指示。定向预测值选择例程图22示出了根据各个实施例的可由帧内预测器444实现的示例性定向预测值选择例程2200。例如,如果如上所述的矩形编码块预测值选择例程1700未能找到用于编码块的合适的预测值,则帧内预测器444可以使用定向预测值选择例程2200作为替代。定向预测值选择例程2200可以在执行块2202处获得编码块。在开始循环块2204处,定向预测值选择例程2200可以依次处理所获得的编码块的每个像素。例如,定向预测值选择例程2200可以从左到右和从上到下处理编码块的像素。定向预测值选择例程2200可以在执行块2206处选择要用于选择当前像素的预测值的预测区域。例如,定向预测值选择例程2200可以选择l形预测区域、条形预测区域等。定向预测值选择例程2200还可以选择组合多个预测区域(出于本示例的目的,假定每个编码块只有两个可能的预测区域-l形区域和条形区域,如上所述)。定向预测值选择例程2200可以为当前编码块的每个像素选择相同的预测区域,或者可以在预测区域之间交替。在判定块2208处,如果定向预测值选择例程2200选择组合预测区域,则定向预测值选择例程2200可以进行到执行块2214,如下所述;否则,定向预测值选择例程2200可以进行到执行块2210。定向预测值选择例程2200可以在执行块2210处从所选择的预测区域中为编码块的当前像素选择源像素。例如,定向预测值选择例程2200可以基于以上关于图20a至图20e描述的对角向量来选择源像素。定向预测值选择例程2200可以在执行块2212处将预测值从源像素映射到编码块的当前像素。定向预测值选择例程2200然后可以进行到结束循环块2224。返回到如上所述的判定块2208,如果定向预测值选择例程2200选择了组合预测区域,则在执行块2214处,定向预测值选择例程2200可以选择预测控制系数。定向预测值选择例程2200可以在执行块2216处从第一预测区域(例如,l形预测区域)中为编码块的当前像素选择源像素。定向预测值选择例程2200可以在执行块2218处从第二预测区域(例如,条形预测区域)中为编码块的当前像素选择源像素。定向预测值选择例程2200可以使用所选择的源像素的预测值和所选择的预测控制系数来计算组合的预测值。例如,定向预测值选择例程2200可以根据上面的等式1来计算组合的预测值。定向预测值选择例程2200可以在执行块2222处将组合的预测值映射到编码块的当前像素。在结束循环块2224处,定向预测值选择例程2200可以循环回到开始循环块2204以处理编码块的下一个像素(如果存在的话)。定向预测值选择例程2200可以在返回块2299处终止。尽管本文已经示出且描述了特定实施例,但本领域的普通技术人员将理解,在不脱离本发明的范围的情况下,替代和/或等效的实现方式可以代替所示出且描述的特定实施例。本申请意图覆盖本文讨论的实施例的任何改编或变型。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1