用于对系数组中的最后一个非零变换系数的位置数据进行编码的制作方法

文档序号:7814855阅读:571来源:国知局
用于对系数组中的最后一个非零变换系数的位置数据进行编码的制作方法
【专利摘要】描述了用于视频编码的方法和设备。当对变换块中的组扫描顺序中的最后一个组之前的非零系数组(CG)进行编码时,基于(a)用于对块进行编码的帧内预测模式和(b)与该CG相邻的至少一个系数组中的至少一个修改表示该CG中的扫描顺序中的最后一个非零变换系数的真实(x,y)-位置的数据进行修改,以提高编码效率。在对由此编码的CG进行解码时,解开修改以得到真实(x,y)-位置。
【专利说明】用于对系数组中的最后一个非零变换系数的位置数据进行编码
[0001]版权通知
[0002]本文件的一部分公开内容和随附材料包含了要求版权的材料。当该专利文件或专利公开内容的传真复制出现在美国专利商标局的文件或记录中时,版权所有者不反对任何人对该专利文件或专利公开内容的传真复制,但是保留其他所有无论什么情况下的版权权利。

【技术领域】
[0003]本公开总体上涉及数据压缩,更具体地涉及对用于视频编码和解码的方法和设备的改进。

【背景技术】
[0004]在多种背景下出现数据压缩。其在通信和计算机联网中经常用于高效地存储、发送、和再现信息。其在图像、音频和视频的编码中具有特别的应用。由于每个视频帧所要求的大量数据以及编码和解码经常需要发生的速度,视频向数据压缩提出了重大的挑战。
[0005]音频和视频译码标准(AVS)工作组规定了在中国使用的音频译码、视频译码、和传输协议。为了本文件的目的,AVS指代由AVS工作组定义的第一版视频译码规范,而AVS2指代由AVS工作组当前正在开发的第二版视频译码规范。如本文所使用的,术语“译码(coding) ” 包含编码(encoding)和解码(decoding)。
[0006]包括AVS和AVS2在内的很多视频译码标准使用基于块的译码过程。在这些过程中,将图像或帧分为块,通常是4x4或8x8 (然而在一些情况下可以使用非正方形的块),且将块变换为系数,并进行量化和熵编码。在很多情况下,被变换的数据不是实际的像素数据,而是在预测操作之后的残余数据。预测可以是帧内预测(即在帧/图像内的块到块)或帧间预测(i,在帧之间(也被称为运动预测))。
[0007]为了压缩数据,量化变换系数的译码被设计为利用变换特性的优点来改进压缩。在AVS的情况下,使用四部序列对系数进行译码:平(level)、跑(run)、符号(sign)、块结束(EOB)标志。译码是从变换块中按锯齿(zig-zag)扫描顺序的最后一个非零系数开始沿反锯齿方向的(因此,要求EOB标志)。
[0008]使用一元二进制化将“平减一”(level-minus-one)和“跑”数据进行二进制化,然后使用基于上下文的熵译码对二进制值(bin)进行编码。AVS针对变换系数数据具体地使用算术译码。
[0009]在AVS的现有译码方案中存在一些限制。例如,将现有AVS译码方案直接扩展到更大的块大小可能不是有效率的。此外,在预测之后对残余块的译码不使用诸如帧内预测信息之类的补充信息。

【专利附图】

【附图说明】
[0010]现在将通过示例来参考附图,复古示出了本公开的样本实施例,且在附图中:
[0011]图1a以框图形式示出了用于对视频编码的已知编码器;
[0012]图1b以框图形式示出了根据本公开的用于对视频编码的编码器;
[0013]图2a示出了将帧内预测模式分为无交集的三个类的已知划分;
[0014]图2b示出了根据本公开将帧内预测模式分为无交集的三个类的划分;
[0015]图3a示出了用于对残余块编码的已知方法的流程图;
[0016]图3b示出了根据本公开并入了块转置的用于对残余块编码的方法的流程图;
[0017]图3c示出了图3b所示方法的一个实施例的逻辑流程的流程图;
[0018]图4a示出了对量化变换系数的样本8x8块应用全块转置;
[0019]图4b示出了对与图4a —样的量化变换系数的样本8x8块应用部分块转置;
[0020]图5a以框图形式示出了用于对视频解码的已知解码器;
[0021]图5b以框图形式示出了根据本公开的并入了块转置的用于对视频解码的解码器;
[0022]图6a示出了用于对残余块解码的已知方法的流程图;
[0023]图6b示出了根据本公开的用于对残余块解码的方法的流程图;
[0024]图6c示出了图6b所示方法的一个实施例的逻辑流程的流程图;
[0025]图7示出了将系数组的变换系数分为无交集的三个变换系数区域的三种不同方式;
[0026]图8a示出了在不使用块转置的情况下用于对残余块进行模式相关的平跑(level-run)编码的已知方法的流程图;
[0027]图Sb示出了根据本公开的方法对图8a所示的方法的一个步骤详细说明的流程图,此外该流程图适于说明从图7所示的那些划分中对划分的选择;
[0028]图Sc示出了对根据图Sb所示方法所选择的划分的使用进行详细说明的流程图;
[0029]图9a示出了在帧内预测模式处于预定类中的情况下使用块转置对残余块进行模式相关编码的方法的流程图;
[0030]图9b示出了对图8a所示方法的一个步骤进行详细说明的流程图,其类似于图Sb的流程图,但是适应对块转置的任何使用,此外适于说明从图7所示的那些划分中对划分的选择;
[0031]图9c示出了对根据图9b所示的方法所选择的划分的使用进行详细说明的流程图,其在水平类中的帧内预测模式的具体情况下;
[0032]图1Oa示出了被分为系数组的具有大小16x16的样本块,并示出了块内的系数组的锯齿组扫描顺序;
[0033]图1Ob示出了与图1Oa所示的样本块相对应的系数组标志块,并示出了按块内系数组的组扫描顺序的最后一个非零系数组的位置;
[0034]图1Oc更详细地示出了与图1Oa所示相同的样本块,其示出了(a) —个特定系数组内的变换系数的扫描顺序和(b)两个其他系数组的最后一个非零系数(按扫描顺序);
[0035]图1la示出了与图1Oa所示相同的样本块,以及将块的系数组分为无交集的四个系数组区域的方式;
[0036]图1lb示出了与图1Oa所示相同的样本块,以及将块的系数组分为无交集的三个系数组区域的方式;
[0037]图12示出了对图1lb所示的划分的使用进行详细说明的流程图;
[0038]图13示出了对按当前正被编码的系数组的扫描顺序的最后一个非零系数的(X,y)位置的经修改表示进行编码的方法的流程图;
[0039]图13a示出了图13所示方法的一个步骤的一个实施例的流程图,该实施例基于帧内预测模式所属的类来修改(X,y)位置;
[0040]图13b示出了图13所示方法的一个步骤的另一实施例的流程图,该实施例基于当前系数组的至少一个相邻系数组来修改(X,y)位置;
[0041]图13c示出了图13所示方法的一个步骤的又一实施例的流程图,该实施例基于帧内预测模式所属的类以及基于当前系数组的至少一个相邻系数组来修改(x,y)位置;
[0042]图14示出了用于针对当前系数组的、对按该系数组的扫描顺序的最后一个非零系数的真实(x,y)位置的编码表示进行解码并转换该表示以获得真实(x,y)位置的方法的流程图;以及
[0043]图15示出了根据本公开的并入了解码器和编码器的设备的示例实施例的简化框图;
[0044]以及其中不同附图中使用的相似附图标记用于表示相似的特征。

【具体实施方式】
[0045]本公开描述了用于对残余视频数据进行编码和解码的方法以及编码器/解码器。
[0046]在第一方面中,本公开描述了用于使用视频解码器根据编码视频的比特流中的残余数据的编码块重构残余数据的当前块的方法,所述当前块被划分为系数组,每一个系数组包括变换系数。所述方法包括:针对当前系数组,所述当前系数组是在所述当前块的所述系数组的组扫描顺序中的所述最后一个非零系数组之前的非零系数组:对所述当前系数组中表示所述当前系数组中的所述变换系数的扫描顺序中的所述最后一个非零变换系数的真实(X,y)_位置的坐标(X,Y)进行解码;以及向所述坐标(X,Y)应用非恒等修改以计算所述最后一个非零变换系数的所述真实(x,y)_位置,其中所述修改基于以下至少一项:在产生所述编码块时使用的帧内预测模式;以及与所述当前系数组相邻的至少一个系数组。
[0047]在另一方面,本公开公开了一种用于使用视频编码器对视频进行编码的方法,所述视频包括划分为块的图片,将针对所述块的残余数据频谱变换为变换块,每一个变换块被进一步划分为系数组。所述方法包括:针对当前系数组,所述当前系数组是在所述当前块的所述系数组的组扫描顺序中的所述最后一个非零系数组之前的非零系数组:获得所述当前系数组中所述系数组中的变换系数的扫描顺序中的最后一个非零变换系数的U,y)_位置(X,Y);基于以下至少一项使用非恒等修改将所述(x,y)_位置(X,Y)转换为修改的(X,y)_位置(X’,Y’):在产生所述变换块时使用的帧内预测模式;以及与所述当前系数组相邻的至少一个系数组;以及使用上下文模型对所述修改的U,y)_位置(X’,Y’ )进行二进制化和熵编码。
[0048]在另一方面中,本公开描述了被配置为实现这种用于编码和解码的方法的编码器和解码器。
[0049]在又一方面中,本公开描述了存储处理器可执行程序指令的非瞬时处理器可读介质,该处理器可执行程序指令在执行时将处理器配置为执行所述用于编码和解码的方法。
[0050]本领域技术人员根据对样本实施例的以下描述的评述,结合附图,将理解本公开的其他方面和特征。
[0051]在随后的描述中,参考用于视频译码的AVS标准和/或开发中的AVS2标准来描述一些示例实施例。本领域普通技术人员将理解:本公开不限于AVS或AVS2,而是可以适用于其他视频编码/解码标准,包括:将来可能的标准、3D和多视图译码标准、可扩缩视频译码标准、以及可重配置视频译码标准。
[0052]在随后的描述中,当提到视频或图像时,术语帧、图片、切片(slice)、分片(tile)和矩形切片组可以在某种程度上互换使用。本领域技术人员将意识到:在AVS标准的情况下,帧可以包含一个或多个切片。在其他视频译码标准中,可以使用其他术语。还将意识到:可以逐帧来执行特定编码/解码操作,一些是逐切片执行的,一些是逐图片执行的,一些是逐分片执行的,且一些是逐矩形切片组执行的,取决于适用的图像或视频译码标准的具体要求或术语。在任何具体实施例中,适用的图像或视频译码标准可以确定以下描述的操作是否是针对帧和/或切片和/或图片和/或分片和/或矩形切片组,视具体情况而定。因此,本领域普通技术人员根据本公开将理解本文描述的具体操作或过程以及对帧、切片、图片、分片、矩形切片组的具体引用适用于帧、切片、图片、分片、还是矩形切片组,或者对于给定实施例适用于它们中的一些或全部。如根据以下描述而变得显而易见的,这对于变换单位、译码单位、译码单位组等也成立。
[0053]在一些场景下,可以将帧分为两个区域,例如一个用于屏幕内容且另一个用于自然视频。有时,这可以被称为分屏。类似地,在多视图编解码中,可以将一个视图用于屏幕内容且将另一个视图用于自然视频。备选地,比特流可以包含至少两个子流,一个子流采用变换跳过模式或无损模式,同时另一个将不采用变换跳过模式或无损模式。在这些示例情形的任一情形中,将理解:可以在对视图/区域/流中使用变换跳过、具有平坦量化的变换跳过、或跳过变换和量化步骤的一个视图/区域/流进行编码/解码时,应用系数重新排序,而另一个区域/视图/流可能未对其编码/解码应用系数重新排序。可以在使用或不使用变换跳过的情况下,采用本公开中描述的创新。此外,如本文所使用的术语“变换系数”和“变换块”意在指代处于编码/解码中特定阶段的其系数和块,其中,如果频谱变换尚未被跳过,其系数和块将反映对频谱变换的应用。从而,该术语预期包含曾应用频谱变换的一个特殊情况,恒等(即,什么也不做)函数,而不是标准频谱变换的情况。这是因为本文描述的创新不依赖于对频谱变换的应用。
[0054]在可扩缩视频译码的情况下,下文公开的任何实施例可以应用于基础层编码/解码、增强层编码/解码、或这二者。在3D或多视图视频译码的情况下,可以将任何前述实施例应用于以下各项之一:视图编码/解码、另一视图编码/解码、或这二者/全部视图。
[0055]首先参考图1a和3a。图1a以框图形式示出了用于对视频进行编码的传统编码器10A0图3a示出了用于对残余数据的块进行编码的对应传统方法300A的流程图,其省略了在本文所述创新中未涉及的某些前置编码步骤。
[0056]编码器100A接收视频源101,并最终产生编码比特流199。编码器100A可以被配置为根据多个视频压缩标准来工作。例如,编码器100A可以是符合AVS或AVS2的;后者是本公开中特别关注的标准,但是本文所述创新也可以应用于其他标准。
[0057]视频源101包括帧序列,每个帧对应于不同的时间点。其一次处理一个帧或切片。尽管以更精细的粒度级别来执行大量的对一个帧/切片的处理;将帧/切片分为更小的块,且以循环方式逐块执行处理。块可以是译码单位、宏块、或子块。
[0058]如本领域中众所周知的,帧可以是具有类型1、P、或B。译码模式选择器160确定正在被编码的当前帧具有类型1、P还是B,以及确定帧内的具体译码单位(例如,宏块、译码单位等)是帧间译码还是帧内译码。
[0059]两类“帧间译码”巾贞-类型P和类型B-利用了时间预测,其基于当前帧与不同时间点相对应的之前处理的帧的差异。该类型预测(其与本公开无关)利用了编码器100A中的反馈环路。该环路开始于解量化器130和反频谱变换135,它们(如图5A中传统解码器500A的对应解量化器520和反频谱变换525)对频谱变换110和量化器115 (下面描述)大致进行逆转,即,它们重构类与原始残余数据相类似(而不是一样,这是由步骤320的有损性质导致的)的残余数据。解块处理器145 (如解码器500A的对应解块处理器540)可以执行滤波,以移除块边界上的伪像和/或执行在解码过程期间将进行的其他平滑化处理。帧存储器150从而存储了 “参考”帧以供运动预测器155使用,该“参考”帧是由解码器500A对其照原样进行重构和解块的。
[0060]类型I帧(“帧内译码”帧)是在不参考其他帧的情况下编码的,且因此其不能采用时间预测。然而,其确实采用了帧内的预测;换言之,帧的一部分是基于其与帧的另一部分的差异来编码的。
[0061]帧内预测(本公开中所关注的预测类型)是由空间预测器105根据图3a的步骤310来执行的。具体地,空间预测器105将当前块的数据与针对当前帧的之前处理过的块内的附近像素的数据进行比较,并根据针对特定空间预测模式的预测算法来生成该块的残余数据。在AVS和AVS2标准中,存在例如33个这种模式,稍后将参考图2a和2b来讨论他们。在一些实施例中,可以将速率失真优化用于选择最佳模式。
[0062]然后,在图3a的步骤320,频谱变换110对残余数据进行频谱变换,且量化器115对频谱变换的输出进行量化。尽管图1a将频谱变换110和量化器115示出为编码器100A中的不同组件,如本领域中所理解的,这两个操作可以要么作为两个单独的数学运算来执行,要么作为单一运算来执行;从而,可以用实现了相同合并结果的单一组件来替代所示的这两个组件。此外,在一些实施例中,可以采用变换跳过;在这种情况下,不采用频谱变换110,且步骤320仅在空间域中对残余数据进行量化。
[0063]向频谱变换110输入的残余数据是空间域中的数据;这意味着该数据对应于(可能不是以一对一的方式)按几何行和列排列的像素。频谱变换110将该空间域数据转换为变换域中的数据;本文中称为变换系数的该输出数据包含与像素相关的频率信息,根据该频率信息可以重构像素。在很多实施例中,频谱变换I1应用离散余弦变换(DCT)。尽管AVS和AVS2标准规定使用DCT,在视频译码协议中可以使用离散正弦变换或其他变换,且因此它们预期在本公开的范围中。取决于宏块或译码单位的大小,空间变换110逐译码单位、逐宏块、或逐子块进行操作。在AVS和AVS2标准中,典型的16x16宏块例如包含四个8x8变换块,且对8x8块执行DCT过程。在一些视频译码协议中,变换块可以是4x4,意味着每个宏块中存在十六个变换块。在另一些其他情况下,变换块可以是其他大小。在一些情况下,16x16宏块可以包括非重叠的4x4和8x8变换块的组合。
[0064]继续参考图1a和3a,熵编码器125基于与要压缩的各种符号的频率相关的统计数据对符号进行无损压缩;压缩的符号不仅包括作为变换量化系数的直接反映的数据,还包括与当前块相关的其它数据,该其它数据包括对与块相关的参数的指示(例如,在对块进行编码时使用的帧内预测模式)和/或在编码过程中暗示了(且在解码过程中推断出)多个零值的意义上允许“跳过”某些零值数据的标志,稍后将对其进行解释。
[0065]直接基于变换量化系数的数据也涉及对零值数据的这种跳过。具体地,在图3a的步骤350,由于零值系数普遍,导致变换量化系数是平跑编码的。这涉及生成平跑有序对,每个平跑有序对包含(a)非零系数的量值,后接(b)沿反扫描顺序在非零系数之后的连续零值系数的数目。
[0066]在步骤360,表示变换量化系数和与当前块相关的其他数据的符号都被二进制化和熵编码。二进制化包括将符号转换为某种二进制形式,例如,一元记号(unary notat1n)或其某种变型。AVS和AVS2标准规定了熵编码可以是算术译码,但是在其他视频译码协议中,可以使用其他类型的熵译码(例如,可变长度译码)(且因此其在本公开的范围内)。
[0067]图2a和2b均示出了在视频译码中使用的一类“有角”的三十个帧内预测模式,以及林列出了另一类“无角”的三个帧内预测模式,且还示出了如何将全部这些模式分类为无交集的三个类,以在图3b的新颖方法300B中使用。每个有角帧内预测模式由表示从正在译码的当前块到在帧内预测中使用的附近像素的空间位移的角度的箭头来示出。箭头的长度是无关紧要的;相对地,每个箭头头部被示出为到达特定圆-且对应模式被称为属于对应“区以辅助示出从正y轴开始测量的空间位移的角度,作为某个基本角度的倍数。属于区O、特征400的模式O和I具有作为90度的倍数的角度。属于区1、特征410的模式4、5和6具有作为45度的倍数的角度,但是不属于区O。属于区2、特征420的模式7到16具有作为15度的倍数的角度,但是不属于区O或I。属于区3、特征430的模式17到31具有作为7.5度的倍数的角度,但是不属于区O、I或2。在图2a和2b中仅列出了无角帧内预测模式-DC模式(在AVS2标准中指定为模式2)、平面模式(3)、和双线性模式(32),因为它们不体现“方向”,且因此不能以向量的方式来有意义地绘出;不仅出于完整性(相对于AVS2标准)的目的将它们列出,还由于它们被包括在接下来将解释的分类方案中。
[0068]对帧内预测模式的改进分类
[0069]关于图2a和2b,重要的不是区,而是对分类200A和200B的分别绘出。每个分类将整个帧内预测模式O值32的聚集划分为无交集的三个类;确定给定模式不在两类中任何一类意味着其必须在剩余类中。在图2a所示的分类200A中,垂直类210A包含由粗的实心箭头示出的模式0、9、10、11、12、16、21、22、23和24 ;水平类220A包含由细的实心箭头示出的模式1、7、8、13、14、15、17、18、27、28和29 ;以及对角类230A包含剩余模式,即由虚线箭头示出的有角模式4、5、6、19、20、25、26、30和31,以及仅在图2a中列出的无角模式2、3和32。在图2b所示的分类200B中,垂直类210B包含由粗的实心箭头示出的模式0、10、11、21、22、23和24 ;水平类220B包含由细的实心箭头示出的模式1、7、14、17、18、27、28和29 ;以及对角类230B包含剩余模式,即由虚线箭头示出的有角模式4、5、6、8、9、12、13、15、16、
19、20、25、26、30和31,以及无角模式2、3和32。
[0070]这些分类可以用多种方式来改进视频译码。如在共同待审的申请PCT/CA2013/050020中之前公开的,这些类可以用于模式相关上下文涉及。当用于对块编码的帧内预测模式在特定一类中时,其易于具有与该类对应的系数的独特分布。例如针对平跑对的熵译码,当对上下文的确定基于模式所属的类时,该确定将是更恰当的。当该确定更恰当时,最终的译码将变得更有效率。图2a的分类200A之前被公开为用于在这些独特分布之间进行区分的方式。
[0071]现在已经意识到:有可能更有效率地来划分帧内预测模式。分类200B的经修订的垂直类210B和水平类220B比分类200A的对应类210A和220A“窄”,即经修订的类均包括更少的模式,跨更小的角度范围。包括更少模式在内的类对应于甚至更独特的分布。然而,本发明人还意识到:如果类过小,则将没有充足的数据来训练上下文以达到稳定状态,且译码性能将更差;这被称为上下文稀释问题。每个经修订的类210B和220B在分布独特性和状态稳定性之间取得平衡。最终结果是使用新颖的分类200B比之前公开的分类200A取得更好的译码性能;这对于之前公开的模式相关上下文涉及成立,对于稍后将描述的由图3b所示的新颖方法300B所提供的附加译码改进也成立。
[0072]系数的模式相关块转置
[0073]为了解释相对于视频编码领域的当前状态的该改进,现在来回顾关于图1a的编码器100A稍早讨论的图3a的传统方法300A。在对视频的逐块编码期间,在步骤310,根据由译码模式选择器160选择的帧内预测模式(在未示出为方法300A的一部分的传统步骤中)来生成当前块的残余数据。在步骤320,对残余数据的块进行频谱变换和量化,以获得量化变换块。尽管将步骤320示出为单一步骤,本领域已知的是可以通过单一数学运算或通过两个单独运算的序列来实现频谱变换和量化的最终效果。在AVS2标准中,所采用的频谱变换是离散余弦变换(DCT),但是在视频译码中可以使用其他变换(例如,离散正弦变换)(且因此,在本公开的范围内)。在步骤350,对量化变换系数进行平跑编码。这涉及按反锯齿扫描顺序扫描量化变换系数并生成包含(a) “平即非零系数的量值和(b) “跑即(按反锯齿顺序)在非零系数之后在下一个非零系数或CG末端(如果上一个“跑” 一直到CG的左上系数)之前的连续零值系数的数目在内的对。在步骤360,对平跑对进行二进制化(例如,使用一元译码或其某种变型)和熵编码。在AVS2标准中,熵译码是算数译码,但是在视频译码中可以使用其他类型的熵译码(例如,可变长度译码)(且因此,在本公开的范围内)。
[0074]现在将意识到:在视频压缩中的帧内预测和变换过程之后,当所使用的帧内预测模式在垂直类中时,非零变换系数易于接近CG的顶部。类似地,当使用的帧内预测模式是水平类时,非零变换系数易于接近CG的左侧。该发现暗示了在水平预测之后的变换系数块如果被转置,将具有与在垂直预测之后的变换系数块的类似统计数据。(此处该统计数据主要指代在CG中连续非零系数之间的零值系数的“跑”,即数目,其确定了最后一个非零CG的位置和CG中最后一个非零系数的位置)。由于转置水平模式块具有与未转置垂直模式块的系数分布相类似的系数分布,可以通过编程命令它们“共享上下文”(如下文详细描述),来“哄骗”编码器100B将前者视为其是后者一样。这具有降低上下文总数的效果。降低需要存储的上下文的数目进而降低了熵译码的复杂度。
[0075]在图1b和3b中示出了该发现的技术应用。图1b以框图形式示出了编码器100B,其与图1a的编码器100A的不同之处在与:在量化器115和熵编码器125之间插入了块转置120。在虚线轮廓中指示了:尽管其位置固定,不需要在所有情况下对其进行使用。事实上,对变换系数块进行转置的点是针对第一特定类(例如,水平类)中帧内预测模式的转置,且针对第二特定类(例如,垂直类)中帧内预测模式不转置,使得经由第一类中模式的帧内预测之后的变换系数块一旦进行转置,将具有与在经由第二类中模式的帧内预测之后的变换系数块类似的统计数据。从而,在实际中,执行测试(图1b中未示出,但是在图3b的步骤330中指示,接下来描述)以确定是否应当调用块转置120的功能。
[0076]图3b示出了如下文中详细描述的用于对残余块进行编码的新颖方法300B的流程图。通过添加步骤330和340来将其与图3a所示的传统方法300A加以区分。在步骤330,执行测试以确定空间预测器105要使用的帧内预测模式(与译码模式选择器160所确定的一样)是否在预定类中。为了更清楚,该测试不仅确定模式是否在某个预定类中;这种测试将是不必要的,因为每个模式严格地在三个类之一中,这均是根据达成一致的编码-解码标准(其可被写为仅规定了解码协议,而编码协议是隐式的)的可互操作性要求来“预定的”。该测试确定模式是否在预定的特定类中,该特定类是量化变换块被转置所针对的唯一类。如下面解释的,水平类是作为该特定、独特的预定类的最佳选择。在步骤340,在特定预定类的情况下,至少一部分量化变换块被如图4a (针对全块转置)和4b (针对部分块转置)所示转置。为了完成欺骗-“哄骗”编码器100B将一种模式类的转置块视为好像其是另一类的未转置块一样-应当更新上下文索引;否则,解码将比在根据更新的上下文索引来导出上下文的情况下低效,且将不实现块变换的全部优点。
[0077]例如,假定对于某些实施例,触发块转置的特定预定类是水平类。还假定编码器100B 一般将具有值 INTRA_PRED_VER、INTRA_PRED_H0R、或 INTRA_PRED_DC_DIAG (分别等于例如0、1和2的常数)的上下文索引intraModeldx解释为指示了用于帧内预测的模式-且因此对于模式相关熵编码来说-分别是垂直、水平或对角类。然后,表示对上下文索引的更新的伪代码将是:
[0078]If intraModeldx = INTRA_PRED_H0R,
[0079]intraModeldx = INTRA_PRED_VER
[0080]尽管存在可以潜在地被预定为模式类(针对其在步骤340执行块转置)的三个类,一类是最不想要的类,且另一类是最想要的类。预定类不应当是对角类,因为对于对角类中的模式,非零系数独特地沿一条边分布(如其他两类中的模式的情况一样)。现在已经意识到:如参考图1Oc的扫描顺序1020所将描述的,因为在CG内的系数的特定锯齿扫描顺序以及块内的CG的特定锯齿扫描顺序,水平类相对于垂直类作为预定类更有优势。
[0081]图3c示出了在预定类是水平类的一个实施例中图3b所示方法300中逻辑流程300C的流程图。具体地,图3b的步骤310被特殊化为针对帧内译码模式在水平类中的情况的替代步骤310C。方法300B的测试330未在逻辑流程300C中示出,且因此无条件地执行步骤340处的块转置。
[0082]现在参考图4a和4b。图4a示出了对量化变换系数的样本8x8块410应用全块转置400A以产生转置块410T ;该转置是传统矩阵转置,即,沿着从左上角到块的右下角的对角线翻转。如果用B[j,i]来表示初始块(例如,块410),其中,j = 0...块高度-1且i=0...块宽度-1,且用BT[j,i]来表示转置块(例如,块410T),其中,j = 0...块高度-1且i =0...块宽度-1,则全块转置可以用以下公式表示:
[0083]BT[j,i] = B[i,j],其中,j = 0...块高度-1 且 i = 0...块宽度-1。
[0084]另一方面,图4b示出了对图4a所示的相同样本8x8块410应用部分块转置400B。在该情况下,沿着块410左侧边的4x4系数块411和413单独转置,以产生转置系数块41IT和413T,而系数块412和414 ;最终结果是部分转置块41(ΧΤ。在另一实施例中(未示出),沿着块410的顶部边的411和412可以单独转置。这两个实施例仅是在本公开范围内的各种部分转置的样本。对于每个这种部分块转置,公式表示是对上述全块转置的公式的约束和/或改编。
[0085]现在参考图5a和6a。图5a以框图形式示出了与传统编码器100A兼容的传统解码器500A,即能够对所述编码器生成的视频进行解码的解码器。图6a示出了用于对帧内译码帧的残余块进行解码的对应传统方法600A的流程图。
[0086]解码器500A接收由例如图1a的编码器100A所编码的兼容比特流199。(本领域众所周知的是:功能不同的编码器可以产生可由单一解码器来解码的编码比特流。)解码器500A最终产生重构视频101A,其由于有损编码过程是不完美的,但其是对曾向编码器中输入的原始视频源101的充分复制。解码器500A可以被配置为根据多种视频压缩标准来工作。例如,解码器500A可以符合AVS或AVS2。
[0087]在步骤610,熵解码器510 (与编码器100A的熵编码器125相对应并逆转熵编码器125的动作)对与该块有关的数据进行熵解码,该与块有关的数据包括(在图2a和2b中示出或列出的三十三个帧内预测模式中)用于产生编码块的帧内预测模式。解码器500A不包括与编码器100A的译码模式选择器160相对应的组件,译码模式选择器160具有(基于各种标准)确定必须要使用哪种译码模式的任务。相反,先前解码的数据包括关于正在编码的当前帧具有类型1、P还是B的指示以及关于帧内的特定译码单位将被帧间译码还是帧内译码。在步骤620,熵解码器还对编码块进行熵解码以产生经熵解码的残余数据块。
[0088]在步骤660,由解量化器520对经熵解码的量化变换系数块进行解量化,以逆转由(图1a的)编码器100A中的量化器115执行的作为(图3a的)步骤320的一部分的量化。这产生了经解量化的残余数据块。在步骤670,反频谱变换525对经解量化的残余数据块进行操作以逆转编码器100A的频谱变换110在步骤320的剩余部分期间进行的操作。
[0089]解码器500A的特定组件的操作包括未作为方法600A的一部分示出的传统步骤。空间补偿器530如上所述应用从比特流中恢复的帧内预测模式。由运动补偿器550针对I型和B型帧执行运动补偿。解块处理器540可以执行滤波,以移除块边界上的伪像和/或执行其他平滑化(与编码过程期间预期的解码器500A的对应解块处理器145 —样)。帧缓冲区545存储用于后续帧内预测和帧间预测的数据。
[0090]现在参考图5b和6b。图5b以框图形式示出了用于对图1b所示的编码器100B编码的视频进行解码的新颖解码器500B。图6b示出了用于对根据图3b所示的方法300B来编码的残余块进行解码的方法的流程图。由于新颖的编码器100B包括块转置120,新颖的解码器500B必须包含在编码组件的序列中恰当定位的用于通过应用块转置的逆来逆转块转置的效果的组件;否则由于变换系数将与错误的频率相关联,将根据混淆的变换域数据来最终重构空间域数据。当然,块转置120执行周期而操作,意味着应用其两次相当于应用恒等(即,什么也不做)操作。所述另一种方式,块转置120使其自身的逆。从而,新颖的解码器500B与传统解码器500A的不同之处在于:不仅作为块转置120的逆还与其相同的块转置515被插在熵解码器510和解量化器520之间。此外,为了兼容,必须在编码器和解码器中并入严格相同类型的块转置(全块转置或部分块转置)。以虚线轮廓的方式来绘出块转置515,因为其仅在用于生成编码块的帧内预测模式在特定预定类中的情况下才采用,该情况触发了编码器10A的块转置在编码期间的操作。
[0091]类似地,新颖的解码方法600B与传统方法600A的不同之处在于:为了与新颖的编码方法300B兼容,其必须包含步骤650,在步骤650,对量化变换块应用块转置(其也是在编码期间应用的块转置的逆);此外,为了兼容,必须在编码和解码期间都并入严格相同类型的块转置(全块转置或部分块转置)。
[0092]然而,步骤650仅在以下条件时才执行:在步骤620,对当前快的编码期间使用的帧内预测模式是否在预定类中的确定具有肯定结果。这是因为其仅在以下情况下才有意义:(a)针对水平类中的模式进行转置,使得系数将以与垂直类中的模式的系数相类似的方式分布,或(b)针对垂直类中的模式进行转置,使得系数将以与水平类中的模式的系数相类似的方式分布。(在实际中,优选选项(a),如在本文其他地方所解释的。)如果步骤620的帧内预测模式的测试具有否定结果,则在步骤640仅对编码块进行熵解码,与图6a的方法600A—样。另一方面,如果测试具有肯定结果,则在步骤640'对编码块的熵解码(在块转置步骤650之前)应当在步骤630的上下文索引的更新之后;否则,将使用更多的上下文,且熵译码将变得比根据更新上下文索引来导出上下文的情况更复杂。严格按照在编码期间的方式来执行更新。例如,假定对于某些实施例,在编码期间触发块转置的特定预定类曾是水平类。进一步假设编码器100B通常将具有值INTRA_PRED_VER、INTRA_PRED_H0R或INTRA_PRED_DC_DIAG(分别等于例如0、1和2的常数)的上下文索引intraModeldx解释为指示用于帧内预测(因此用于模式相关熵编码)的模式分别在垂直类、水平类或对角类中。然后,表示上下文索引的更新的伪代码是:
[0093]如果intraModeldx = INTRA_PRED_H0R,,
[0094]intraModeldx = INTRA_PRED_VER
[0095]解量化步骤660B与方法600A的步骤660无差别地操作。不同的特征数字仅反映它具有更多样的输入,该输入可能已经或可能还未在步骤650处被转置。
[0096]图6c示出了在图6b中所示的方法600B的一个实施例中的逻辑流程600C的流程图。该实施例被限制于指定的预定类(其触发转置的应用)是水平类并且用于产生编码块的帧内预测模式在该类中的情况。该逻辑序列从步骤610C开始,步骤610C以类似于方法600B的步骤610处的方式操作;改变的特征数字反映了结果是处于水平类中的经解码的帧内预测模式。在其是结果的情况下,例如根据上文的伪随机码无条件地更新上下文索引(未示出测试620)。如方法600B中一样,步骤640’和650紧随之后。解量化步骤660C与方法600B的步骤660B无差别地操作。不同的特征数字仅反映通过该逻辑路径的输入必然在步骤650处进行了转置。
[0097]针对平跑编码的改进模式相关上下文设计
[0098]在共同未决的申请PCT/CA2013/050020中,公开了如果用于对平跑对进行熵编码的上下文是至少部分地基于变换系数在当前系数组中的位置以及帧内预测模式所属的类导出的,则编码效率受益。为此,针对帧内预测模式的三个类中的每一个(在本申请中参照图2a的分类200A定义),公开了 CG中的系数位置的相应两部分划分。然后,基于针对该类的划分的两个区域中与特定模式类别的平跑对的每一个二进制值相对应的系数所处的那个区域来导出用于对该二进制值进行熵编码的上下文。现在已经认识到,可以通过三部分划分实现对编码效率的进一步提高,如下所述。根据上文已经公开的内容,划分的应用还应当适应任何转置操作的存在;否则,模式相关上下文设计将不如进行调整的情况那样有效。
[0099]首先参照图7,图7示出了将系数组的变换系数划分为三个不相交的变换系数区域,以用于导出用于对当前CG的平跑对进行熵编码的上下文的目的。在所示的每一种情况下,CG的大小为4个系数X4个系数。每一个划分最适合于上文参照图2b的分类200B所定义的三个类中的相应类中的帧内预测模式(但是它们也可以与图2a的分类200A—起使用)。
[0100]划分710由CG的三个不相交水平带构成:由顶行构成的区域A,特征711 ;由中间行构成的区域B,特征712 ;以及由底行构成的区域C,特征713。该划分被设计用于垂直类中的帧内预测模式——假设未向当前块(或者包括当前CG的部分)应用块转置。如果模式在垂直类中但是当前CG受到转置影响,则采用下文所述的划分720。
[0101]划分720由CG的三个不相交垂直带构成:由左列构成的区域A,特征721 ;由中间列构成的区域B,特征722 ;以及由右列构成的区域C,特征723。该划分被设计用于水平类中的帧内预测模式——假设未向当前块(或者包括当前CG的部分)应用块转置。如果模式在水平类中但是当前CG受到转置影响,则采用上文所述的划分710。
[0102]划分730由CG的三个不相交(大致)对角线带构成:由CG的左上角中的三个系数构成的区域A,特征731 ;由CG的右下角中的六个系数构成的区域C,特征733 ;以及由区域A与C之间的对角线带中的剩余七个系数构成区域B,特征732。该划分被设计用于对角线类中的帧内预测模式。该划分在转置下不变。在上文提到的任何情况下,没有理由针对对角线类中的模式进行转置,因此针对对角线类中的模式,关于当前CG是否受转置影响的考虑是无实际意义的。
[0103]根据已经关于划分710和720所述的内容,应当在意料之中的是,将这些划分中的任意一个用于导出上下文(该上下文用于对当前CG的平跑对进行熵编码)的目的取决于是否采用转置。因此,针对可能在一些情况下采用转置的实施例(图9a至9c),必须单独地描述不采用转置的用于模式相关上下文设计的方法(图Sb和Sc)。
[0104]现在参照图8a至8c,图8a至8c均涉及当不采用转置时将图7的划分710、720和730用于导出上下文的目的,该上下文用于对当前CG的平跑对进行熵编码。
[0105]图8a示出了在不使用块转置的情况下用于对残余块进行模式相关的平跑编码的已知方法300D的流程图;它借鉴了图3A的方法300A,其中省略了步骤310。步骤320和350与方法300A中的完全相同。步骤360D是步骤360的特定实施例,在步骤360D中,现在通过至少部分地基于CG的若干区域中与CG的平跑对的每一个二进制值相对应的系数所属的那个区域,导出该二进制值的上下文,来完成对平跑对的熵编码,其中,已经基于用于对CG进行编码的帧内预测模式将该CG划分为区域(如上所述,现有公开内容规定了两部分划分)。
[0106]图8b示出了详细说明步骤360D’的流程图,步骤360D’与图8a中所示的方法300D的步骤360D相似,但是被调整为说明从图7中所示的划分中选择三部分划分。在步骤361,确定三个类中用于对当前CG进行编码的帧内预测模式所属的那一类。根据模式是属于对角类、垂直类还是水平类,分别将控制传递到步骤361A、步骤361B或步骤361C,所述步骤分别使用划分730、划分710或划分720来执行熵编码。
[0107]图8c示出了详细说明表示图8b的步骤361A、步骤361B或步骤361C(根据具体情况而定)的步骤361x的流程图一其中,至少部分地基于在图Sb的步骤361处选择的划分(分别为730、710或720)来导出上下文。在步骤362,确定与平跑对的当前二进制值相对应的系数是否是DC系数(因为DC系数是整个当前块中的左上角系数,因此这可能仅在当前CG是块的左上角CG时才发生)。如果是,则在一个特殊情况下使用上下文模型O。否则,使用三部分划分。在步骤363,确定三个区域中与平跑对的当前二进制值相对应的系数所属的那个区域。根据该系数是属于区域A、B还是C,将控制分别传递到步骤363A、步骤363B或步骤363C,所述步骤分别使用上下文模型1、2或3来执行熵编码。在一个示例性实施例中,可以通过以下伪代码给出用于对“跑”的每一个二进制值进行熵编码的上下文模型:
[0108]如果当前CG是左上角CG,则
[0109]ctxlnc (run) = reg1nCGIdx*3+min(2, (absSum+absLevel)/2)
[0110]否则,
[0111]ctxlnc(run) = (reg1nCGIdx-1)*3+min(2, (absSum+absLevel)/2)+12
[0112]其中,针对上下文模型i,i = 0、1、2或3, reg1nCGIdx = i ;absSum是先前以逆扫描顺序编码的非零系数的“平”之和;并且absLevel是与“平跑对”中的该“跑”相对应的“平”。现在参照图9a至9c,其也将图7的划分710、720和730用于导出上下文的目的的方法,该上下文用于对当前CG的平跑对进行熵编码。然而,与图8a至Sc的方法相反,这些方法适应采用转置的可能情况。
[0113]图9a示出了在产生编码块时使用的帧内预测模式在特定预定类中的情况下使用块转置对残余块进行模式相关编码的方法300E的流程图。方法300E与图3b的方法300B的不同之处在于:替换步骤360E现在通过至少部分地基于CG的若干区域中与平跑对的每一个二进制值相对应的(可能转置的)系数所属的那个区域导出该二进制值的上下文来对平跑对进行熵编码。基于用于对CG进行编码的帧内预测模式以及在步骤340处是否向系数应用转置,各区域构成划分。该联合条件的第一部分正好是图8a的步骤360D中提及并且在图8b的步骤360D’中详细描述的条件。
[0114]对条件的第二部分——在步骤340处是否应用转置——进行更仔细的考虑。第一,如果应用的转置是全块转置,则条件相当于步骤330处的测试条件;换言之,可以用与步骤330相同的方式测试第二条件。
[0115]第二,当判断系数的位置以确定系数处于哪个区域时,使用的是转置后的位置。
[0116]第三,已经应用转置的意义在于在该情况下必须同样对划分进行“转置”。当例如帧内预测模式在水平类中时,转置的目的是定位转置系数,使得它们以与垂直类中的模式的分布类似的方式分布;如上所述,为了完成“哄骗”编码器100B将转置水平模式块视为如同它是未转置的垂直模式块一样,应当更新上下文索引。如果如这里一样,划分也用于在已经应用转置时导出水平类中的模式的上下文,则应当进一步(通过适当代码)哄骗编码器100B采用(在无转置的情况下)用于垂直类中的模式的划分,即,划分710。此外,这用于获得至少部分地基于当前CG的划分来导出上下文的全部益处。划分710在其布局中是划分720的转置(针对水平类中的模式,没有转置),即使一个划分不是通过应用转置根据另一个划分来逐字地(literally)生成的。下面将参照图9b来详细说明划分的该有条件交换。
[0117]第四,如果应用的转置仅是部分块转置,则仅针对曾应用过转置的系数进行考虑到该转置的调节。(其对该转置的域中的所有系数加以同等对待,甚至在该转置下位于不变的对角线上的系数)。
[0118]最后,本领域技术人员认识到,如果应用的转置仅是部分转置,则仅当转置应用于CG时才对应用于CG的划分进行转置。在该情况下,不完全共享上下文,但是编码效率仍然得到提高,这是因为针对不同类的分布更加独特。
[0119]图9b示出了详细说明图8a中所示的方法中的一个步骤但是被调整为说明从图7中所示的划分中选择划分的流程图——该流程图与图8b中的流程图类似但是适应块转置的任何用法。调整是在步骤365处增加针对垂直类和水平类中任意一个中的模式来确定转置是否应用于与正在编码的二进制值相对应的系数。(如上所述,针对对角线类中的模式,不触发转置)。如果针对水平类中的模式,答案是肯定的,则在步骤361B处使用划分710(最初为垂直类中的模式设计的)而不是在步骤361C处使用划分720 (最初为水平类中的模式设计的)。如果针对垂直类中的模式,答案是肯定的,则在步骤361C处使用划分720而不是在步骤361B处使用划分710。
[0120]该流程图是“过强的”,其原因在于它可以针对水平类中的模式和/或针对垂直类中的模式来处理部分块转置或全块转置。实际上,将一贯针对一个特定类或另一个类(而不是有时针对一个而其他时候针对另一个)完成转置。因此,为了对编码算法进行实际编程,流程图将无需太复杂。例如,如果触发转置的特定预定类是水平类,则测试364中的“垂直”线364B将直接(无条件地)前进至步骤361B,即使应用的转置是部分转置也是如此;如果应用的转置是全转置,则364中的“水平”线364C也可以直接前进至步骤36IB。
[0121]图9c示出了详细说明在假设特定预定类是水平类的情况下通过图9a的步骤360E的流程图的一个特定路径360E’的流程图。在步骤364C,与图9b的“水平”线364C相对应地,确定用于产生编码块的帧内预测模式在水平类(其是触发转置的特定预定类)中。详细说明了图9b的步骤361A,其示出了如何在环境(即,应用块转置)下如何采用最初针对垂直类中的模式设计的划分710。这是图Sc的一般步骤361x的特定实施例。与步骤361x相比,区域A现在是CG的顶行,区域B是中间两行,区域C现在是底行。
[0122]现在参照图10a、图1Ob和图1Oc以解释如何对变换块的“概述(overview) ”进行编码以避免不必要地对零值变换系数进行编码。图1Oa示出了(在该情况下,大小为16x16)样本块1000被划分为(在该情况下具有四行和四列的)系数组。在块1000的上方和左侧示出了用于根据这些列和行指示CG的二维位置的CCx-和CCy-坐标轴。此外,示出了块内的系数组的锯齿组扫描顺序1010。系数组100a至100p的特征数字中的字母反映从左上角CG 100a到右下角CGlOOOp的顺序1010。该特定锯齿顺序以(1,0)处的CG紧随(0,0)处的CG之后开始,但是该顺序的“转置”版本((0,1)处的CG紧随(0,0)处的CG之后)也是可能的。虽然AVS2标准规定图1Oa中所示的锯齿顺序,但是其他类型的顺序(例如,水平(面向行)顺序和垂直(面向列)顺序,不论是双向的还是单向的)也可以在视频编码时使用(因此落入本公开的范围内)。
[0123]图1Ob示出了与图1Oa中所示的相同样本块1000相对应的系数组标志块1000F,并且示出了块中的系数组的组扫描顺序中的最后一个非零系数组的位置。每个I指示相应的CG是“非零” CG,即,它包含至少一个非零变换系数;每一个O指示相应的CG是“0”CG,SP,它仅包含零值变换系数。根据顺序1010,最后一个非零系数组(LNZCG)是由标志100Cm来标志的,标志100Cm与块1000的CG 100m相对应;两个相应块的(x,y)_位置是(最后一个CGX,最后一个CGY) = (3,I)。(本领域技术人员通常将块中的最后一个非零CG称作“最后一个” CG,这是因为它是需要编码的最后一个CG;在解码期间,组扫描顺序中的后续CG中的所有系数被推断为O)。在组扫描顺序中在LNZCG 100m之后的CG lOOOnUOOOo和100p中,仅存在零值变换系数。通过(根据如这里的X坐标和y坐标或者作为组扫描顺序中的一维位置)对LNZCG 100rn的位置进行编码,不仅无需对这些O进行编码,而且无需对与CGlOOOn、1000ο和100p相对应的零值标志进行编码。虑到由“n/a” ( “不可应用”)记号指示的丢失数据,标志块1000F因此可以被视为“部分”块(其仍然起重构完整块的作用)。
[0124]图1Oc示出了针对图1Oa中所示的相同样本块1000的一些系数级别细节。针对CG 100e,示出了该CG内的变换系数的扫描顺序1020。如同CG级别的组扫描顺序一样,系数级别的扫描顺序以向右锯齿折转(zig)然后对角急转(zag)开始,从左上角系数100eO前进至右下角系数1000el5。同样如同组扫描顺序一样,虽然图1Oc中所示的扫描顺序是由AVS2标准规定的扫描顺序,但是系数级别的其他扫描顺序也是可能的(并且落入本公开的范围内)。在CG 1000k的上方和左侧也示出了用于指示变换系数的二维位置的Cx和Cy坐标轴。针对系数组1000k和1000m,示出了这些系数组的扫描顺序中的相应最后一个非零系数(LNZCs) 1000kl3 和 1000m3。针对 CG 1000k,(最后一个 PosX,最后一个 PosY) = (3,2)。针对 CG 1000m,(最后一个 PosX,最后一个 Posy) = (l,l)o
[0125]所有扫描顺序是非对称的。例如,扫描顺序1020在CG转置或CG的任何其他翻转下不是不变的。如关于转置块简要描述的,现在已经认识到,由于CG内的系数的特定锯齿扫描顺序1020以及块中的CG的组扫描顺序1010(其中每一个在对角急转之前向右(而不是向下)锯齿折转),转置水平类(与垂直类相对)中的块帧内预测模式是有利的。针对垂直类中的模式,LNZC通常在前两行中,而针对水平类中的模式,LNZC通常在前两列中。通过转置水平模式的块,LNZC移动至前两行,这平均减少了要扫描的系数的数量,从而有利于编码效率。
[0126]系数组的LNZC的(X,y)位置的模式相关编码
[0127]现在已经认识到,在视频压缩中的帧内预测和变换过程之后,当CG位于变换块的顶边时,该CG中的LNZC趋于靠近CG的顶部。类似地,当CG位于变换块的左侧边时,LNZC趋于靠近CG的左侧。
[0128]为了利用该观察的目的,在图1la和Ilb中示出了图1Oa的变换块1000的两个不同划分。图12示出了如何使用这些划分之一。
[0129]在图1la中,划分1100A将块1000的系数组划分为四个不相交的系数组区域。这些区域是:仅由左上角CG 1000a单独构成的区域0,特征1110A ;由块1000的顶边上除了左上角CG 1000a之外的CG构成的区域1,特征IlllA ;区域2,由块1000的左侧边上除了左上角CG 1000a之外的CG构成的区域2,特征1112A ;以及由既不在块的左侧边上也不在顶边上的所有CG构成的区域3,特征1113A。
[0130]另一方面,在图1lb中,划分1100B将块1000的系数组划分为三个不相交的系数组区域。这些区域是:仅由左上角CG 100a单独构成的区域0,特征1110B ;由块的左侧边或顶边上(而非同时在这二者上)的CG构成的区域1,特征IlllB ;以及由既不在块的左侧边上也不在顶边上的所有CG构成的区域2,特征1112B。
[0131]图12示出了详细说明使用图1lb中所示的三部分划分1100B的流程图。在步骤368,确定当前CG属于区域O、区域I和区域2中的哪一个区域。根据该区域是区域O、I还是2,分别在步骤368A处基于上下文模型O、在步骤368B处基于上下文模型1、或者在步骤368C处基于上下文模型2,对该CG中的LNZC的(x,y)位置进行编码。在一个示例性实施例中,基于区域索引、帧内预测模式分类和二进制值索引来确定用于对当前CG中的LNZC的(X,y)位置进行熵编码的上下文模型,如下面的伪代码所示:
[0132]如果当前CG属于区域2,则:
[0133]ctxlnc (IastPosX) = min(binlndex,I);
[0134]ctxlnc (IastPosY) = min(binlndex,I);
[0135]否则,
[0136]ctxlnc (IastPosX)=
[0137]reg1nIndex*4+(intraModeldx > 0)*2+min(binlndex,1)+2 ;
[0138]ctxlnc (IastPosY)=
[0139]reg1nIndex*4+ (intraModeldx > 0)*2+min (binlndex, 1)+2 ;其中,intraModeldx = 0,如果巾贞内预测模式在垂直类中
[0140]= 1,如果帧内预测模式在水平类中
[0141]=2,其它情况
[0142]用于对系数组中的最后一个非零系数的位置数据进行编码
[0143]在统一的AVS2编码设计中,CG中的最后一个非零系数的(x,y)位置被编码为(X,Y),其中,原点(0,0)是CG的左上角系数位置。向坐标(X,Y)应用一元二进制化。如果当前CG不是LNZCG,则通常当前CG的最后一个非零系数位置位于接近右下角、左下角或右上角系数位置,在该情况下,编码(X,Y)不是有效的,这是因为两个坐标中的至少一个将接近值3,值3是可能针对CG编码的坐标值(O至3)中最长的,其中为了符合AVS2标准,CG始终具有大小4x4。
[0144]在图13中非常一般地示出了对该观测的技术应用,在图13中,流程图示出了用于对正在对被编码的当前系数组的扫描顺序中的最后一个非零系数的(X,y)_位置的修改表示进行编码的新颖方法1300。在针对符合AVS2 CG(具有大小4x4)的具体实施例中,修改导致(可能有条件地)分别将值3和2转换为O和I ;这通常提高了编码效率。
[0145]该一般方法仅应用于作为在LNZCG之前非零CG的CG。因此,方法1300中的第一步骤是在步骤1310处确定当前CG满足这些要求。然后,在步骤1320,获得当前CG中最后一个非零系数的(x,y)_位置(X,Y)。接下来,在步骤1340,向坐标(X,Y)应用非恒等修改以计算修改的(x,y)_位置(X’,Y’)。修改基于以下至少一项:(a)在产生编码块时使用的帧内预测模式以及(b)与当前系数组相邻的至少一个系数组。分别在图13a至13c中示出了修改基于(a)、基于(b)和基于这二者的实施例。最后,在步骤1350,使用上下文模型对修改的(x,y)_位置(X’,Y’ )进行二进制化和熵编码。
[0146]图13a示出了作为图13中所示的方法1300的一个实施例的方法1300A(其基于帧内预测模式所属的类来修改(x.y)_位置)的流程图,其中省略了步骤1310。图13中未示出的步骤1330包括在图13a中,这是因为要在该实施例中在产生编码块时使用的帧内预测模式的确定现在是必不可少的。用虚线轮廓对此进行描绘,这是因为(a)它无需在步骤1320之后发生,以及(b)为了(通过空间预测器105)执行空间预测(图1a的编码模式选择器160)将始终确定帧内预测模式,而不管该方法如何。
[0147]方法1300A的本质是步骤1340A。在该示例性实施例中,修改的应用取决于帧内预测模式所属的类。在步骤1341,确定类是否是对角类。如果是,则在步骤1342,将LNZC的真实(x,y)位置(X,Y)转换为(3-Χ,3-Υ)。如果否,则在步骤1343,确定类是否是垂直类。如果是,则在步骤1344,将LNZC的真实(X,y)位置的(X,Y)转换为(3-X,Y)。如果否,则在步骤1346,将LNZC的真实(X,y)位置(X,Y)转换为(X,3_Y);在该最后一种情况下,通过排除过程,隐含帧内预测模式在水平类中。
[0148]可以在完全相同的三个相应条件下通过其他测试序列来实现三个不同转换是基本逻辑。如果提早测试更频繁发生的状况(从而减少执行的测试的平均次数),对于一个特定的序列而言可能是有利的。因为本公开中定义的对角类最频繁地发生,因此图13a中所示的特定测试序列通常地受益于其首先针对对角类的测试。
[0149]图13b示出了作为图13中所示的方法1300的另一实施例的方法1300B(其基于当前系数组的至少一个相邻系数组来修改(x,y)_位置)的流程图,其中省略了步骤1310。在该示例性实施例中,在步骤1340B处应用修改取决于与当前CG相邻的先前处理过的CG (B卩,紧跟在当前CG右侧或下方的CG)中的哪一些是O并且哪一些是非零。在步骤1347,确定是否满足右侧邻居是O并且下侧邻居是非零。如果是,则在步骤1346,将LNZC的真实(X,y)_位置(X,Y)转换为(X,3-Y)。如果否,则在步骤1348,确定是否满足右侧邻居是非零并且下侧邻居是O。如果是,则在步骤1344,将LNZC的真实(x,y)_位置(X,Y)转换为(3-X,Y)。如果否,则在步骤1349,确定右侧邻居和下侧邻居是否均为非零。如果是,则在步骤1342,将LNZC的真实(X,y)_位置(X,Y)转换为(3_X,3_Y)。如果否,则不进行转换,即,真实(x,y)_位置(X,Y)在被编码之前不进行算术修改;在该情况下,通过排除过程,隐含右侧邻居和下侧邻居均为零。
[0150]可以在完全相同的三个相应条件下通过其他测试序列实现三个不同转换是基本逻辑。如果提早测试更频繁的状况(从而减少执行的测试的平均次数),对于一个此类序列而言可能是有利的。
[0151]图13c示出了图13中所示的方法1300的又一实施例的步骤1340C的流程图。在该示例性实施例中,(X.y)-位置的修改的应用取决于以下至少一项:(a)与当前CG相邻的至少一个CG以及(b)要在产生编码块时使用的帧内预测模式的分类。在步骤1347,确定是否满足右侧邻居是O并且下侧邻居是非零。如果是,则在步骤1346,将LNZC的真实(X,y)_位置(X,Y)转换为(Χ,3-Υ)。如果否,则在步骤1348,确定是否满足右侧邻居是非零并且下侧邻居是O。如果是,则在步骤1344,将LNZC的真实(x,y)_位置(X,Y)转换为(3-Χ,Y)。如果否,则在步骤1349,确定右侧邻居和下侧邻居是否均为非零。如果是,则在步骤1342,将LNZC的真实(x,y)_位置(X,Y)转换为(3_X,3_Y)。如果否,则在步骤1343,确定帧内预测模式是否在垂直类中。如果是,则在步骤1344,将LNZC的真实(x,y)_位置(X,Y)转换为(3-X,Y)。如果否,则在步骤1345,确定帧内预测模式是否在水平类中。如果是,则在步骤1346,将LNZC的真实(x,y)_位置(X,Y)转换为(X,3_Y)。如果否,则不进行转换,即,真实U,y)_位置(X,Y)在被编码之前不进行算术修改;在该最后一种情况下,通过排除过程,隐含右侧邻居和下侧邻居均为零并且帧内预测模式在对角类中。
[0152]可以在完全相同的三个相应条件下通过其他测试序列实现三个不同转换是基本逻辑。如果提早测试更频繁的状况(从而减少执行的测试的平均次数),对于一个此类序列而言可能是有利的。
[0153]现在转向图14,示出了说明用于对根据图13中所示的方法1300编码的视频进行解码的方法1400的流程图。在这种编码视频的逐块处理期间,在步骤1410,针对当前块中的当前系数组,对该系数组的扫描顺序中的最后一个非零系数的真实(X,y)_位置的修改的编码表示(X,Y)进行解码。然后,在步骤1440,向修改的表示(X,Y)应用非恒等修改以获得真实(x,y)_位置。与方法1300 —样,修改基于以下至少一项:(a)在产生编码块时使用的帧内预测模式以及(b)与当前系数组相邻的至少一个系数组。
[0154]如图14中所示并且如刚刚所述的方法1400通常足够使得它可以应用于根据分别如图13A、13B和13C所示并且如上文详细讨论的方法1300的范围内的各个实施例中的任意一个实施例编码的视频。当然,它不能同时应用于方法1300的范围内的每一个编码实施例。为了与方法1300的任何特定实施例兼容,方法1400必须具有与方法1300的相应步骤1340兼容的修改步骤1440的实施例。将显而易见的是,修改步骤1440必须是步骤1340的逆。更具体地,在每一个可能的环境中-不论基于在产生编码块时使用的帧内预测模式还是基于与当前系数组相邻的至少一个系数组-步骤1440处的对(X,Y)的转换必须逆转曾在当前块的编码期间在步骤1340处执行的对(X,Y)的无论哪种转换。
[0155]因为3-(3-X) =X并且3-(3_Υ) = Y,因此可以在步骤1340处在不同条件下使用的各种转换中的每一种——即,(Χ,Υ) — (χ,3-γ),(X, Y) — (3-X, Y)和(X,Y) — (3_Χ,3-Υ)——是周期2操作,这意味着将其应用两次相当于应用恒等(即,什么也不做)操作。换句话说,每一个转换是其自己的逆。其最终结果是将与方法1300的特定实施例兼容的针对方法1400所需的步骤1440的变形实际上与在方法1300的该实施例中使用的步骤1340的变形相同。在这种情况下,未在单独的图中示出方法1400的与相应方法1300Α、1300Β和1300C兼容的三个变形。
[0156]最后,参照图15,图15示出了计算设备1500的示例性实施例的简化框图,计算设备1500可以是多种设备中的任意一种,包括但不限于:服务器、适合编程的通用计算机、音频/视频编码和回放设备、机顶盒、电视广播设备、DVD或蓝光播放器、以及可以用作编码器、解码器或这二者的移动设备(例如,智能电话、平板电脑、平板手机(phablet)等)。设备1500被描绘为具有两个处理器1511和1512以控制设备的功能,但是众所周知,计算设备可以被设计为具有单个通用处理器或具有任意数量的通用和/或专用处理器。设备1500包括存储器1520,其可以是能够存储处理器可执行指令的非临时性处理器可读介质,所述处理器可执行指令可以由设备1500中的一个或多个处理器(例如,处理器1511和1512)执行。介质可以是单一的或者可以由多个部分构成。介质可以具有一种或多种类型,例如,高密度盘、闪存设备、随机存取存储器(RAM)、只读存储器(ROM)、硬盘驱动器、专用集成芯片(ASIC)等。存储器1520或其各个部分可以从设备1500中拆卸和/或可以永久性地固定在其中。存储器1520或其各个部分的属性可以呈现存储在其中的不可改变和/或可重新编程的指令;可重新编程存储器可以是易失性的或非易失性的。在各个实施例中,可以将指令称为以硬件、固件和/或软件的形式执行。
[0157]存储在存储器1520中的处理器可执行指令当由设备1500中的一个或多个处理器(例如,处理器1511和1512)执行时可以将设备1500配置为执行多个功能。特定的此类处理器可执行指令组可以构成计算机程序,也称作“计算机应用”或仅简称为“应用”。具体地,存储器1520可以(在处理器可读介质中)存储能够执行根据本公开的一个或多个方法的应用1530,在该情况下,设备1500是编码器,例如,编码器100B。备选地,存储器1520可以存储能够执行根据本公开的一个或多个解码方法的解码应用1540,在该情况下,设备1500是解码器,例如,解码器500B。作为另一个备选方式,存储器1520可以存储编码应用1530和解码应用1540,在该情况下,设备1500既是编码器,也是解码器。
[0158]存储器1520可以是用于使用设备1500根据编码视频的比特流中的残余数据的编码块重构残余数据的当前块的装置,所述当前块被划分为系数组,每一个系数组包括变换系数。所述装置包括:用于进行以下操作的装置:针对当前系数组,所述当前系数组是在所述当前块的所述系数组的组扫描顺序中的所述最后一个非零系数组之前的非零系数组:
(a)对所述当前系数组中表示所述当前系数组中的所述变换系数的扫描顺序中的所述最后一个非零变换系数的真实(X,y)-位置的坐标(X,Y)进行解码;以及(b)向所述坐标(X,Y)应用非恒等修改以计算所述最后一个非零变换系数的所述真实(X,y)_位置,其中所述修改基于以下至少一项:在产生所述编码块时使用的帧内预测模式;以及与所述当前系数组相邻的至少一个系数组。
[0159]备选地,存储器1520可以是用于使用设备1500对视频进行编码的装置,所述视频包括划分为块的图片,将针对所述块的残余数据频谱变换为变换块,每一个变换块被进一步划分为系数组。所述装置包括:用于进行以下操作的装置:针对当前系数组,所述当前系数组是在所述当前块的所述系数组的组扫描顺序中的所述最后一个非零系数组之前的非零系数组:(a)获得所述当前系数组中所述系数组中的变换系数的扫描顺序中的最后一个非零变换系数的(X,y)-位置(X,Y) ;(b)基于以下至少一项使用非恒等修改将所述(X,y)_位置(X,Y)转换为修改的(x,y)_位置(X’,Y’):在产生所述变换块时使用的帧内预测模式;以及(c)与所述当前系数组相邻的至少一个系数组;以及使用上下文模型对所述修改的(x,y)_位置(X’,Y’ )进行二进制化和熵编码。
[0160]本领域普通技术人员认识到,可以在保持在本公开的范围内的情况下对上述示例性实施例进行各种常规调整和修改。因此,所述实施例应当被认为是示例性的而非限制性的。
【权利要求】
1.一种用于使用视频解码器根据编码视频的比特流中的残余数据的编码块重构残余数据的当前块的方法,所述当前块被划分为系数组,每一个系数组包括变换系数,所述方法包括: 针对当前系数组,所述当前系数组是在所述当前块的所述系数组的组扫描顺序中的所述最后一个非零系数组之前的非零系数组: 对所述当前系数组中表示所述当前系数组中的所述变换系数的扫描顺序中的所述最后一个非零变换系数的真实(X,y)-位置的坐标(X,Y)进行解码;以及 向所述坐标(X,Y)应用非恒等修改以计算所述最后一个非零变换系数的所述真实(X,y)_位置,其中,所述修改基于以下至少一项:在产生所述编码块时使用的帧内预测模式;以及与所述当前系数组相邻的至少一个系数组。
2.根据权利要求1所述的方法,其中,所述当前系数组具有大小4x4,并且所述修改包括以下一项或两项:将所述坐标X转换为3-X ;以及将所述坐标Y转换为3-Y。
3.根据权利要求1所述的方法,其中,所述修改基于所述模式的分类。
4.根据权利要求3所述的方法,其中,确定所述模式在预定类中包括: 对指示所述模式的数据进行解码;以及 确定所述模式的所述分类。
5.根据权利要求3所述的方法,其中,所述当前系数组具有大小4x4,并且所述修改包括: 如果所述模式在对角线类中,则将所述坐标(X,Y)转换为(3-Χ,3-Υ); 如果所述模式在垂直类中,则将所述坐标(Χ,Υ)转换为(3-Χ,Υ);以及 如果所述模式是垂直类,则将所述坐标(Χ,Υ)转换为(Χ,3-Υ)。
6.根据权利要求1所述的方法,其中,所述当前系数组右侧的相邻系数组和所述当前系数组下方的相邻系数组中的至少一个包括非零系数组,并且所述修改基于所述相邻系数组中的至少一个。
7.根据权利要求6所述的方法,其中,所述当前系数组具有大小4x4,并且所述修改包括: 如果所述当前系数组右侧所述相邻系数组是零系数组并且所述当前系数组下方的所述相邻系数组是非零系数组,则将所述坐标(Χ,Υ)转换为(Χ,3-Υ); 如果所述当前系数组右侧的所述相邻系数组是非零系数组并且所述当前系数组下方的所述相邻系数组是零系数组,则将所述坐标(Χ,Υ)转换为(3-Χ,Υ);以及 如果所述当前系数组右侧的所述相邻系数组和所述当前系数组下方的所述相邻系数组均是非零系数组,则将所述坐标(Χ,Υ)转换为(3-Χ,3-Υ)。
8.根据权利要求1所述的方法,其中,所述当前系数组具有大小4x4,所述当前系数组右侧的相邻系数组和所述当前系数组下方的相邻系数组均是零系数组,所述模式在水平类和垂直类之一中,并且所述修改包括: 如果所述模式在垂直类中,则将所述坐标(Χ,Υ)转换为(3-Χ,Υ);以及 如果所述模式在垂直类中,则将所述坐标(Χ,Υ)转换为(Χ,3-Υ)。
9.根据权利要求1至8中任一项所述的方法,其中,所述组扫描顺序包括:所述当前块中的系数组从左上角系数组开始的顺序,并且所述解码器以所述组扫描顺序的逆扫描顺序对所述块的所述系数组进行解码。
10.根据权利要求9所述的方法,其中,所述组扫描顺序包括锯齿顺序。
11.根据权利要求1至8中任一项所述的方法,其中,所述扫描顺序包括每一个系数组中的变换系数从所述组中的左上方变换系数开始的顺序;并且所述解码器以所述扫描顺序的逆扫描顺序对针对每一个系数组中的变换系数的平、跑和符号数据进行解码。
12.根据权利要求11所述的方法,其中,所述扫描顺序包括锯齿顺序。
13.根据权利要求1至8中任一项所述的方法,其中,对坐标似、进行解码基于三个区域中所述当前系数组所属的那个区域导出的,其中所述当前块的所述系数组已经划分为所述三个区域。
14.根据权利要求13所述的方法,其中,所述三个区域均是与转置无关的。
15.根据权利要求14所述的方法, 其中,所述系数组被排列在所述当前块中的行和列中, 所述三个区域之一由所述顶行和所述左列中的系数组构成; 所述三个区域中的另一个区域由既不在所述顶行中也不在所述左列中的系数组构成;以及 所述三个区域中的剩余一个区域由在所述顶行或所述左列中而不是同时在所述顶行和所述左列中的系数组构成。
16.一种用于根据编码视频的比特流中的残余数据的编码块重构残余数据的当前块的解码器,所述解码器包括: 一个或多个处理器; 存储器;以及 解码应用,所述解码应用存储在存储器中并且包含用于将所述一个或多个处理器配置为执行根据权利要求1至8中任一项所述的方法的指令。
17.一种用于使用视频编码器对视频进行编码的方法,所述视频包括划分为块的图片,将针对所述块的残余数据频谱变换为变换块,每一个变换块被进一步划分为系数组,所述方法包括: 针对当前系数组,所述当前系数组是在所述当前块的所述系数组的组扫描顺序中的所述最后一个非零系数组之前的非零系数组: 获得所述当前系数组中所述系数组中的变换系数的扫描顺序中的最后一个非零变换系数的(17)-位置(⑶; 基于以下至少一项使用非恒等修改将所述“,7卜位置似、转换为修改的(17)-位置〈X’,V ):在产生所述变换块时使用的帧内预测模式;以及与所述当前系数组相邻的至少一个系数组;以及 使用上下文模型对所述修改的“,7卜位置IV )进行二进制化和熵编码。
18.一种用于对视频进行编码的编码器,所述编码器包括: 一个或多个处理器; 存储器;以及 编码应用,所述编码应用存储在存储器中并且包含用于将所述一个或多个处理器配置为执行根据权利要求17所述的方法的指令。
19.一种非临时性处理器可读介质,存储处理器可执行指令,当执行所述处理器可执行指令时,所述处理器可执行指令将一个或多个处理器配置为执行根据权利要求1至8和17中任一项所述的方法。。
【文档编号】H04N19/129GK104469378SQ201410482404
【公开日】2015年3月25日 申请日期:2014年9月19日 优先权日:2013年9月19日
【发明者】王小峰, 王競, 何大可, 计天颖 申请人:黑莓有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1