递归块分区的制作方法

文档序号:10598505阅读:333来源:国知局
递归块分区的制作方法
【专利摘要】根据本公开的各个方面,提供了用于将图像分为区域、将分区类型应用于每个区域、基于应用于每个区域的分区类型来为每个区域确定率失真代价、基于应用于每个区域的所述分区类型来为每个区域确定代码化方案、并且基于为每个区域确定的率失真代价和代码化方案来单独地对每个区域进行编码的系统和方法。
【专利说明】
递归块分区
[0001] 相关申请的交叉引用
[0002] 本申请要求2013年12月30日提交的标题为"RECURSIVE BLOCK PARTITIONING"的 美国非临时专利申请第No. 14/144,375号的优先权并且是该案的延续,其公开内容以引用 的方式全部并入本文。
技术领域
[0003] 本描述涉及用于递归块分区以及其在视频压缩中的熵编码的各种基于计算机的 技术。
【背景技术】
[0004] -般而言,视频编解码能够实现数字视频的的压缩/解压缩。通常,在视频质量、表 现视频所需的数据量(即,比特率)、编码/解码算法的复杂性、和一些其它因素之间存在复 杂平衡。视频编解码器通常采用基于块的编码,其中,较大块大小使代码化方面的平均间接 成本降低,而较小块大小可以允许在预测方面更灵活以减少残差能量。当处理块大小选择 时,传统视频编解码在维持相对简单和简洁的编解码结构的同时使率失真代价最佳化方面 有不足。近年来,使在平均间接成本与预测质量之间的折衷最佳化的共同策略是针对给定 区域的共同策略,编码器可以对所有允许的块大小进行测试并且选择使率失真代价最小化 的允许的块大小。该共同策略明确地将选定的块大小编码为比特流。不幸的是,由于传统编 码,在所有块大小上的这类大规模搜索导致高度复杂的视频编解码实施方式。进一步地,明 确地对块大小信息进行代码化充分地利用了空间相关性,这可能导致压缩效率低。同样,存 在对通过其实现视频编解码的过程最佳化和/或和/或改进需要。

【发明内容】

[0005] 根据本公开的各个方面,提供了一种用于存储指令的非暂时性计算机可读存储介 质,该指令在被执行时使得至少一个处理器进行过程。所述指令可以包括被配置成将图像 分为多个区域并且将多个分区类型应用于所述多个区域中的每个区域的指令。所述指令可 以包括被配置成基于应用于所述多个区域中的每个区域的所述多个分区类型来为所述多 个区域中的每个区域确定率失真(例如,率失真代价)的指令。所述指令可以包括被配置成 基于应用于所述多个区域中的每个区域的所述多个分区类型来为所述多个区域中的每个 区域确定代码化方案的指令。所述指令可以包括被配置成基于为所述多个区域中的每个区 域确定的率失真代价和代码化方案来单独地对所述多个区域中的每个区域进行编码的指 令。
[0006] 根据本公开的各个方面,提供了一种用于存储指令的非暂时性计算机可读存储介 质,所述指令在被执行时使得至少一个处理器执行过程。所述指令可以包括被配置成将视 频分为多个像素块并且将多个分区类型应用于所述多个像素块中的每个像素块的指令。所 述指令可以包括被配置成对于应用于所述多个像素块中的每个像素块的所述多个分区类 型的第一分区类型,将第一分区类型的每个像素块分为多个像素子块,并且将所述多个分 区类型重新应用于所述多个像素子块中的每个像素子块的指令。所述指令可以包括被配置 成基于分别应用于并且重新应用于每个像素块和每个像素子块的所述多个分区类型来为 每个像素块和每个像素子块确定率失真代价的指令。所述指令可以包括被配置成基于分别 应用于并且重新应用于每个像素块和每个像素子块的所述多个分区类型来为每个像素块 和每个像素子块确定代码化方案的指令。所述指令可以包括基于为每个像素块和每个像素 子块确定的率失真代价和代码化方案来单独地对每个像素块和每个像素子块进行编码的 指令。
[0007] 根据本公开的各个方面,系统可以包括至少一个处理器和存储器。系统可以包括 编码器,该编码器被配置成使得至少一个处理器将图像分为多个区域并且将多个分区类型 应用于所述多个区域中的每个区域。编码器可以被配置成使得至少一个处理器:对于应用 于所述多个区域中的每个区域的所述多个分区类型中的至少一个分区类型,将该至少一个 分区类型的每个区域分为多个子区域,并且将所述多个分区类型重新应用于多个子区域中 的每个子区域。编码器可以被配置成使至少一个处理器基于分别应用于并且重新应用于每 个区域和每个子区域的所述多个分区类型来为每个区域和每个子区域确定率失真代价。编 码器可以被配置成使至少一个处理器基于分别应用于并且重新应用于每个区域和每个子 区域的多个分区类型来为每个区域和每个子区域确定编码方案。编码器可以被配置成使至 少一个处理器基于分别为每个区域和每个子区域确定的率失真代价和编码方案来单独地 对每个区域和每个子区域进行编码。
[0008] 在附图或以下描述中阐释了一个或多个实施方式的细节。其它特征将通过描述和 附图并且通过权利要求而变得显而易见。
【附图说明】
[0009] 图1A是图示出了根据本公开的各个方面的用于实施各种基于计算机的技术的示 例系统的框图,该各种基于计算机的技术用于递归块分区和其在视频压缩中的熵编码。
[0010] 图1B是图示出了根据本公开的各个方面的与图1A所示的部分框相关联的示例组 件的框图。
[0011] 图2是图示出了根据本公开的各个方面的示例编码器的框图。
[0012] 图3是图示出了根据本公开的各个方面的示例解码器的另一框图。
[0013]图4是图示出了根据本公开的各个方面的用于递归块分区的示例技术的框图。
[0014] 图5是图示出了根据本公开的各个方面的用于基于上下文的熵编码的示例技术的 框图。
[0015] 图6A是图示出了根据本公开的各个方面的用于在编码器处产生表格的方法的过 程流程。
[0016] 图6B至图6C是根据本公开的各个方面的用于递归块分区的示例方法的过程流程。
[0017] 图7是图示出了根据实施方式的概率表的示例的示意图。
[0018] 图8是图示出了根据本公开的各个方面的用于递归块分区的另一示例方法的过程 流程。
【具体实施方式】
[0019] 图1A是图示出了根据本公开的各个方面的用于实施各种技术的示例系统100的框 图,该各种技术用于递归块分区和其在视频压缩中的熵编码。在一些实施方式中,可以将图 像分为多个区域(例如,每个区域具有诸如64 X 64像素的n X n像素的大小)。进一步地,可以 通过率失真环路来对每个区域进行测试以发现最佳代码化决策决策(包括:将图像分为或 者分区为区域或者像素块大小的方式、每块的预测模式、应用于每个块的变换类型等),并 且然后可以以光栅顺序将每个区域代码化或者编码为比特流。在一些实施方式中,可以将 图像分为多个区域,该多个区域具有诸如64X32像素的nXm像素的尺寸。
[0020] 率失真环路可以用于在视频压缩中提高视频质量,并且可以涉及将失真量(视频 质量损失)与用于对视频进行编码的数据量(数据率)进行比较并且确定该失真量。在一些 实施方式中,率失真环路可以用于改善编码,其中,决策可以同时影响编码视频的文件大小 和质量。
[0021] 在图1A的示例中,系统100可以包括用于实施递归块分区的计算机系统。在图1A的 示例中,编码器120可以包括:在正向通路上执行各种功能以使用输入视频流来提供编码比 特流或者压缩比特流的一个或者多个阶段。如本文进一步所描述的,可以将输入视频流的 图像或者视频帧分为多个区域,其中,可以通过率失真环路来对每个区域执行测试或者评 估以发现最佳代码化决策,并且然后可以以光栅顺序将每个区域编码为比特流。
[0022] 在图1A的示例中,解码器124可以包括:执行各种功能以提供来自编码比特流或者 压缩比特流的输出视频流的一个或者多个阶段。如本文进一步所描述的,可以向用于解码 的解码器提供编码比特流或者压缩比特流以提供输出视频流。在一些实施方式中,解码器 124是编码器120的补充,因此,解码器124所使用的解码过程是编码器120所使用的编码过 程的补充。下面结合例如图2至图5来描述与编码器120和解码器124的操作有关的更多细
[0023] 在图1A的示例中,计算装置104可以包括与视频源114和网络118通信的服务器或 者用户装置。在一些实施方式中,计算装置104可以配置为:经由视频接口 130接收来自视频 源114的视频数据流、经由编码器120对视频数据流执行编码、并且经由网络接口 134通过网 络118传送编码视频数据流。编码器120可以使用基于视频源114的块分区和其熵编码而被 最佳化的编码过程。本文进一步描述了发生最佳化的(一个或多个)示例编码过程。
[0024] 在一些实施方式中,计算装置104可以配置为:经由网络接口 134接收来自网络118 的视频数据流、经由解码器124对视频数据流进行解码、并且经由视频接口 130将解码视频 数据流显示在显示装置150上。解码器124可以使用基于视频数据流的块分区和其熵编码而 被最佳化的解码过程。本文进一步描述了示例解码过程。
[0025] 视频源114可以是能够提供、捕捉、和/或传送包括静态图像、视频帧等的视频图像 的任何装置。例如,视频源114可以包括:计算机服务器、膝上型计算机、笔记本计算机、平板 计算机、移动电话、个人数字助理、数码相机、数码摄像机、网络摄像机、或者能够提供、捕 捉、和/或传送包括视频图像的图像的任何其它装置。在一些实施方式中,计算机装置104可 以接收来自多个视频源114的音频和/或视频,并且将源合并为单个视频数据流。
[0026] 在一些实施方式中,计算装置104可以处于网络118的一个节点处,并且可以操作 为与网络118的一个或者多个其它节点直接地并且间接地通信。例如,计算机装置104可以 包括web服务器,该web服务器操作为经由网络118与一个或者多个客户端装置通信,使得计 算装置104使用网络118来向用户传送信息并且将该信息显示在显示装置152上。虽然通常 参照计算装置104来描述本文所述的概念和技术,但是本公开的各个方面可以应用于能够 实施编码/解码操作的任何装置和/或计算节点。
[0027] 在一些实施方式中,系统100可以配置成为数据提供隐私保护,包括例如,个人可 识别信息的匿名化、数据的聚合、敏感信息的过滤、移除个人属性的敏感信息的加密、散列 或者过滤、有关信息存储的时间限制、和/或有关数据使用或者共享的限制。这样,可以使数 据匿名化并且聚合,使得个人用户数据不会被透露。
[0028] 在图1A的示例中,视频接口 130可以配置为:为与许多不同的音频和视频标准有关 的输入提供硬件和/或软件接口,该音频和视频标准定义为在计算装置、外围设备、和各种 类型的电气设备之间的连接指定的物理特性和参数的类型。这些音频和视频标准可以定义 用于信号的成功传输的模拟和数字视频数据传输协议。例如,数字接口可以用于将视频源 连接至用于传输诸如输入视频流的数字视频内容的诸如计算机的计算装置。在某些情况 下,可以将视频接口 130设计为接收来自视频源114的输入视频流,并且将其提供给用于编 码的编码器120。
[0029] 在图1A的示例中,网络接口 134可以配置为管理传送编码器120所编码的视频数据 流。进一步地,网络接口 134可以配置为管理接收解码器124所解码的视频数据流。网络接口 134可以配置为接收来自该至少一个处理器110的指令以配置用于传送和接收视频数据流 的网络参数和网络协议。
[0030]网络118可以包括各种配置并且使用各种协议,包括:互联网、万维网、内联网、虚 拟专用网、本地以太网、使用一个或者多个公司专有的通信协议的专用网络、蜂窝和无线网 络(例如,Wi-Fi )、即时通信、超文本传输协议("HTTP")、简易邮件传输协议("SMTP")、以及 上述事项的各种组合。进一步地,系统100可以是经由网络118通信的相连计算机的较大系 统的一部分。
[0031 ]虽然如上面所看到的那样在传送或者接收信息时获得某些优点,但是本文所描述 的系统和方法的其它方面并不限于信息传输的任何特定方式。例如,在一些实施方式中,可 以经由诸如光盘或者便携式驱动的介质传送信息。在其它实施方式中,可以以非电子格式 传送信息和/或将该信息手动输入到系统中。
[0032] 在图1A的示例中,系统100可以包括用于实施递归块分区的计算机系统,该递归块 分区可以与计算装置104相关联,该计算装置104可以配置为专用机器,该专用机器设计为 实施用于递归块分区和其在视频压缩中的熵编码的各种基于计算机的技术,如本文所描 述。从这个意义上讲,计算装置104可以包括任何(一个或多个)标准元件和/或(一个或多 个)组件,包括至少一个处理器110、至少一个存储器112(例如,非暂时性计算机可读存储介 质)、至少一个数据库140、电源、(一个或多个)外围设备、以及在图1A中可能未被特别示出 的各种其它计算元件和/或组件。进一步地,系统100可以与显示装置150(例如,监视器或者 其它显示器)相关联,该显示装置150可以用于提供用户界面(UI)152,诸如,例如,图形用户 界面(GUI)。1]1 152可以用于接收来自利用系统100的用户的输入。
[0033] 这样,可以添加或者包括系统100的可以用于实施系统100的各种其它元件和/或 组件。进一步地,在各种实施方式中,计算装置104可以包括任何类型的装置,诸如,计算机 服务器、膝上型计算机、笔记本计算机、平板计算机、移动电话、个人数字助理、或者能够处 理(例如,编码、解码等)和/或传送包括静态图像和视频图像的图像的任何其它装置。
[0034] 虽然图1A在单个功能框内功能地图示出了至少一个处理器110和至少一个存储器 112,但是应该理解,该至少一个处理器110和该至少一个存储器112可以包括:可以或可以 不被存储在相同的物理壳体内的多个处理器和存储器。这样,对(一个或多个)处理器、(一 个或多个)计算机、和/或(一个或多个)存储器的引用可以包括对可以并行操作或者可以不 并行操作的一些处理器、计算机、和/或存储器的引用。
[0035] 在图1A的示例中,系统100可以包括计算装置104和记录在计算机可读介质112并 且可由至少一个处理器110执行的指令。进一步地,在一个实施方式中,系统100可以包括用 于向用户提供输出的显示装置150,并且显示装置150可以包括用于接收来自用户的输入的 UI 152〇
[0036] 在图1A的示例中,应该理解,通过使用或多或少地表示离散功能的各种功能框或 者模块来图示出系统1〇〇。然而,为了清晰和方便起见提供了这种图示,且因此应该了解,各 种功能可能与所述(一个或多个)框或者(一个或多个)模块重叠或者被结合在所述框或者 模块内,并且/或者可以由在图1A的示例中未被具体图示出的一个或者多个框或者模块实 施。这样,应该了解,为了清晰和方便起见,即使没有明确地图示出这种传统元件,也可以包 括可能被认为对图1A的系统100有用的传统功能。
[0037] 图1B是图示出了根据本公开的各个方面的与图1A所示的部分框相关联的示例组 件的框图。具体地,图1B示出了与图1A所示的存储器112和编码器120相关联的示例组件。
[0038] 在图1B的示例中,存储器112可以包括概率表160,其中,每个概率表160与一个或 者多个概率值(例如,0价、0~2、0似丄~4)相关联和/或用该一个或者多个概率值来填充。在 各种实施方式中,存储器112可以包括诸如概率表160的任何数量的概率表以及任何数量的 相关联概率值。在一些实施方式中,概率值中的一个或者多个概率值可以与一个或者多个 其它概率表(未示出)有关。可以为在包括一组视频帧的视频序列中的每个帧修改/更新在 概率表160中所包括的一个或者多个概率值。概率值CN1、CN2、CN3、CN4可以各自与对在视频 帧内的块进行编码结合使用的特定分区类型的概率相关联。
[0039] 进一步地,在图1B的示例中,编码器120可以包括一个或者多个组件(例如,处理组 件),该一个或者多个组件包括视频序列检测器162、概率计算器164、和分区模块165。在一 些实施方式中,可以将视频序列的每个视频帧分为小区域网格,其中,可以通过率失真最佳 化环路来测试每个区域以发现最佳代码化决策,并且然后以光栅顺序将该每个区域代码化 为比特流。
[0040] 视频序列检测器162可以配置为识别在视频帧序列中的第一帧。例如,视频序列检 测器162可以配置为检测新的视频序列、重新设置/重新开始概率计算、并且更新/修改概率 表,包括例如,将概率表重新设置为默认在视频序列的开始(第一帧)。在一些实施方式中, 视频序列检测器162可以配置为当检测到视频序列的第一帧时,改变概率分布数和/或值。
[0041] 概率计算器164可以配置为:基于在视频帧序列中的第一帧(或者随后的帧)的编 码来将与分区类型相关联的概率值(例如,概率值CN1)修改/更新为更新的概率值。在一些 实施方式中,可以对每个概率表160的概率值进行修改/更新,以使针对在视频序列中的每 个帧的代码化决策最佳化。
[0042] 分区模块165可以配置为基于存储在存储器112中的概率表160来对在视频序列中 的第一帧进行编码。在一些实施方式中,概率表160可以包括与一个或者多个分区类型相关 联的一个或者多个概率值。进一步地,分区模块165可以配置为基于在概率表160中包括的 更新的概率值来对在视频帧序列中的第二帧进行编码。在一些实施方式中,可以递归地对 每个帧进行编码以确定最佳代码化决策,最佳代码化决策包括将每个帧分区为较小块大小 的方式、每块的预测模式、应用于每个块的变换模式等。
[0043] 分区模块165可以包括一个或者多个组件,该一个或者多个组件包括邻居块分析 器166和分区选择器167。在一些实施方式中,邻居块分析器166可以配置为识别包括左边邻 居块和上方邻居块的邻居块(和/或不同的邻居),并且分区选择器167可以配置为将各种分 区类型应用于一个或者多个邻居块以进行进一步分析,所述分析包括在参照邻居块的分区 来识别当前块的最佳分区。
[0044] 根据本公开的各个方面,编码器120可以配置为利用基于上下文的熵编码方法来 分析邻居块,并且选择分区类型来使代码化决策最佳化。例如,用于分区类型代码化的概率 模型可以以下列因素中的一个或者多个为条件:当前块大小(例如,64 X64、32X 32、16 X 16、8\8、4\4、2乂2等)、其上方邻居块的分区类型、其左边邻居块的分区类型。每个条件概 率模型可以是后向自适应的,并且可以以每帧为基础而被更新。该基于上下文的熵代码化 技术可以用于有效地利用空间相关性,其中,分区类型倾向于与连续区域保持一致,并且可 以用于实现各种性能增益。
[0045] 与超过所有可能的块大小的传统大规模搜索方法不同,本公开的基于上下文的熵 代码化技术配置为使用用于最佳率失真搜索以及最佳编码和解码过程的递归块分区。在率 失真最佳化阶段期间,可以通过多个分区类型(诸如,例如,垂直(vert)分区、水平(horz)分 区、无(none)分区、以及拆分(split)分区为更小的区域/块)来对每个区域/块进行测试。进 一步地,然后通过各种可能的预测模式、滤波类型、变换尺寸等来独立地对结果子块中的每 个结果子块进行测试,以发现其(局部)最佳代码化决策。本文更详细地描述了本公开的这 些和各种其它方面。
[0046] 图2是图示出了根据本公开的各个方面的示例编码器200的框图。可以诸如通过提 供在例如存储器112(在图1A中示出)的存储器中存储的计算机软件程序来在计算装置、月艮 务器、传送站等中实施编码器200。编码器200可以包括在正向通路208(例如,如流虚线所 示)上执行各种功能以通过使用输入视频流210来提供编码或者压缩比特流230的一个或者 多个阶段。在各种实施方式中,正向通路208可以包括:作为对编码器200的输入的输入视频 流210,其后跟随内部/中间预测阶段214(例如,可以从初始视频信号中减去预测信号以生 成用于下个阶段的残差)、变换阶段218、量化阶段222、和熵编码阶段226。
[0047]编码器200可以包括重构通路232(例如,如连接虚线所示)以重构用于未来块的编 码的帧。在一些实施方式中,这可以确保编码器200和解码器300(例如,如图3所示)使用相 同的参考来对编码器200所提供的编码或者压缩比特流230进行解码。如图2所示,编码器 200可以包括在重构通路232中执行各种功能的一个或者多个附加阶段。在各种实施方式 中,重构通路232可以包括解量化阶段234、反变换阶段238、重构阶段242、和环路滤波阶段 246。在其它实施方式中,编码器200的结构变化可以用于对输入视频流210进行编码。
[0048] 当将输入视频流210发送至用于编码的编码器200时,可以以块为单元处理输入视 频流210的每个帧。在一些实施方式中,在内部/中间预测阶段214,可以使用帧内预测(其可 以被称为内部预测)或者帧间预测(其可以被称为其间预测)来对每个块进行编码。在任何 情况下,可以形成(例如,定义)预测块。在内部预测的情况下,预测块可以由在已经被先前 编码和重构的当前帧中的采样形成。在其间预测的情况下,预测块可以由在一个或者多个 先前构建的参考帧中的采样形成。在内部/其间预测阶段214,可以从当前块中减去预测块 以提供残差块(其可以被称为残差)。变换阶段218可以配置为将残差转变为在例如频域中 的系数。
[0049] 进一步地,在一些实施方式中,量化阶段222可以配置为使用量化器值或者量化级 别来将变换系数转换为离散量子值,该离散量子值可以被称为量化变换系数。然后可以通 过熵编码阶段226来对量化变换系数进行熵编码。然后将熵编码系数连同用于对可以包括 例如所使用的预测类型、运动矢量和量化器值的块进行解码的其它信息一起输出至编码或 者压缩比特流230。在各种实施方式中,可以使用各种技术(诸如例如变长代码化(VLC)、算 术代码化)来使压缩比特流230格式化。压缩比特流230也可以被称为编码视频流或者编码 输出视频流。熵编码阶段226可以配置为生成一个或者多个概率表,并且生成一个或者多个 概率值以用本文所描述的方式来填充概率表。
[0050] 在一些实施方式中,视频编解码可以采用基于块的代码化去,其中,将每个帧分区 为块网格,然后使用跟随有空间变换和量化的帧间/帧内预测来独立地对每个块进行代码 化。大块大小可以导致在对预测模式、参考帧索引、运动矢量等进行代码化方面的平均间接 成本更低,而小块大小可以允许在预测方面的更多灵活性,从而减少残差能量。本公开的各 个方面可以配置为提供方法和设备来有效地处理块大小选择以在维持相对简单和简洁的 编解码结构的同时使总体率失真代价权衡最佳化。进一步地,在编码器200中设置互补的熵 代码化技术,以对每个选定块大小进行代码化/解码,从而充分地利用用于对性能增益进行 代码化的空间相关性,本文进一步对此进行了描述。
[0051] 使在平均间接成本与预测质量之间的折衷最佳化或者平衡的一个策略为针对给 定区域的策略,编码器可以对每个允许的块大小进行测试并且选择使率失真代价最小化的 至少一个块大小。进一步地,编码器然后可以明确地将选定的块大小编码为比特流。超过每 个块大小的这种大规模搜索可能导致高度复杂的视频编解码实施方式。此外,明确地对块 大小信息进行代码化充分地利用了空间相关性,这可能导致压缩效率低。
[0052] 然而,本公开的各个方面使用递归块分区,这在维持相对简单和简洁的编解码实 施方式的同时允许在使块大小最佳化方面的更多灵活性。在一些实施方式中,递归块分区 将实际块大小的代码化转化为结合基于上下文的熵代码化的分区类型的代码化(本文进一 步描述),从而提供改进的性能增益。根据允许的块大小的灵活性可以通过维持简单和简洁 的编解码结构来提高压缩效率。进一步地,在一些实施方式中,分区类型的基于上下文的熵 代码化可以提供进一步对性能增益进行代码化。本公开的各个方面可以应用于研究并且开 发视频编解码和/或各种视频压缩技术(例如,编解码设计)。更进一步地,本公开的各个方 面可以应用于和/或适用于与视频流和/或静态图片代码化有关的技术。
[0053]图3是图示出了根据本公开的各个方面的示例编码器300的框图。在一些实施方式 中,解码器300可以与编码器200的重构通路232相似。解码器300可以包括执行各种功能以 提供来自编码或者压缩比特流310的输出视频流342的一个或者多个阶段。解码器300可以 包括熵解码阶段314、解量化阶段318、反变换阶段322、重构阶段326、环路滤波阶段330、内 部/其间预测阶段334、和解块滤波阶段338。在其它实施方式中,解码器300的结构变化可以 用于对压缩比特流310进行解码。
[0054] 当向用于解码的解码器300提供压缩比特流310时,可以由熵解码阶段314(例如, 使用VLC、算术代码化等)来对在压缩比特流310内的数据元素进行解码以产生一组量化变 换系数。解量化阶段318可以配置为对量化变换系数进行解量化,并且反变换阶段322可以 配置为对解量化变换系数进行反变换以提供导数残差,该导数残差可以与由编码器200的 反变换阶段238生成的导数残差相同。在一些实施方式中,使用从压缩比特流310解码的头 信息,解码器300可以配置为使用内部/其间预测阶段334来生成与由内部/其间预测阶段 214在编码器200中生成的预测块相同的预测块。在重构阶段326,可以将预测块添加至导数 残差以生成重构块。可以将环路滤波阶段330应用于重构块以降低块效应。在一些实施方式 中,可以将各种其它滤波应用于重构块。例如,可以将解块滤波阶段338应用于重构块以降 低导致例如输出视频流342的输出的块失真。可以将输出视频流342称为解码视频流或者解 码输出视频流。
[0055] 图4是图示出了根据本公开的各个方面的用于递归块分区400的示例技术的框图。 在图4中,在一些实施方式中,可以将图像410(例如,视频帧)分为诸如区域网格的多个区域 414,其中,每个区域418至少可以比图像本身小(例如,每个区域的尺寸为64X64像素)。在 这种情况下,可以利用率失真环路来对每个区域418进行测试以评估和发现最佳代码化决 策(包括:将图像410分为或者分区为更小块大小的方式、每块的预测模式、应用于每个块的 变换类型等),并且然后以光栅顺序将该每个区域418代码化为比特流。
[0056] 关于最佳代码化方案,对于给定区域,编码器可以配置为对一个、一些、或者全部 可能的分区(划分)类型进行测试,其中,每个类型导致一组子块,该一组子块可以是互相排 斥的并且一起可以覆盖整个区域。编码器然后可以对在每个子块上的包括预测模式、参考 源、滤波类型、变换类型和大小等的各种可能的代码化模式进行测试,并且获得使该子块的 率失真代价最小化或者具有满足阈值条件(例如,阈值)的率失真代价的一种可能的代码化 模式。给定区域的每个分区类型现在可以与率失真代价值相关联,该率失真代价值可以被 计算为每个子块的最小率失真代价的总和。因此,编码器可以选取或者选择提供最小总体 代价的分区类型。
[0057] 与超过所有可能的块大小的传统大规模搜索不同,本公开的各个方面可以配置为 进行用于率失真搜索以及编码和解码过程的递归块分区方法,如本文所描述的。在各个实 施方式中,在率失真最优化阶段期间,可以通过多个分区类型426来对每个区域418进行测 试,所述多个分区类型426诸如例如包括无分区(none)分区类型430、水平(horz)分区类型 432、垂直(vert)分区类型434、和拆分分区类型436的四个分区类型中的至少一个,该至少 一个类型将每个区域438分为四个更小的区域(拆分)或者被称为子块的子区域438。如图4 所示,然后可以通过一种或者多种可能的预测模式、滤波类型、变换尺寸等来独立地对结果 子区域438进行测试,以发现其(局部)最佳代码化决策。这指的是图像410的递归分区。
[0058] 在一些实施方式中,分区操作可以应用于方形块。例如,区域可以包括NXN的大 小,其中,N为偶数(例如,二的幂)。四个分区类型可以导致以下子块大小:
[0059] 无分区(NONE)-〉一个 NX N子块,
[0060] 拆分分区(SPLIT)-〉四个(N/2)X(N/2)子块,
[0061 ] 垂直分区(VERT I CAL)->两个(N/2) X N子块,以及
[0062] 水平分区(HORIZONTAL)-〉两个NX (N/2)子块。
[0063] 在一些实施方式中,第一分区类型可以包括具有尺寸相似的四个子块的拆分分区 类型436,第二分区类型可以包括具有两个尺寸相似的、水平布置的两个子块的水平分区类 型432,第三分区类型可以包括具有尺寸相似的、垂直布置的两个子块的垂直分区类型434, 并且第四分区类型可以包括具有单个块的无分区类型430。
[0064] 在一些实施方式中,可以认为包括无分区430、水平分区432和垂直分区434的分区 类型426是终端节点,即,其中无进一步分区可以应用于子块内部。然后可以认为拆分分区 类型436的子区域438是起始点,可以通过包括无分区430、水平分区432、垂直分区434和拆 分分区456的四个分区类型446中的每一个来对该起始点进行递归测试。在这种情况下,可 以将第一次划分414的每个区域418分为在第二次划分446中的多个子区域438,诸如四个区 域的网格。可以为拆分分区类型的每次迭代重复该递归分区任意多次。在一些实施方式中, 该递归分区可以开始于64X64像素块,每个下一次递归分区接下来是一系列32X32像素 块、16 X 16像素块、8 X 8像素块、和4 X 4像素块。在一些实施方式中,从4 X 4像素块开始,递 归分区可以紧接下来至2X2像素块。在其它实施方式中,递归分区可以从任何nXn像素块 开始并且结束于任何nXn像素块。应该理解,可以可选地迫使代码化模式信息(诸如,例如, 参考帧索引、滤波类型等)被分配为超过某个块大小级别。
[0065] 一旦选定最佳代码化模式,编码器200就可以配置为将该选定的最佳代码化模式 写入到比特流中。替代明确地对在给定区域内的实际块大小进行代码化之外,该递归分区 方法以递归方式对分区类型进行代码化。例如,该递归分区方法可以从64X64块开始并且 写入该分区类型。如果该类型为垂直分区、水平分区、或者无分区,则可能已经对子块大小 进行了解析,因此无进一步分区信息被发送。如果该类型为拆分分区类型,则编码器200可 以写入另外四个分区类型,每个分区类型针对一个子块。在一些实施方式中,编码器200重 复发送分区类型信息,直到达到垂直分区/水平分区/无分区的分区类型,或者在一些情况 下,例如8X8以下块大小。解码器300可以配置为从64X64块开始,读取分区类型,并且相应 地解析子块大小。
[0066] 进一步地,本公开的各个方面配置为对分区信息进行基于上下文的熵代码化方 法。例如,用于分区类型代码化的概率模型可以以下列三个因素为条件:当前块大小(例如, 64乂64、32乂32、16乂16等)、其上方邻居块的分区类型、其左边邻居块的分区类型,如参照 图5所描述的。在一些实施方式中,这些条件概率模型可以配置为后向自适应,并且可以是 逐帧被更新。这种基于上下文的熵代码化方法有效地利用了空间相关性,即,其中分区类型 倾向于与连续区域保持一致,并且该基于上下文的熵代码化方法可以实现某些性能增益。
[0067] 在一些实施方式中,可以将自然视频信号视为(模型化为)平稳随机过程。块可以 处理与一个或者多个附近块的某些相似之处,包括像素值、运动信息等。例如,如果帧包括 在明亮的背景前面水平移动的深色对象,则包括对象边缘的块(区域)可以倾向于被垂直分 区,使得可以单独地对分别包括对象和背景的子块进行代码化,这在使每个子块的代码化 模式最优化方面允许更多的灵活性。
[0068] 在图4的实施方式中,本公开的系统和方法可以配置为:将图像410(例如,视频帧) 分为多个区域414、将多个分区类型426应用于多个区域中的每个区域418、并且基于应用于 每个区域418的多个分区类型426来为每个区域418确定率失真代价。进一步地,本公开的系 统和方法可以配置为:基于应用于每个区域418的多个分区类型426来为每个区域418确定 代码化方案、并且基于为每个区域418确定的率失真代价和代码化方案来单独地对每个区 域418进行编码。在一些实施方式中,该分区方法可以以重复方式递归地应用于诸如拆分分 区类型436的分区类型426中的至少一个的一个或者多个子区域438以实现最佳率失真代 价。率失真环路可以用于在视频压缩中提高视频质量,并且可以涉及将失真量(视频质量损 失)与用于对视频进行编码的数据量(数据率)进行比较并且确定该失真量。在一些示例中, 率失真环路可以用于改善编码,其中,决策可以同时影响编码视频的文件大小和质量。
[0069] 图5是图示出了根据本公开的各个方面的用于分区类型的基于上下文的熵编码的 示例技术的框图。在一些实施方式中,如本文所描述,分区类型的采样空间可以包括至少4 个条目,包括无分区(NONE)、水平分区(H0RZ)、垂直分区(VERT)、和拆分(SPLIT)为4个子块。 大小范围从例如8 X 8到64 X 64的每个方块可以被分配至少一个分区类型。可以通过使用采 用在采样空间上的概率分布的熵代码化来对该符号进行代码化以实现压缩。
[0070] 例如,如图5所示,块A和块B可以表示先前代码化的块,并且块C可以表示待编码的 块。参考自然视频/图像信号的空间一致性,如果A被垂直地分区(即,VERT或者SPLIT),则C 也更有可能被垂直地分区。同样地,如果B被水平地分区(即,H0RZ或者SPLIT),则C也非常可 能被水平地分区。因此,本公开的各个方面提供了一种由熵代码器使用的依赖于在图5中的 其上方(即,A)代码化邻居和左边代码化邻居(即,B)的概率分布。进一步地,本公开的各个 方面识别有关块C的块大小的概率模型(分布)的潜在依赖,例如,假定上方/左边块分区类 型相同,64 X 64块可能比8 X 8块更有可能选择SPLIT。
[0071] 因此,该工作采用概率模型阵列来捕捉上述依赖,如图5所图示。进一步地,该工作 根据邻居上方/左边(A和B)分区类型和当前块大小来计算索引数、从阵列中检索对应概率 模型、并且使用所检索的模型用于C分区类型的熵代码化。
[0072] 以下为用于分区类型的基于上下文的熵编码的采样代码:
[0073]检索上下文信息的源代码: static INLINE intpartition_plane_context(MACROBLOCKD *xd, r3LOCK_SIZE_TYPE sb_type) { intbsl = mi_vvidth_log2(sb_type}, bs = 1 ?bsl;
[0074] int above = 0, left = 0, i; intboffset = ini_width_log2(BLOCK_SIZE_SB64X64) - bsl; assert(mi_width_log2(sb_type) == mi_height_log2(sb_t.ype)); assert(bsl>= 0); assert(hotTset>= 0); for (i = 0; i<bs; i++) above j= (xd->above_seg_context[i] & (1 ?bofTsel)); for (i = 0; i<bs; i++)
[0075] left |= (xd->left_seg_conlext[i] & (1 ?boffset)); above = (above >0); left = (left > 0); return (left 2 + above) + bsl * PARTITION_PLOFFSET; }
[0076] 在一些实施方式中,参考递归块分区方法和其在视频压缩中的熵代码化,如参照 图4至图5所描述的,可允许的块大小可以包括各个n Xn像素块,诸如8X8、16X16、32X32、 64 X 64,并且如本文所描述,其中,可以将每个块大小代码化为4个分区类型{NONE,H0RZ, VERT,SPLIT}〇
[0077] 在这一点上,在一些实施方式中,可能的结果可以是方形块或者矩形块。可以跳过 任意一个或者多个分区类型。例如,对于32X32块,最佳过程或者技术可以在编码为一个32 X32块、或者两个32X16子块两者中作出选择,并且因此跳过其它分区类型的测试以使最 佳化过程加速。
[0078] 在一些实施方式中,参照图5,可以经由以下规则将分区类型A和B的组合转化为范 围从〇到3的整数:
[0079] 如果A的分区类型为VERT或者SPLIT,则a = 2;否则,a = 0;
[0080] 如果B的分区类型为H0RZ或者SPLIT,则b = l;否则,b = 0;
[0081 ] 合并这些两个因素产生c = (a+b)。
[0082]根据块大小进一步使该数c偏移:
[0083] 如果块大小为8X8,则偏移量=0;
[0084] 如果块大小为16 X 16,则偏移量=4;
[0085] 如果块大小为32X32,则偏移量=8;
[0086] 如果块大小为64 X 64,则偏移量=12;
[0087] 将可以用于从阵列中检索概率模型的总体索引计算为(c+偏移量)。
[0088] 如本文所描述,基于上下文的熵代码化可以应用于分区信息,其中,用于分区类型 代码化的概率模型以因素中的一个或者多个为条件,所述因素包括当前块大小(例如,64X 64、32\32、16\16、8父8等)、其上方块的分区类型、和其左边块的分区类型。可以认为这些 条件概率模型是后向自适应的,并且可以以每帧为基础来更新这些条件概率模型。该基于 上下文的熵代码化技术可以用于有效地利用空间相关性,其中,在一些示例中,分区类型倾 向于与连续区域保持一致,并且可以用于实现某些性能增益。
[0089] 例如,在一些实施方式中,参照图5,可以认为概率分布依赖于其上方(a)代码化邻 居(例如,A)和其左边(1)代码化邻居(例如,B)的分区类型。进一步地,在一些示例中,假定 上方/左边块分区类型相同,例如64 X 64块的块C的块大小的概率模型(分布)的潜在依赖可 能比8X8块更有可能选择SPLIT。因此,概率模型阵列可以用于捕捉这些潜在依赖,如图5所 不。
[0090] 在一些实施方式中,可以生成一个或者多个概率表以基于其上方邻居块和左边邻 居块的分区类型来为当前块识别概率分布。这样,本公开的各个方面基于邻居块(例如,上 方邻居块和左边邻居块)的分区类型来为当前块的基于上下文的熵代码化提供构建表(例 如,概率表(也可以被称为概率分布表))。
[0091] 在一些实施方式中,默认概率表可以用于在视频序列(其可以被称为视频帧序列) 中的第一帧,并且概率表更新可以应用于基于第一帧的分区类型的概率分布的下一帧(其 可以被称为后续帧)。在一些示例中,图1A和/或图1B的编码器120可以用于生成概率分布 表。
[0092] 图1B是图示出了与图1A所示的计算装置104相关联的示例组件的示意图。如图1B 所示,存储器112可以配置为存储概率表160,并且编码器120可以配置为基于存储在概率表 160中的概率值来以最佳方式对在视频帧中的每个块进行编码。
[0093] 例如,参照图1B和图4的示例,编码器120可以配置为:将图像(例如,视频帧)分为 多个区域,将多个分区类型(例如,垂直、水平、无、拆分)应用于多个区域中的每个区域,并 且基于应用于每个区域的多个分区类型来为每个区域确定最佳率失真代价。进一步地,编 码器120可以配置为:基于应用于每个区域的多个分区类型来为每个区域确定最佳代码化 方案,并且基于为每个区域确定的最佳率失真代价和最佳代码化方案来单独地对每个区域 进行编码。
[0094] 在一些实施方式中,可以以重复方式将该分区技术递归地应用于每个分区类型的 每个区域和子区域以实现最佳率失真代价。率失真环路可以用于在视频压缩中提高视频质 量,并且可以涉及将失真量(视频质量损失)与用于对视频进行编码的数据量(数据率)进行 比较并且确定该失真量。在一些示例中,率失真环路可以用于改善编码,其中,决策可以同 时影响编码视频的文件大小和质量。
[0095] 图6A是示出了根据本公开的各个方面的用于在编码器120处产生概率表的方法 600的流程图。编码器120可以配置为将一个或者多个概率表160存储在存储器112中,包括 将默认概率表存储在计算装置104的存储器112中。
[0096] 在图6A的示例中,图示出了操作602至608作为以相继顺序发生的离散操作。然而, 应该了解,在其它实施方式中,操作602至操作608中的两个或者多个可以以部分或者完全 重叠或者并行的方式、或者以嵌套的或者循环的方式发生,或者可以以与所示的顺序不同 的顺序发生。进一步地,也可以在一些示例实施方式中包括在图6A的示例中可能未被具体 图示出的附加操作,而在其它实施方式中可以省略操作602至操作608中的一个或者多个。 在一些实施方式中,方法600可以包括用于在图1A的系统100中的递归块分区的计算机实施 的方法的过程流程。进一步地,如本文所描述,操作602至608可以提供简化的操作过程流 程,该简化的操作过程流程由计算装置104制定以提供参照图1A所描述的特征和功能。 [0097]在图6A的示例中,在602处,方法600可以包括识别在视频帧序列中的第一帧。例 如,编码器120可以配置为检测新的视频序列、重新设置/重新开始概率计算、并且更新/修 改概率表,包括例如,将概率表重新设置为默认在视频序列的开始(第一帧)。在一些实施方 式中,编码器120可以配置为:当检测到视频序列的第一帧时,改变概率分布数和/或值。 [0098]在604处,方法600可以包括:基于存储在存储器中的概率表来对在视频帧序列中 的第一帧进行编码,其中,概率表包括与分区类型相关联的概率值。例如,编码器120可以配 置为基于存储在存储器中的概率表中的至少一个概率表来对在视频帧序列中的第一帧进 行编码。在一些实施方式中,每个概率表可以包括与一个或者多个分区类型相关联的一个 或者多个概率值。在一些实施方式中,可以递归地对每个帧进行编码以确定最佳代码化决 策,包括以将每个帧分区为较小块大小的方式、每块的预测模式、应用于每个块的变换类型 等。
[0099]在606处,方法600可以包括:基于在视频帧序列中的第一帧的编码来将与分区类 型相关联的概率值修改为更新的概率值。例如,编码器120可以配置为基于在视频帧序列中 的第一帧的编码来将与分区类型相关联的概率值修改/更新为更新的概率值。在一些实施 方式中,可以对每个概率表的概率值进行修改/更新,以使针对在视频序列中的每个帧的代 码化决策最佳化。
[0100] 在608处,方法600可以包括:基于在概率表中所包括的更新的概率值来对在视频 帧序列中的第二帧进行编码。例如,编码器120可以配置为基于在概率表中包括的修改的/ 更新的概率值来对在视频帧序列中的第二帧进行编码。如本文所描述,存储器112可以包括 概率表160,其中,概率表160包括一个或者多个概率值。
[0101] 根据本公开的各个方面,编码器120可以配置为利用基于上下文的熵代码化方法 来分析邻居块,并且选择使代码化决策最佳化分区类型。例如,用于分区类型代码化的概率 模型可以以下列因素中的一个或者多个为条件:当前块大小(例如,64 X64、32X 32、16 X 16、8乂8、4乂4、2乂2等)、上方邻居块的分区类型、以及左边邻居块的分区类型。每个条件概 率模型可以是后向自适应的,并且可以以每帧为基础而被更新。该基于上下文的熵代码化 技术可以用于有效地利用空间相关性,其中,分区类型倾向于与连续区域保持一致,并且可 以用于实现各种性能增益。
[0102] 参照图1A的示例,解码器124可以包括执行各种功能以提供从编码比特流或者压 缩比特流解码的输出视频流的一个或者多个阶段。如本文所描述,根据本公开的各个方面, 可以向用于解码的解码器提供编码比特流以提供解码输出视频流。在一些实施方式中,解 码器124是编码器120的补充,因此,解码器124所使用的解码过程是编码器120所使用的编 码过程的补充,其中,解码器124配置为执行与编码器120所执行的编码过程相反的解码过 程。
[01 03]图7是示出了根据实施方式的概率表700的示例的示意图。如图7所示,概率表700 包括两个不同的块部分:块部分B和块部分A。每个块部分与正在被处理的当前块大小相关 联。例如,概率表700的块部分A用于做出与具有块大小A至块大小B (例如,64 X 64至32 X 32) 的块的拆分有关的决策。块大小A可以被称为正在被处理的当前块大小,并且块大小B可以 被称为目标块大小。概率表700的块部分B用于做出与具有块大小B至例如块大小C(例如,32 X 32至16X16)的块的拆分有关的决策。尽管未示出,也可以包括附加块部分和/或大小(包 括非方形大小)。
[0104]在该示例中,块部分A包括四行三列的概率值。四行由字符P至S描绘,并且列由数 字1至3描绘。因此,在第二行和第二列上包括概率值Q2。
[0105] 行P至S中的每一行与不同类型的邻居分析相关联。作为具体示例,行P可以包括用 于分析均未拆分的上方邻居和左边邻居(对于正在被分析的即时块)的概率值,并且行Q可 以包括用于分析被拆分的上方邻居和未被拆分的左边邻居的概率值。因此,编码器(例如, 图1A所示的编码器120)可以配置为在当前块的分析期间选择概率表700的一行概率值,该 当前块与块邻居(例如,相邻)的块的拆分(或者非拆分)相一致。
[0106] 概率值可以表示可以由熵代码器使用的值。在编码期间,熵代码器可以配置为基 于在概率表700中所包括的概率值来分配比特率。可以由熵代码器将更少的比特数分配给 概率值所表示的相对高的结果(例如,相对高的可能结果、更有可能的结果),并且可以由熵 代码器将更高的比特数分配给概率值所表示的不太可能的结果。
[0107] 在概率表700中的每列与不同类型的分区相关联。例如,概率值P1 (在行P中)可以 表示无分区的概率,概率值P2可以表示垂直拆分的概率,并且概率值P3可以表示水平拆分 的概率。如果没有满足针对与概率值P1至P3相关联的拆分的条件,则分区分析的结果为不 同的拆分(例如,完整的四通拆分)。在一些实施方式中,概率表700可以包括具有100 %概率 并且如果与概率值的前三列(例如,P1至P3)相关联的条件没有得到满足则与最终结果相关 联的第四列。
[0108] 在一些实施方式中,概率值可以具有例如从0到255的范围。较高的概率值可以是 与该概率值相关联的结果的概率。例如,概率值P2可以表示垂直拆分的概率,并且按照从0 到255的比例,概率值P2可以为245。因此,基于概率值P2的垂直拆分的概率非常高。
[0109]在一些实施方式中,可以在对帧序列中的帧进行处理期间对在概率表700中所包 括的概率值进行更新。例如,概率表700可以是默认概率表,该默认概率表可以用于在视频 序列或者帧序列中的初始帧(例如,第一帧)。根据在初始帧中的块拆分结果,可以对在概率 表700中包括的概率值进行修改以对后续帧(例如,第二)进行编码。作为具体示例,概率值 P2可以表示与在块大小A至块大小B的块内的垂直拆分相关联的概率。如果在从块大小A到 块大小B的第一帧内的垂直拆分分布较高,则可以增加概率值P2以处理第二帧的块。另一方 面,如果在从块大小A到块大小B的第一帧内的垂直拆分分布较低,贝lj可以减小概率值P2以 处理第二帧的块。
[0110] 在一些实施方式中,可以存储对在概率表700中包括的概率值中的一个或者多个 的变化作为与在概率表700中包括的默认概率值的差异(残差)。可以存储该差异,并且该差 异可以与正在被处理的块或者帧相关联。因此,在解码期间,解码器(例如,图1A所示的解码 器124)可以结合默认概率值使用该差异。
[0111] 可以利用对每个帧(或者块组)的处理来执行概率值的修改。在一些实施方式中, 默认概率值可以初始地用于在视频帧序列中的第一帧。例如,默认概率值可以用于I帧,并 且可以为在I帧之后被处理的每个后续P帧或者B帧修改(根据默认概率值)概率值。当达到 新的I帧(与视频帧(例如P帧、B帧)序列相关联)时,可以重新建立默认概率值,并且该默认 概率值可以再次用于与新的I帧相关联的帧。
[0112] 以下为具体示例概率表(其可以是默认概率表),可以生成该具体示例概率表以基 于当前块的上方邻居块和左边邻居块的分区类型来为当前块识别概率分布。要注意,正在 被处理的块大小和目标块大小(例如,//8 X 8->4 X 4)是上文提到的表的块部分(其各自包 括4行和3列)。在该示例中,概率值的范围在0和255之间。在一些实施方式中,范围能够是不 同的。
[0113] //8X8-MX4
[0114] {199,122,141},//上方/左边均未拆分
[0115] {147,63,159},//上方被拆分,左边未拆分
[0116] {148,133,118 },//左边被拆分,上方未被拆分
[0117] {121,104,114},//上方/左边均被拆分
[0118] //16X16->8X8
[0119] {174,73,87},//上方/左边均未拆分
[0120] {92,41,83},//上方被拆分,左边未被拆分
[0121] {82,99,50},//左边被拆分,上方未被拆分
[0122] {53,39,39},//上方/左边均被拆分
[0123] //32X32->16X16
[0124] {177,58,59},//上方/左边均未拆分
[0125] {68,26,63},//上方被拆分,左边未被拆分
[0126] {52,79,25},//左边被拆分,上方未被拆分
[0127] {17,14,12},//上方/左边均被拆分
[0128] //64X64->32X32
[0129] {222,34,30},//上方/左边均未拆分
[0130] {72,16,44},//上方被拆分,左边未被拆分
[0131] {58,32,12},//左边被拆分,上方未被拆分
[0132] {10,7,6},//上方/左边均被拆分
[0133] 在该示例中,概率可以分布在0至255的值之间,其中,更高数可以指的是对基于当 前块的当前块大小(例如,64\64、32乂32、16乂16等)、其上方邻居块的分区类型、和其左边 邻居块的分区类型的当前块的可能分区类型的更高概率。在各个示例中,可以将更少的比 特数分配给可能的候选者,并且可以将更多的比特数分配给不太可能的候选者。进一步地, 在一些示例中,可以将生成的表应用于整个帧。
[0134] 根据本公开的各个方面,递归块分区连同基于上下文的熵代码化在维持有效的视 频编解码实施方式的同时允许在使块大小最佳化时的灵活性提高。在各个示例中,该递归 块分区技术可以用于将实际块大小的代码化转化为块分区类型的代码化,并且结合基于上 下文的熵代码化,该技术提供了改进的代码化性能增益。
[0135] 图6B至图6C是根据本公开的各个方面的用于递归块分区的示例方法的过程流程。 具体地,图6B是示出了根据本公开的各个方面的用于递归块分区的示例方法620的过程流 程。
[0136] 在图6B的示例中,示出了操作622至628作为以相继顺序发生的离散操作。然而,应 该了解,在其它实施方式中,操作622至操作628中的两个或者多个可以以部分或者完全重 叠或者并行的方式、或者以嵌套的或者循环的方式发生,或者可以以与所示的顺序不同的 顺序发生。进一步地,也可以在一些示例实施方式中包括在图6B的示例中可能未被具体示 出的附加操作,而在其它实施方式中可以省略操作622至操作628中的一个或者多个。在一 些实施方式中,方法620可以包括用于在图1的系统100中的递归块分区的计算机实施的方 法的过程流程。进一步地,如本文所描述,操作622至628可以提供一种简化的操作过程流 程,该简化的操作过程流程由计算装置104制定以提供参照图1A所描述的特征和功能。
[0137] 在图6B的示例中,在622处,方法620可以包括将图像分为多个区域。在624处,方法 620可以包括将多个分区类型应用于多个区域中的每个区域。在626处,方法620可以包括: 基于应用于多个区域中的每个区域的多个分区类型来为多个区域中的每个区域确定率失 真(例如,率失真代价)。
[0138] 在628处,方法620可以包括:基于应用于多个区域中的每个区域的多个分区类型 来为多个区域中的每个区域确定代码化方案。在630处,方法620可以包括:基于为多个区域 中的每个区域确定的率失真代价和代码化方案来单独地对多个区域中的每个区域进行编 码。
[0139] 在一些实施方式中,第一分区类型可以包括具有尺寸相似的四个子块的拆分分区 类型,第二分区类型可以包括具有两个尺寸相似的、水平布置的两个子块的水平分区类型, 第三分区类型可以包括具有尺寸相似的、垂直布置的两个子块的垂直分区类型,并且第四 分区类型可以包括具有单个块的无分区类型。
[0140] 图6C是示出了根据本公开的各个方面的用于递归块分区的另一示例方法640的过 程流程。
[0141] 在图6C的示例中,图示出了操作642至648作为以相继顺序发生的离散操作。然而, 应该了解,在其它实施方式中,操作642至操作648中的两个或者多个可以以部分或者完全 重叠或者并行的方式、或者以嵌套的或者循环的方式发生,或者可以以与所示的顺序不同 的顺序发生。进一步地,也可以在一些示例实施方式中包括在图6C的示例中可能未被具体 示出的附加操作,而在其它实施方式中可以省略操作642至操作648中的一个或者多个。在 一些实施方式中,方法640可以包括用于在图1的系统100中的递归块分区的计算机实施的 方法的过程流程。进一步地,如本文所描述,操作642至648可以提供简化的操作过程流程, 该简化的操作过程流程由计算装置104制定以提供参照图1A所描述的特征和功能。更进一 步地,操作642至648可以是图6B的操作622至630的延续,以提供简化的操作过程流程,该简 化的操作过程流程由计算装置104制定以提供参照图1A所描述的特征和功能。
[0142] 在图6B的示例中,在642处,方法640可以包括:对于应用于多个区域中的每个区域 的多个分区类型的第一分区类型,将多个区域中的每个区域分为多个子区域。在644处,方 法640可以包括将多个分区类型重新应用于多个子区域中的每个子区域。
[0143] 在646处,方法640可以包括:基于应用于多个子区域中的每个子区域的多个分区 类型来为多个子区域中的每个子区域确定率失真代价。在648处,方法640可以包括:基于应 用于多个子区域中的每个子区域的多个分区类型来为多个子区域中的每个子区域确定代 码化方案。
[0144] 在一些实施方式中,第一分区类型可以包括具有尺寸相似的四个子块的拆分分区 类型,第二分区类型可以包括具有尺寸相似的、水平布置的两个子块的水平分区类型,第三 分区类型可以包括具有尺寸相似的、垂直布置的两个子块的垂直分区类型,并且第四分区 类型可以包括具有单个块的无分区类型。
[0145] 在一些实施方式中,基于为多个区域中的每个区域确定的率失真代价和代码化方 案来单独地对多个区域中的每个区域进行编码可以包括:基于为多个子区域中的每个子区 域确定的率失真代价和代码化方案来单独地对多个子区域中的每个子区域进行编码。
[0146] 在一些实施方式中,为多个区域中的每个区域确定率失真代价可以包括:基于应 用于多个区域中的每个区域的多个分区类型来为多个区域中的每个区域评估多个率失真 代价,以及为多个区域中的每个区域确定最佳率失真代价,该最佳率失真代价选自为多个 区域中的每个区域评估的多个率失真代价。
[0147] 在一些实施方式中,为多个区域中的每个区域确定编码方案可以包括:基于应用 于多个区域中的每个区域的多个分区类型来为多个区域中的每个区域评估多个代码化方 案,以及为多个区域中的每个区域确定最佳代码化方案,该最佳率编码方案选自为多个区 域中的每个区域评估的多个代码化方案。
[0148] 图8是图示出了根据本公开的各个方面的用于递归块分区的另一示例方法800的 过程流程。
[0149] 在图8的示例中,示出了操作802至808作为以相继顺序发生的离散操作。然而,应 该了解,在其它实施方式中,操作802至操作808中的两个或者多个可以以部分或者完全重 叠或者并行的方式、或者以嵌套的或者循环的方式发生,或者可以以与所示的顺序不同的 顺序发生。进一步地,也可以在一些示例实施方式中包括在图8的示例中可能未被具体示出 的附加操作,而在其它实施方式中,可以省略操作802至操作808中的一个或者多个。进一步 地,在一些实施方式中,方法800可以包括用于在图1的系统100中的递归块分区的计算机实 施的方法的过程流程。进一步地,如本文所描述,操作802至808可以提供简化的操作过程流 程,该简化的操作过程流程由计算装置104制定以提供参照图1A所描述的特征和功能。
[0150] 在图8的示例中,在802处,方法800可以包括将视频帧分为多个像素块。在804处, 方法800可以包括将多个分区类型应用于多个像素块中的每个像素块。
[0151] 在806处,方法800可以包括:对于应用于多个像素块中的每个像素块的多个分区 类型的第一分区类型,将第一分区类型的每个像素块分为多个像素子块,并且将多个分区 类型重新应用于多个像素子块中的每个像素子块。在808处,方法800可以包括:基于分别应 用于并且重新应用于每个像素块和每个像素子块的多个分区类型来为每个像素块和每个 像素子块确定率失真代价。
[0152] 在810处,方法800可以包括:基于分别应用于并且重新应用于每个像素块和每个 像素子块的多个分区类型来为每个像素块和每个像素子块确定代码化方案。在812处,方法 800可以包括:基于为每个像素块和每个像素子块确定的率失真代价和代码化方案来单独 地对每个像素块和每个像素子块进行编码。
[0153] 可以用数字电子电路系统,或者用计算机硬件、固件、软件,或者用它们的组合来 实施本文所描述的各种技术的实施方式。实施方式可以实施为计算机程序产品,即,有形地 体现在信息载体中的计算机程序,例如在机器可读存储装置中或者由数据处理设备(例如, 可编程处理器、计算机、或者多个计算机)执行或者控制该数据处理设备的操作的的传播信 号中。可以用包括编译式或者解释型语言的任何形式的编程语言来编写诸如上述计算机程 序的计算机程序,并且可以将该计算机程序部署为包括独立程序或者模块、组件、子例程或 者适合在计算环境中使用的其它单元的任何形式。可以将计算机程序部署为在一个计算机 上或者在位于一个站点处或者分布于多个站点之间并且通过通信网络互相连接的多个计 算机上执行。
[0154] 可以通过执行通过操作输入数据和生成输出来执行功能的计算机程序的一个或 者多个可编程处理器来执行方法步骤。也可以通过专用逻辑电路系统(例如,FPGA(现场可 编程门阵列)或者ASIC(专用集成电路))来执行方法步骤,并且设备也可以实施为专用逻辑 电路系统。
[0155] 适合执行计算机程序的处理器作为示例包括通用微处理器、专用微处理器二者、 以及任何种类的数字计算机的任何一个或者多个处理器。一般而言,处理器将接收来自只 读存储器或者随机存取存储器或者两者的指令和数据。计算机的元件可以包括:用于执行 指令的至少一个处理器;以及用于存储指令和数据的一个或者多个存储装置。一般而言,计 算机也可以包括用于存储数据的一个或者多个大容量存储装置(例如,磁盘、磁光盘、或者 光盘),或者被可操作地耦合以接收来自该大容量存储装置的数据或者将数据传输到该大 容量存储装置或者同时进行两者。适合体现计算机程序指令和数据的信息载体包括所有形 式的非易失性存储器,该所有形式的非易失性存储器作为示例包括半导体存储器装置(例 如,EPROM、EEPR0M、和闪存装置)、磁盘(例如,内置硬盘或者可移动盘)、磁光盘、以及⑶-ROM 和DVD-ROM盘。处理器和存储器可以由专用逻辑电路系统补充或者被合并到该专用逻辑电 路系统中。
[0156]为了提供用户交互,可以在计算机上实施实施方式,该计算机具有:用于向用户显 示信息的显示装置,例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器;用户可以用来向 计算机提供输入的键盘和指示装置,例如,鼠标或者轨迹球。其它类型的装置同样可以用于 提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如,视觉反馈、 听觉反馈、或者触觉反馈;并且可以以任何形式(包括声音输入、语音输入、或者触觉输入) 来接收来自用户的输入。
[0157] 可以在计算系统中实施实施方式,该计算系统包括后端组件(例如,数据服务器), 或者包括中间件组件(例如,应用服务器),或者包括前端组件(例如,具有图形用户界面或 者web浏览器的客户端计算机,用户可以通过该图形用户界面或者该web浏览器来与实施方 式交互);或者包括该后端组件、该中间件组件或者该前端组件的任何组合。组件可以通过 任何形式或者介质的数字数据通信(例如,通信网络)来互连。诸如通信网络的网络的示例 可以包括局域网(LAN)和例如互联网的广域网(WAN)。
[0158] 虽然已经如此处描述那样图示了所描述的实施方式的某些特征,但是本领域的技 术人员现在会想到许多修改、代替、改变及等同物。因此,要理解,随附权利要求旨在涵盖所 有这样的修改和改变使其落入实施例的范围内。
【主权项】
1. 一种存储指令的非暂时性计算机可读存储介质,所述指令在被执行时使得至少一个 处理器执行过程,所述指令包括被配置为进行如下操作的指令: 将图像分为多个区域; 基于概率表将多个分区类型应用于所述多个区域中的每个区域; 基于应用于所述多个区域中的每个区域的所述多个分区类型来为所述多个区域中的 每个区域确定率失真代价; 基于应用于所述多个区域中的每个区域的所述多个分区类型来为所述多个区域中的 每个区域确定代码化方案;以及 基于为所述多个区域中的每个区域确定的率失真代价和代码化方案来单独地对所述 多个区域中的每个区域进行编码。2. 根据权利要求1所述的计算机可读存储介质,其中,所述图像包括视频帧,并且所述 多个区域包括所述多个区域的网格。3. 根据权利要求1和2中任一项所述的计算机可读存储介质,其中,所述多个区域中的 每个区域包括η X η像素块。4. 根据权利要求3所述的计算机可读存储介质,其中,所述ηΧη像素块包括以下至少一 个:64 X 64像素块、32 X 32像素块、16 X 16像素块、8 X 8像素块、4 X 4像素块、和2 X 2像素块。5. 根据权利要求1至4中任一项所述的计算机可读存储介质,其中,所述概率表包括:与 所述多个分区类型中的第一分区类型相关联的概率值、和与所述多个分区类型中的第二分 区类型相关联的概率值。6. 根据权利要求1至5中任一项所述的计算机可读存储介质,其中,所述多个分区类型 包括: 第一分区类型,所述第一分区类型包括具有尺寸相似的四个子块的拆分分区类型, 第二分区类型,所述第二分区类型包括具有尺寸相似的、水平布置的两个子块的水平 分区类型, 第三分区类型,所述第三分区类型包括具有尺寸相似的、垂直布置的两个子块的垂直 分区类型,以及 第四分区类型,所述第四分区包括具有单个块的无分区类型。7. 根据权利要求1至6中任一项所述的计算机可读存储介质,其中,对于应用于所述多 个区域中的每个区域的所述多个分区类型的第一分区类型,所述指令包括被配置为进行如 下操作的指令: 将所述多个区域中的每个区域分为多个子区域; 将所述多个分区类型重新应用于所述多个子区域中的每个子区域; 基于应用于所述多个子区域中的每个子区域的所述多个分区类型来为所述多个子区 域中的每个子区域确定率失真代价;以及 基于应用于所述多个子区域中的每个子区域的所述多个分区类型来为所述多个子区 域中的每个子区域确定代码化方案。8. 根据权利要求1至7中任一项所述的计算机可读存储介质,其中,被配置为基于为所 述多个区域中的每个区域确定的率失真代价和代码化方案来单独地对所述多个区域中的 每个区域进行编码的所述指令包括配置为进行如下操作的指令: 基于为所述多个子区域中的每个子区域确定的率失真代价和代码化方案来单独地对 所述多个子区域中的每个子区域进行编码。9. 根据权利要求1至8中任一项所述的计算机可读存储介质,其中,被配置成为所述多 个区域中的每个区域确定率失真代价的所述指令包括被配置成进行如下操作的指令: 基于应用于所述多个区域中的每个区域的所述多个分区类型来为所述多个区域中的 每个区域评估多个率失真代价;以及 为所述多个区域中的每个区域确定率失真代价,所述率失真代价选自为所述多个区域 中的每个区域评估的所述多个率失真代价。10. 根据权利要求1至9中任一项所述的计算机可读存储介质,其中,被配置成单独地对 所述多个区域中的每个区域进行编码的所述指令包括被配置为进行如下操作的指令: 基于为所述多个区域中的每个区域确定的最佳率失真代价来单独地对所述多个区域 中的每个区域进行编码。11. 根据权利要求1至10中任一项所述的计算机可读存储介质,其中,被配置成为所述 多个区域中的每个区域确定代码化方案的所述指令包括被配置成进行如下操作的指令: 基于应用于所述多个区域中的每个区域的所述多个分区类型来为所述多个区域中的 每个区域评估多个代码化方案;以及 为所述多个区域中的每个区域确定最佳代码化方案,所述最佳代码化方案选自为所述 多个区域中的每个区域评估的所述多个代码化方案。12. 根据权利要求1至11中任一项所述的计算机可读存储介质,其中,被配置成单独地 对所述多个区域中的每个区域进行编码的所述指令包括被配置成进行如下操作的指令: 基于为所述多个区域中的每个区域确定的最佳代码化方案来单独地对所述多个区域 中的每个区域进行编码。13. 根据权利要求1至12中任一项所述的计算机可读存储介质,其中,所述代码化方案 包括基于上下文的熵代码化方案,当为所述多个区域中的每个区域确定代码化方案时,所 述基于上下文的熵代码化方案考虑每个区域的大小、应用于在每个区域上方的第一邻居区 域和在每个区域左边的第二邻居区域的分区类型。14. 根据权利要求1至13中任一项所述的计算机可读存储介质,其中,被配置成单独地 对所述多个区域中的每个区域进行编码的所述指令包括被配置成进行如下操作的指令: 基于为所述多个区域中的每个区域确定的率失真代价和代码化方案,以光栅顺序将每 个区域单独地编码为比特流。15. -种存储指令的非暂时性计算机可读存储介质,所述指令被执行时使得至少一个 处理器进行过程,所述指令包括被配置成进行如下操作的指令: 将视频帧分为多个像素块; 基于概率表将多个分区类型应用于所述多个像素块中的每个像素块; 对于应用于所述多个像素块中的每个像素块的所述多个分区类型的第一分区类型,将 所述第一分区类型的每个像素块分为多个像素子块,并且将所述多个分区类型重新应用于 所述多个像素子块中的每个像素子块; 基于分别应用于并且重新应用于每个像素块和每个像素子块的所述多个分区类型来 为每个像素块和每个像素子块确定率失真代价; 基于分别应用于并且重新应用于每个像素块和每个像素子块的所述多个分区类型来 为每个像素块和每个像素子块确定代码化方案;以及 基于为每个像素块和每个像素子块确定的率失真代价和代码化方案来单独地对每个 像素块和每个像素子块进行编码。16. 根据权利要求15所述的计算机可读存储介质,其中: 每个像素块包括η X η像素块,以及 每个η X η像素块包括以下至少一个:64 X 64像素块、32 X 32像素块、16 X 16像素块、8 X 8像素块、4 X 4像素块、和2 X 2像素块。17. 根据权利要求15和16所述的计算机可读存储介质,其中: 所述多个分区类型的所述第一分区类型包括具有尺寸相似的四个子块的拆分分区类 型, 第二分区类型包括具有尺寸相似的、水平布置的两个子块的水平分区类型, 第三分区类型包括具有尺寸相似的、垂直布置的两个子块的垂直分区类型,以及 第四分区类型包括具有单个块的无分区类型。18. 根据权利要求15至17中任一项所述的计算机可读存储介质,其中,所述代码化方案 包括基于上下文的熵代码化方案,当为所述多个像素块中的每个像素块确定代码化方案 时,所述基于上下文的熵代码化方案考虑每个像素块的大小、应用于在每个像素块上面的 第一邻居区域和在每个像素块左边的第二邻居区域的分区类型。19. 一种系统,包括: 至少一个处理器和存储器; 至少一个处理器被配置成: 将帧分为多个区域; 将多个分区类型应用于所述多个区域中的每个区域; 对于应用于所述多个区域中的每个区域的所述多个分区类型中的至少一个分区类型, 基于概率表将该至少一个分区类型的每个区域分为多个子区域,并且将所述多个分区类型 重新应用于该多个子区域中的每个子区域; 基于分别应用于并且重新应用于每个区域和每个子区域的所述多个分区类型来为每 个区域和每个子区域确定率失真代价; 基于分别应用于并且重新应用于每个区域和每个子区域的所述多个分区类型来为每 个区域和每个子区域确定代码化方案;以及 基于为每个区域和每个子区域确定的所述率失真代价和所述代码化方案来单独地对 每个区域和每个子区域进行编码。20. 根据权利要求19的系统,其中,所述帧为第一帧,所述概率表包括与该至少一个分 区类型相关联的概率值, 所述至少一个处理器被配置成基于与所述第一帧相关联的所述处理来更新用于处理 第二帧的所述概率值。21. 根据权利要求29和20中任一项所述的系统,其中,所述帧为在视频帧序列中的第一 帧,所述概率表包括与该至少一个分区类型相关联的默认概率值。22. -种存储指令的非暂时性计算机可读存储介质,所述指令在被执行时致使至少一 个处理器进行过程,所述指令包括被配置成进行如下操作的指令: 识别在视频帧序列中的第一帧; 基于存储在存储器中的概率表来对在所述视频帧序列中的所述第一帧进行编码,所述 概率表包括与分区类型相关联的概率值; 基于对所述视频帧序列中的所述第一帧的所述编码来将与所述分区类型相关联的所 述概率值修改为更新的概率值;以及 基于在所述概率表中包括的所述更新的概率值来对在视频帧序列中的第二帧进行编 码。23. 根据权利要求22所述的计算机可读存储介质,其中,对所述第一帧的所述编码包括 烟编码。24. 根据权利要求22和23中任一项所述的计算机可读存储介质,其中,所述指令进一步 包括进行以下操作的指令: 计算与所述第一帧相关联的所述分区类型的概率分布,并且基于所述分区类型的概率 分布来修改所述概率值。25. 根据权利要求22至24中任一项所述的计算机可读存储介质,其中,基于所述概率值 来分配与熵编码器相关联的比特率。26. 根据权利要求22至25中任一项所述的计算机可读存储介质,其中,所述概率表包括 与从第一块大小到第二块大小的分区相关联的第一块部分,并且所述概率表包括与从所述 第二块大小到第三块大小的分区相关联的第二块部分。
【文档编号】H04N19/176GK105960803SQ201480074562
【公开日】2016年9月21日
【申请日】2014年12月26日
【发明人】韩敬宁, 罗纳德·塞巴斯蒂安·布特杰
【申请人】谷歌公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1