CN105379283B - 数据编码和解码 - Google Patents

数据编码和解码 Download PDF

Info

Publication number
CN105379283B
CN105379283B CN201480039205.9A CN201480039205A CN105379283B CN 105379283 B CN105379283 B CN 105379283B CN 201480039205 A CN201480039205 A CN 201480039205A CN 105379283 B CN105379283 B CN 105379283B
Authority
CN
China
Prior art keywords
value
data
encoded
data value
group
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201480039205.9A
Other languages
English (en)
Other versions
CN105379283A (zh
Inventor
詹姆斯·亚历山大·戈梅
卡尔·詹姆斯·沙曼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sony Corp
Original Assignee
Sony Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Corp filed Critical Sony Corp
Publication of CN105379283A publication Critical patent/CN105379283A/zh
Application granted granted Critical
Publication of CN105379283B publication Critical patent/CN105379283B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • H03M7/4031Fixed length to variable length coding
    • H03M7/4037Prefix coding
    • H03M7/4043Adaptive prefix coding
    • H03M7/4068Parameterized codes
    • H03M7/4075Golomb codes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/184Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being bits, e.g. of the compressed video stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/63Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets
    • H04N19/64Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets characterised by ordering of coefficients or of bits for transmission
    • H04N19/647Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using sub-band based transform, e.g. wavelets characterised by ordering of coefficients or of bits for transmission using significance based coding, e.g. Embedded Zerotrees of Wavelets [EZW] or Set Partitioning in Hierarchical Trees [SPIHT]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/96Tree coding, e.g. quad-tree coding

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)

Abstract

一种用于解码一组数据值的数据解码方法包括以下步骤:将每个数据值的第一部分从一个或多个数据组中解码,所述数据组表示预定幅度范围的第一部分并且使用二进制编码,将所述数据组编码成输入数据流;解码所述数据组未完全编码的至少那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,在所述输入数据流内包括限定所述第二部分的数据,并且如果相应的第一和第二部分未完全编码数据值,那么将数据值的剩余第三部分从所述输入数据流中解码;对于所述数据值的子集,检测(i)第三部分已经被编码并且如果使用了n的更高值会依然需要第三部分的数据值的情形,以及(ii)第二部分已被编码但是n的值使得所述数据值使用n的更低值通过第一部分和第二部分被完全编码的数据值的情形;并且根据检测步骤的结果,改变n以关于后续数据值而使用。

Description

数据编码和解码
技术领域
本公开涉及数据编码和解码。
背景技术
文中所提出的“背景技术”描述为了一般性地呈现本发明的背景的目的。目前具名的发明人的在此背景技术部分所描述的工作以及可能在申请时并非现有技术的描述的各方面并非明示或暗示性地承认为对抗本发明的现有技术。
有数种视频数据压缩以及解压缩***,其涉及将视频数据变换为频域表示、将频域系数量化及接着将某形式的熵编码应用至已量化的系数。
在本上下文中,熵可以被视为表示数据符号或符号系列的信息内容。熵编码的目标在于,使用(理想地)表示一系列数据符号的信息内容所需要的最小数量的编码数据位,通过无损的方式编码该系列数据符号。实际上,熵编码用于编码量化系数,以便编码数据比原始的量化系数的数据尺寸更小(在其位数方面)。更有效的熵编码处理给相同的输入数据尺寸提供更小的输出数据尺寸。
一种用于熵编码视频数据的技术是所谓的CABAC(上下文自适应二进制算术编码)技术。
发明内容
本公开涉及一种用于解码数据值组的数据解码方法,所述方法包括以下步骤:解码来自一个或多个数据组的每个数据值的第一部分,所述数据组表示预定幅度范围的第一部分并且通过使用二进制编码所述数据组被编码到输入数据流;解码至少通过所述数据组未完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,限定所述第二部分的数据被包括在所述输入数据流内,并且如果数据值通过相应的第一部分和第二部分未被完全解码,则将来自所述输入数据流的所述数据值的剩余第三部分解码;对于所述数据值的子集,检测(i)第三部分已经被编码并且如果已使用了n的更高值会依然需要第三部分的数据值的情形,以及(ii)第二部分已被编码但是n的值使得所述数据值利用n的更低值通过第一部分和第二部分已经被完全编码的数据值的情形;并且根据检测步骤的结果,改变n以关于后续数据值而使用。
应理解之前的一般性描述及之后的详细描述是示例性的,而非对本公开的限制。
附图说明
本公开的更完整的理解以及许多其伴随的优点将随着其通过参考实施方式的以下详细描述在结合附图考虑时变得更为了解而被轻易地获得,其中:
图1示意性示出一种使用视频数据压缩及解压缩的音频/视频(A/V)数据传输及接收***;
图2示意性示出一种使用视频数据解压缩的视频显示***;
图3示意性示出一种使用视频数据压缩及解压缩的音频/视频存储***;
图4示意性示出一种使用视频数据解压缩的视频相机;
图5提供视频数据压缩及解压缩设备之示意性概视图;
图6示意性示出预测图像之产生;
图7示意性示出最大编码单元(LCU);
图8示意性示出一组四个编码单元(CU);
图9和图10示意性示出将图8之编码单元次分割为较小的编码单元;
图11示意性示出预测单元(PU)的阵列;
图12示意性示出变换单元(TU)的阵列;
图13示意性示出部分编码图像;
图14示意性示出一组可能的预测方向;
图15示意性示出一组预测模式;
图16示意性示出锯齿扫描;
图17示意性示出CABAC熵编码器;
图18A到18D示意性示出CABAC编码和解码操作的方面;
图19示意性示出CABAC编码器;
图20示意性示出CABAC解码器;
图21是示出编码***的概况的示意图;
图22是位速率对量化参数(QP)的曲线图;
图23是启用变换跳过模式下6个测试位深度的位速率对绿色通道PSNR的曲线图;
图24是禁用变换跳过模式下6个测试位深度的位速率对绿色通道PSNR的曲线图;
图25是利用14位变换矩阵的6个测试位深度的位速率对绿色通道PSNR的曲线图,;
图26是用于比较各种精度DCT矩阵的一个测试序列的PSNR对位速率的曲线图;
图27是用于示出使用旁路固定位编码的一个测试序列的PSNR对位速率的曲线图;
图28是提供编码配置文件(encoding profile)的实例的表格;
图29到图31是分别示出CABAC处理的部分的版本的示意性流程图;
图32A至图32F是示出不同的CABAC对准方案的示意图;
图33到图35是分别示出CABAC处理的终止阶段的版本的示意性流程图;
图36是示意性示出编码技术的流程图;
图37是示意性示出自适应技术的流程图;以及
图38是示出自适应技术的另一个实例的示意性流程图。
具体实施方式
现在参考图,图1至图4被提供以给出利用压缩和/或解压缩设备之设备或***的示意性图示,压缩和/或解压缩设备将在下文中结合实施方式描述。
所有将描述于下文的数据压缩和/或解压缩可以硬件实施,以在诸如通用计算机等通用数据处理设备上运行的软件实施,作为诸如特定应用集成电路(ASIC)或场可编程门阵列(FPGA)等可编程硬件或作为这些的组合实施。在实施方式藉由软件和/或固体来实施的情况下,应理解此类软件和/或固体、及藉以存储或提供此类软件和/或固体的非临时机器可读数据存储媒体被视为实施方式。
图1示意性示出一种使用视频数据压缩及解压缩的音频/视频数据传输及接收***。
输入音频/视频信号10被供应至视频数据压缩设备20,其压缩音频/视频信号10的至少视频分量以沿着传输路由30(诸如缆线、光纤、无线链路等)传输。压缩信号由解压缩设备40处理以提供输出音频/视频信号50。对于返回路径,压缩设备60压缩音频/视频以沿着传输路由30传输至解压缩设备70。
压缩设备20和解压缩设备70可因此形成传输链路的一个节点。解压缩设备40及压缩设备60可形成传输链路的另一节点。当然,在传输链路为单向的情况下,仅有节点之一需要压缩设备而另一节点仅需要解压缩设备。
图2示意性示出一种使用视频数据解压缩的视频显示***。特别地,压缩音频/视频信号100由解压缩设备110处理以提供可被显示于显示器120上的解压缩信号。解压缩设备110可被实施为显示器120的组成部分,例如被提供于与显示设备相同的外壳内。另一方面,解压缩设备110可被提供为例如所谓的机顶盒(set top box)(STB),注意:表述“机顶”并非暗示机顶盒需设置为相对于显示器120在任何特定方位或位置;其仅为本领域中所使用的术语,用以指示可连接至作为周边装置的显示器的装置。
图3示意性示出一种使用视频数据压缩及解压缩的音频/视频存储***。输入音频/视频信号130被供应至压缩设备140,其产生压缩信号以供由存储装置150所存储,存储装置为例如磁盘装置、光盘装置、磁带装置、固态存储装置(如半导体内存或其他存储装置)。为了播放,压缩数据被读取自存储装置150并传递至解压缩设备160以供解压缩,从而提供输出音频/视频信号170。
应理解的是,压缩信号或编码信号及存储该信号的存储介质或数据载体被视为实施方式。
图4示意性示出一种使用视频数据解压缩的视频相机。在图4中,图像捕获设备180,诸如电荷耦合器件(CCD)图像电感器及相关的控制和读出电子电路,产生视频信号,其被传递至压缩设备190。麦克风(或多个麦克风)200产生音频信号以被传递至压缩设备190。压缩设备190产生压缩音频/视频信号210以便被存储和/或传输(整体示出示意性级220)。
将在下文描述的技术主要有关于视频数据压缩。应理解:许多现有的技术可配合将被描述的视频数据压缩技术而被用于音频数据压缩,以产生压缩音频/视频信号。因此,将不提供音频数据压缩的单独论述。也应理解:与视频数据(特别是广播质量视频数据)相关的数据率一般是远高于与音频数据相关的数据率(无论已压缩的还是未压缩的)。因此应理解:未压缩音频数据可伴随已压缩视频数据以形成已压缩音频/视频信号。应进一步理解:虽然目前的实例(图1-4中所示出的)有关音频/视频数据,但以下将描述的技术可应用于仅处理(换言之,压缩、解压缩、存储、显示和/或传输)视频数据的***。换言之,实施方式可应用于视频数据压缩而不一定具有任何相关的音频数据处置。
图5提供视频数据压缩及解压缩设备之示意性概视图。
输入视频信号300之连续图像被供应至加法器310及图像预测器320。图像预测器320将参考图6而被更详细地描述于下文。加法器310事实上执行相减(负相加)操作,由于其接收在“+”输入上的输入视频信号300及在“-”输入上的图像预测器320之输出,使得从输入图像减去预测图像。结果为产生表示实际图像与投影图像间的差的所谓残留图像信号330。
为何产生残留图像信号的一个原因如下。将描述的数据编码方案(亦即将应用于残留图像信号之技术)倾向于当待编码之图像中有较少“能量”时更有效地工作。于此,术语“有效地”指的是产生少量编码数据;针对特定图像质量等级,希望产生实际上尽可能少的数据。提及的残留图像中的“能量”涉及残留图像中所含有的信息量。如果预测图像将与实际图像完全一致,则两者之间的差异(亦即,残留图像)将含有零信息(零能量)且将极易于编码成少量的编码数据。通常,如果能进行相当好的预测处理,则预期残留图像数据将含有比输入图像少的信息(较少能量)而因此将更易于编码成少量的编码数据。
残留图像信号330被提供至变换单元340,变换单元340产生表示残留图像数据的离散余弦变换(DCT)表示。DCT技术本身是众所周知的,将不在此详细地描述。然而,存在将被更详细地在下文描述的本设备中所使用的该技术的多个方面,特别是有关于被应用DCT操作的不同区块(block)的数据的选择。这些将参考图7-12而在下文描述。
要注意的是,在一些实施方式中,使用离散余弦变换(DST),而不是DCT。在其他实施方式中,可能不使用变换。这可以选择性进行,使得例如,在“变换跳过”命令或模式的控制下,实际上旁路变换阶段。
变换单元340之输出(亦即,针对图像数据之各变换区块的一组变换系数)被供应至量化器350。各种量化技术为视频数据压缩之领域中所已知的,范围涵盖从通过量化标度因子(scaling factor,比例因数)之简单相乘直至在量化参数之控制下复杂查找表之应用。一般目标是双重的。首先,量化处理减少变换数据之可能值的数目。其次,量化处理可增加变换数据的值为零的可能性。这两者可使得熵编码处理(将在下文描述)在产生少量的压缩视频数据中更有效地工作。
由扫描单元360施加数据扫描处理。扫描处理之目的为重新排序量化的变换数据以将尽可能多的非零量化变换系数收集在一起,当然,因此将尽可能多的零值系数收集在一起收集。这些特征可容许有效率地施加所谓的游程长度编码或类似技术。因此,扫描处理涉及从已量化的变换数据选择系数,且特别是从与已依据“扫描顺序”变换并量化的图像数据之区块对应的系数之区块选择系数,使得:(a)所有系数被选择一次作为扫描的一部分;及(b)扫描趋向于提供所期望的重新排序。下面描述用于选择扫描顺序的技术。一种可趋向于提供有用结果之示例扫描顺序是所谓的锯齿扫描顺序。
扫描后系数然后传递至熵编码器(EE)370。再次,可使用各种类型的熵编码。下面描述的两个实例是所谓的CABAC(上下文自适应二进制算术编码)***的变形及所谓的CAVLC(上下文自适应可变长度编码)***的变形。一般而言,CABAC被视为提供较佳的效率,且于某些研究中已显示出,相较于CAVLC,对于相当的图像质量,编码输出数据的数量减少10-20%。然而,认为CAVLC复杂度远低于CABAC(就其实施而言)。下面参照图17讨论CABAC技术,并且下面参照图8和19讨论CAVLC技术。
注意:扫描处理及熵编码处理被显示为分开的处理,但事实上可被结合或一起处理。亦即,数据读入熵编码器可以扫描顺序发生。相应的考虑适用于以下将描述的各个的反向处理。
熵编码器370之输出,连同额外数据(以上所提和/或以下所讨论),例如限定预测器320产生预测图像的方式,提供压缩后的输出视频信号380。
然而,也提供返回路径,因为预测器320本身之操作取决于压缩输出数据的解压缩版本。
此特征之原因如下。在解压缩处理的适当阶段(以下将描述)中,产生残留数据之解压缩版本。此解压缩的残留数据需被加至预测图像以产生输出图像(因为原始残留数据为输入图像与预测图像之间的差)。为了使此处理在压缩侧与解压缩侧之间是相当的,则由预测器320所产生的预测图像在压缩处理期间及在解压缩处理期间应是相同的。当然,在解压缩时,设备对于原始输入图像不具有访问权,而仅对于解压缩图像有访问权。因此,在压缩时,预测器320以压缩图像之解压缩版本为其预测(至少,针对图像间编码)之基础。
由熵编码器370所执行之熵编码处理被认为是“无损的”,也就是说其可被反转以获得与被首先供应至熵编码器370之完全相同的数据。因此,返回路径可在熵编码阶段之前被实施。实际上,由扫描单元360所执行之扫描处理亦被认为是无损的,但在本实施方式中,返回路径390是从量化器350之输出至互补反向量化器420之输入。
一般而言,熵解码器410、反向扫描单元400、反向量化器420及反向变换单元430提供熵编码器370、扫描单元360、量化器350及变换单元340之相应的反向功能。现在,将继续通过压缩处理进行讨论;解压缩输入的压缩视频信号之处理将被在下文分开讨论。
在压缩处理中,扫描系数由返回路径390从量化器350传递至反向量化器420,反向量化器420执行扫描单元360之反向操作。反向量化及反向变换处理由单元420、430执行以产生压缩解压缩的残留图像信号440。
图像信号440在加法器450被加至预测器320之输出以产生重建的输出图像460。这形成图像预测器320的一个输入,如下文描述那样。
现在转到被应用于所接收的压缩视频信号470之处理,在由加法器450加至图像预测器320的输出之前,信号被供应至熵解码器410并从该处供应至反向扫描单元400、反向量化器420及反向变换单元430之链路。更直接地讲,加法器450之输出460形成输出的解压缩视频信号480。实际上,可在信号被输出之前施加进一步滤波。
图5的设置的操作(和图6的操作以及下面讨论的其他操作)可以由控制器345控制。
图6示意性示出预测图像之产生,特别是图像预测器320之操作。
有两种预测的基本模式:所谓的图像内预测及所谓的图像间(或运动补偿(MC))预测。
图像内预测基于对来自相同图像内之数据的图像区块的内容的预测。这对应于其他视频压缩技术中所谓的I帧编码。相对于I帧编码(其中整个图像被帧内编码),在本实施方式中,可以逐区块地进行帧内编码与帧间编码的选择,但是在其他实施方式中仍然逐图像地进行选择。
运动补偿预测利用运动信息,运动信息试图限定当前图像中的将被编码的图像细节在另一相邻或附近图像中的源。因此,在理想实例中,在预测图像中之图像的区块之内容可被非常简单地编码为参考(运动向量),其指向相邻图像中位于相同或稍微不同位置上的相应区块。
回到图6,示出了两个图像预测配置(对应于图像内预测及图像间预测),其结果通过在模式信号510之控制下由复用器500选择以提供预测图像之区块,以便供应至加法器310及450。该选择之进行根据哪个选择提供最低“能量”(如上所讨论,其可被视为需要编码的信息内容),且该选择被发送给编码输出数据流内的编码器。图像能量(在此上下文中)可被通过例如以下方式检测:从输入图像执行预测图像之两版本的区域的试验相减(trialsubtraction),将差图像之各像素值平方,合计平方值,及识别两版本中的哪个为导致相关于该图像区域的差图像的较低均方根值。
在帧内编码(intra-encoding)***中,实际预测基于其被接收为信号460的一部分的图像区块来进行,换言之,预测基于编码-解码图像区块,以便在解压缩设备上可进行完全相同的预测。然而,数据可由帧内模式选择器(intra-mode selector)520从输入视频信号300导出,以控制图像内预测器530之操作。
针对图像间预测,运动补偿(MC)预测器540使用运动信息,诸如由运动估计器550从输入视频信号300导出的运动向量。这些运动向量藉由运动补偿预测器540而被施加至重建图像460之处理后版本,以产生图像间预测之区块。
现在将描述施加至信号460之处理。首先,信号由滤波器单元560滤波。此涉及应用“去区块(deblocking)”滤波器以移除或至少趋向于减少由变换单元340所执行之基于区块的处理及后续操作的影响。而且,使用藉由处理重建信号460及输入视频信号300所导出的系数应用自适应回路滤波器。自适应回路滤波器是一种使用已知技术的滤波器类型,其将自适应滤波器系数应用于待滤波之数据。亦即,滤波器系数可根据各种因子而改变。限定应使用哪些滤波器系数之数据被包括作为编码输出数据流的一部分。
来自滤波器单元560之滤波输出实际上形成输出视频信号480。其也被缓冲于一个或更多图像存储器570中;连续图像之存储为运动补偿预测处理之必要条件,特别是在运动向量的产生中。为了节省存储需求,图像存储器570中之存储图像可以压缩形式保持,然后解压缩以用于产生运动向量。为了此特定目的,可使用任何已知的压缩/解压缩***。存储图像被传递至内插滤波器580,其产生已存储图像之较高分辨率版本;在此实例中,产生中间样本(子样本)使得:由内插滤波器580所输出之内插图像的分辨率为存储于图像存储器570中的图像之分辨率的8倍(在各维度)。内插图像被作为输出传递至运动估计器550及也传递至运动补偿预测器540。
在实施方式中,提供进一步的可选择阶段,其使用乘法器600将输入视频信号之数据值乘以四(有效地仅将数据值向左移两位);及使用除法器或右移器610在设备的输出施加相应的除法操作(右移两位)。因此,左移及右移纯粹针对设备之内部操作而改变数据。此措施可在设备内提供较高的计算准确度,因为任何数据舍入误差的影响减少。
现在将描述其中图像针对压缩处理而被分割的方式。在基本等级,待压缩图像被视为样本之区块的阵列。针对本讨论之目的,所考虑的最大此类区块是所谓的最大编码单元(LCU)700(图7),其代表64×64样本之方形阵列。于此,讨论有关亮度样本。根据色度模式,诸如4:4:4、4:2:2、4:2:0或4:4:4:4(GBR+密钥数据),将有对应于亮度区块的不同数目的相应色度样本。
将描述三种基本的区块类型:编码单元、预测单元及变换单元。一般而言,LCU之递归子划分容许输入图像被分割成使得区块尺寸及区块编码参数(诸如预测或残留编码模式)可依据待编码图像之特定特性而被设定。
LCU可被子划分为所谓的编码单元(CU)。编码单元总是方形的且具有8×8样本与完整尺寸的LCU 700之间的尺寸。编码单元可被配置为一种树状结构,使得第一子划分可如图8所示地发生,给出32×32样本之编码单元710;然后,后续子划分可基于选择进行,以给出一些16×16样本的编码单元720(图9)及潜在地给出一些8×8样本的编码单元730(图10)。总之,此处理可提供CU区块之内容自适应的编码树结构,每个CU区块可如LCU一样大或者如8×8样本一样小。输出视频数据的编码基于编码单元结构而进行。
图11示意性示出预测单元(PU)的阵列。预测单元为基础单元,用以携载关于图像预测处理的信息,或者换言之,被加至熵编码残留图像数据以形成来自图5之设备的输出视频信号的额外数据。一般地,预测单元不限于形状为方形。只要编码单元大于最小的(8×8)尺寸,其可具有其他形状,特别是形成方形编码单元之一的一半的矩形形状。其目标将是容许相邻预测单元的边界匹配(尽可能地接近)图片中的实际物体的边界,使得不同的预测参数可被应用于不同的实际物体。各编码单元可含有一个或多个预测单元。
图12示意性示出变换单元(TU)的阵列。变换单元为变换处理和量化处理的基础单元。变换单元始终为方形并可采用从4×4至32×32样本的尺寸。各编码单元可含有一个或多个变换单元。图12中的首字母缩写词SDIP-P表示所谓的短距离帧内预测分割。在此配置中,仅使用一维变换,所以4×N区块被传递通过N变换,其中待变换的输入数据基于当前SDIP-P内的先前解码的相邻区块及先前解码的相邻线。
现在将讨论帧内预测处理。一般而言,帧内预测涉及从相同图像中的先前编码和解码的样本产生样本的当前区块的预测(预测单元)。图13示意性示出部分编码图像800。在此,图像基于LCU而从左上至右下被编码。部分通过完整图像的处置而编码的实例LCU被显示为区块810。区块810之左上半的阴影区820已被编码。区块810的内容的图像内预测可利用任何的阴影区820但无法利用其下方的无阴影区域。
区块810代表LCU;如以上所讨论,针对图像内预测处理之目的,此可被子划分为一组较小的预测单元。预测单元830之一实例被显示于LCU 810内。
图像内预测考虑当前LCU 810的上方和/或左方的样本。源样本(从这些样本预测所需样本)可被置于在LCU 810内相对于当前预测单元的不同位置或者方向。为了决定哪个方向适于当前预测单元,比较基于每个候选方向的试验预测的结果,以便看到哪个候选方向提供最接近输入图像的相应区块的结果。选择提供最接近的结果的候选方向,作为该预测单元的预测方向。
图片还可以基于“切片(slice)”被编码。在一个实例中,切片为LCU的水平相邻组。但更一般而言,整个残留图像可形成切片,或者切片可为单一LCU,或者切片可为LCU的行等等。切片可提供对误差之韧性(resiliencer,耐性),因为其被编码为独立单元。编码器及解码器状态在切片边界完全重置。例如,帧内预测不跨越切片边界执行;为此,切片边界被作为图像边界处理。
图14示意性示出一组可能的(候选)预测方向。整组34个候选方向可用于8×8、16×16、32×32样本的预测单元。4×4及64×64样本的预测单元尺寸的特殊情况具有对于他们可用的减少组的候选方向(分别为17个候选方向及5个候选方向)。这些方向由相对于当前区块位置的水平及垂直位移所决定,但被编码为预测“模式”,其一组被显示于图15中。注意:所谓的DC模式代表周围的上边样本及左边样本之简单算术平均值。
图16示意性示出锯齿扫描,是可由扫描单元360应用的扫描图案。在图16中,该图案被显示针对8×8变换系数的示例区块,DC系数被置于该区块之左上位置840上,且增加的水平和垂直空间频率由左上位置840朝下及朝右增加距离下的系数所表示。
要注意的是,在一些实施方式中,可以按照相反顺序扫描系数(使用图16的排序符号,右下角到左上角)。而且,还应注意的是,在一些实施方式中,在执行剩余系数的之字形(zig-zag,锯齿形)之前,扫描可以在几个(例如,在1个与3个之间)最上面的水平行上从左到右进行。
图17示意性示出CABAC熵编码器的操作。
在这种性质(nature)以及根据实施方式的上下文适应编码中,数据的位可以关于概率模型或上下文被编码,表示预期或预测该数据位有多大可能是1或0。要做到这一点,给输入数据位分配在一个范围的代码值的两个(或者更一般而言,多个)互补子范围中的所选择的一个内的代码值,子范围的相应尺寸(size,大小)(在实施方式中,相对于这组代码值的子范围的相应比例)由上下文(这又由与该输入值相关联的或者其他相关的上下文变量限定)限定。下一个步骤是响应于分配的代码值和所选择的子范围的当前尺寸,修改总体范围,即,该组代码值(关于下一个输入数据位或值而使用)。如果修改的范围然后小于表示预定的最小尺寸的阈值(例如,原始范围尺寸的一半),那么增大尺寸,例如,通过使修改的范围翻倍(向左移动),如果需要的话,可以连续(不止一次)执行翻倍处理,直到该范围具有预定的最小尺寸。此时,生成输出的编码数据位,以表示发生一次(或者各次(如果不止一次))翻倍或者尺寸增大操作。进一步的步骤是修改上下文(即,在实施方式中,修改上下文变量),以供与下一个输入数据位或值一起或关于下一个输入数据位或值(或者,在部分实施方式中,关于要编码的下一组数据位或值)使用。可以通过将当前上下文和当前“最可能符号”的身份(1或0,无论哪一个由上下文表示目前具有大于0.5的概率)作为指数进入新上下文值的查找表内,或者作为输入至可以用于导出新上下文变量的合适数学公式中,来执行该步骤。在实施方式中,上下文变量的修改可以增加该组代码值在被选择用于当前数据值的子范围内的比例。
CABAC编码器关于二进制数据(换言之,仅由两个符号0与1所代表的数据)进行操作。编码器利用一种所谓的上下文建模处理,该处理根据先前编码的数据选择用于后续数据的“上下文(context,背景)”或概率模型。上下文的选择以一种确定性方式执行,使得根据先前解码的数据可在该解码器上执行相同的决定而无需进一步的数据(指定上下文)被加至被传递至解码器的编码数据流。
参考图17,待编码输入数据可被传递至二进制转换器900(如果其尚未是二进制形式);如果该数据已是二进制形式,则转换器900被旁路(由示意性的开关910)。在本实施方式中,转换至二进制形式实际上通过将量化的变换系数数据表达为一连串二进制“图(map)”来执行,其二进制“图”将在下文进一步描述。
二进制数据接着可由两个处理路径之一处理:“正常(regular)”及“旁路”路径(其被示意性显示为分开的路径,但在以下所讨论之实施方式中,其可实际上由相同的处理级(processing stage)来实施,仅使用稍微不同的参数)。旁路路径利用所谓的旁路编码器920,其不一定利用与正常路径相同形式的上下文建模。在CABAC编码之某些实例中,如果有需要特别快速地处理一批数据时则可选择此旁路路径,但在本实施方式中,注意所谓的“旁路”数据之两个特征:第一,旁路数据由CABAC编码器(950、960)处理,仅使用一代表50%概率之固定上下文模型;第二,旁路数据涉及某些类别的数据,一具体实例为系数符号数据。否则,由示意开关930、940选择正常路径。这涉及数据由上下文建模器950处理、然后由编码引擎960处理。
图17中所示之熵编码器将数据(即,例如,对应于与残留图像之区块有关的系数之区块的数据)之区块编码为单个值,如果该区块完全由零值数据所形成时。对于没有落入此类别之各区块,即,含有至少部分非零数据区块,准备“重要图”。重要图可指示(针对待编码之数据的区块中之各位置)该区块中之相应系数是否为非零的。重要图数据(其为二进制形式)为本身CABAC编码的。重要图(significance map)之使用可帮助压缩,因为对于具有重要图指示为零的大小的系数,没有数据需被编码。此外,重要图可包括用以指示区块中之最终非零系数的特别码,使得所有最终高频/拖尾(trailing)零系数可从编码省略。重要图之后为(在编码位流中)限定由重要图所指明的非零系数之值的数据。
图数据的进一步等级也被准备且被CABAC编码。一个实例是如下的图:其作为二进制值(1=是,0=否)限定在重要图已指示为“非零”的图位置处的系数数据是否实际上具有“1”的值。另一图指明在重要图已指示为“非零”的图位置处的系数数据是否实际上具有“2”的值。进一步的图(对于重要图已指示系数数据为“非零”的那些图位置)指示数据是否具有“大于2”的值。另一图(再次对于识别为“非零”的数据)指示数据值之符号(使用预定的二进制标号,例如对于+为1、对于-为0,当然,反之亦可)。
在实施方式中,重要图及其他图从量化的变换系数例如由扫描单元360产生,并在进行CABAC编码之前,进行锯齿扫描处理(或根据帧内预测模式选自锯齿、水平光栅和垂直光栅扫描的扫描处理)。
在一些实施方式中,HEVC CABAC熵编码器使用以下处理编码语法元素:
将最低有效系数(按照扫描顺序)在TU内的位置编码。
对于每个4x4系数组(按照颠倒的扫描顺序处理组),将重要系数组标志(significant-coefficient-group flag)编码,指示该组是否包含非零系数。这对于包含最低有效系数的组不需要,并且对于左上角的组(包含DC系数),假设是1。如果标志是1,那么在其之后立即编码属于该组的下面的语法元素:
重要图:
对于在组中的每个系数,将标志编码,表示该系数是否重要(具有非零值)。由最低有效位置表示的系数不需要标志。
大于1的图:
对于具有重要图值1(从组的端部往回数)的高达8个系数,这表示幅度(magnitude)是否大于1。
大于2的标志:
对于具有大于1的图值1(最接近组的端部的值)的1个系数,这表示幅度是否大于2。
符号位:
对于所有非零系数,符号位被编码作为等概率的CABAC二进制(bin),在使用符号位隐藏时,可改为从奇偶性推断出最后的符号位(按照颠倒的扫描顺序)。
转义码:
对于幅度没有由更早的语法元素完全描述的任何系数,剩余部分被编码为转义码。
一般而言,CABAC编码涉及对于待编码之下一位根据其他先前编码的数据预测上下文、或概率模型。如果下一位与由概率模型所识别为“最可能”的位相同,则其“下一位符合概率模型”的信息的编码可以极佳的效率被编码。“下一位不符合概率模型”效率较低的编码,因此上下文数据的导出对于编码器的良好操作是重要的。术语“自适应(adaptive)”指的是上下文或概率模型在编码期间被调适(adapt)或改变,以尝试提供与(迄今未编码的)下一数据的良好匹配。
使用简单的类推,在书面英文语言中,字母“U”是相对不常见的。但在紧接在字母“Q”之后的字母位置中,实际上极为常见的。因此,概率模型可将“U”之概率设为极低的值,但如果当前字母为“Q”,则对于“U”为下一字母的概率模型可被设为很高的概率值。
在本配置中,CABAC编码被用于至少重要图及指示非零值为一还是二的图。旁路处理(其在这些实施方式与CABAC编码完全相同,但概率模型被固定在1与0的相等(0.5:0.5)概率分布的情况除外)被用于至少符号数据及指示值是否>2的图。对于那些识别为>2之数据位置,可使用单独的所谓逃脱数据(escape data)编码以编码数据的实际值。此可包括Golomb-Rice编码技术。
CABAC上下文建模及编码处理被更详细地描述于WD4:Working Draft 4of High-Efficiency Video Coding,JCTVC-F803_d5,Draft ISO/IEC23008-HEVC;201x(E)2011-10-28。
现在,略微更详细地描述CABAC处理。
至少在用于所提出的HEVC***内而言,CABAC涉及关于要编码的下一位获得“上下文”或概率模型。然后,由上下文变量或CV限定的上下文影响如何编码该位。一般而言,如果下一位与CV限定为预期的更可能值的值相同,那么在减少限定该数据位所需要的输出位的数量方面具有优点。
编码处理涉及将待编码的位映射到代码值的范围内的位置上。代码值的范围在图18A中示意性示出为从下限m_Low延伸到上限m_high的一系列相邻整数。在这两个极限之间的差值是m_range,其中,m_range=m_high–m_Low。通过下面描述的各种技术,在基本的CABAC***中,m_range被限制为介于128与254之间;在使用更大数量的位表示m_range的另一个实施方式中,m_range可以介于256与510之间。m_Low可以是任何值。可以通过(比如)0开始,但是可以作为要描述的编码处理的一部分改变。
代码值的范围m_range由边界1100分成两个子范围,该边界相对于上下文变量限定为:
边界=m_Low+(CV*m_range)。
因此,上下文变量将总范围分成该组代码值的两个互补的子范围或子部分,分配给每个子范围的组的比例由变量CV确定,一个子范围与(下一个数据位的)值0相关联,并且另一个子范围与(下一个数据位的)值1相关联。范围的分割表示由要编码的下一位的两个位值的CV的生成假定的概率。因此,如果与值0相关联的子范围小于总范围的一半,那么这意味着认为0作为下一个符号的概率比1更小。
对于限定以哪种方式舍入适用于可能的数据位值的子范围存在各种不同的可能性。在一个实例中,该范围的低区域(即,从m_Low到边界)按照惯例限定为与数据位值0相关联。
如果在单个操作中编码不止一个位,那么可以提供不止两个子范围,从而提供与要编码的输入数据的每个可能值对应的子范围。
编码器和解码器保持哪个数据位值的记录为较小概率(通常称为“最小可能符号”或LPS)。CV涉及LPS,因此,CV始终表示在0与0.5之间的值。
现在,将下一位映射到由边界分割的范围m_range中。这使用下面更详细描述的技术在编码器和解码器上决定性进行。如果下一位是0,那么将表示在从m_Low到边界的子范围内的位置的特定代码值分配给该位。如果下一位是1,那么将在从边界到m_high的子范围内的特定代码值分配给该位。这表示实施方式可以根据当前输入数据位的值选择这组代码值的多个子范围中的一个的技术的一个实例,还表示实施方式可以在所选择的子范围内将当前输入数据值分配给代码值的技术的一个实例。
然后,重新限定下限m_Low和范围m_range,从而根据分配的代码值(例如,分配的代码值落在哪个子范围内)和所选择的子范围的尺寸修改这组代码值。如果刚刚编码的位是0,那么m_Low未改变,但是m_range重新限定为等于m_range*CV。如果刚刚编码的位是1,那么m_Low移动到边界位置(m_Low+(CV*m_range))并且m_range重新限定为在边界与m_high(即,(1-CV)*m_range)之间的差。
在这种修改之后,对这组代码值是否小于预定的最小尺寸(例如,m_range最小128)进行检测。
在图18B和18C中示意性示出了这些替换物。
在图18B中,数据位是1,因此,m_Low向上移动到先前的边界位置。这提供了修订或修改过的一组代码值,用于下一位编码序列中。要注意的是,在一些实施方式中,对于下一位编码,至少部分在刚刚编码的位的值上改变CV值。这就是该技术涉及“自适应(adaptive)”上下文的原因。CV的修订值用于生成新边界1100’。
在图18C中,编码值0,因此,m_Low依然未改变,但是m_high移动到先前的边界位置。值m_range重新限定或修改为新值m_high–m_Low。
在这个实例中,这造成m_range降低为低于其最低允许值(例如,128)。在检测这个结果时,值m_range被重新正常化或者增大尺寸,在本实施方式中,表示以需要的次数将m_range翻倍(向左移动1位),从而将m_range恢复为128到256的要求范围。在图18D中示出了其一个实例,表示图18C的范围,该范围翻倍,以便符合要求的约束条件。从下一个值CV和修订的m_range导出新边界1100’。要注意的是,每当m_range被重新正常化时,m_Low类似地重新正常化或者增大尺寸。这样做,以便在m_Low与m_range之间保持相同的比率。
每当范围必须通过这种方式乘以2时,生成输出编码数据位,1用于重新正常化阶段。
通过这种方式,根据CV值(可以在解码器上再生)和编码位流的自适应(adaptation),连续修改和重新正常化间隔m_range和下限m_Low。在一系列位被编码之后,重新正常化阶段所产生的间隔和数量唯一地限定编码的位流。了解这种最终间隔的解码器原则上能够重构编码数据。然而,基础数学显示了实际上对解码器不需要限定间隔,而是仅仅在该间隔内限定一个位置。这就是分配的代码值的目的,这个代码值保持在编码器上并且在编码数据结束时传递给解码器。
为了提供一个简化实例,考虑将概率空间分成100个间隔。在这种情况下,m_Low表示概率空间的底部,并且0和m_Range表示其尺寸(100)。假设这个实例的目的在于将上下文变量设置为0.5(因为其与旁路路径相关),因此,概率空间要用于将二进制位编码,具有固定的概率50%。然而,如果使用上下文变量的自适应值,那么适用相同的原理,使得在编码器和解码器上发生相同的自适应处理。
对于第一位(bit,比特),每个符号(0或1)具有50的符号范围,其中输入符号0分配(例如)值0到49,并且输入符号1被分配(例如)值50到99。如果1是要编码的第一位,那么流的最终值必须在50到99范围内,因此,m_Low变成50,并且m_Range变成50。
为了编码第二位,该范围进一步细分成25的符号范围,输入符号0采用值50到74,并且输入符号1采用值75到99。可以看出,无论哪个符号编码为第二位,最终值都依然在50与99之间,保留第一位,但是现在,第二位已被编码到相同的数字内。同样,如果第二位使用与第一位不同的概率模型,那么依然不影响第一位的编码,这是因为细分的范围依然是50到99。
这个处理在每个输入比特的编码器侧上继续,在必要的地方重新正常化(例如,翻倍)m_Range和m_Low,例如,响应于m_Range下降为低于50。在编码处理结束时(在流结束时),最终值已被写入流内。
在解码器侧上,从流中读取最终值(因此,名称m_Value),举例来说,该值是68。解码器应用分割至初始概率空间的相同符号范围并且比较其值,以查看其位于哪个符号范围内。看到68在50到99范围内,将1解码为用于其第一位的符号。应用通过与编码器相同的方式分割的第二范围,看到68在50到74范围内,并且将0解码作为其第二位,以此类推。
在实际的实施中,通过从m_Value中减去每个解码符号的范围的底部值(在这种情况下,从m_Value中减去50,剩下18),解码器可以避免与编码器一样保持m_Low。然后,符号范围始终是0到(m_range–1)范围的细分部分(因此,50到74范围变成0到24)。
重要的是,注意,如果通过这种方式编码仅仅两个位,那么编码器可以挑选在50到74范围内的任何最终值,并且这些值均解码成相同的两个位“10”(1之后是0)。如果编码进一步的位,并且实际上,HEVC编码器始终挑选50(范围的底部),那么仅仅需要更高精度。在本申请中讨论的实施方式寻求通过找出特定比特来利用未使用的范围,该特定比特在适当地设置时保证最终值被正确地解码,而与剩余比特的值是什么无关,使那些剩余比特不用携带其他信息。例如,最上面提供的样本编码器中,如果第一数字设置为6(或5),那么最终值始终在50到74范围内,而与第二数字的值无关;因此,第二数字可以用于携带其他信息。
可以看出,通过反复细分,位的连续流(endless stream)可以使用相同的概率范围(给定的无限精度分数(infinite-precision fractions))编码。然而,实际上,无限精度是不可能的,并且要避免非整数。为了这个目的,使用重新正常化。如果将50到74范围用于编码第三比特,那么符号范围通常必须均具有12.5间隔,但是相反,m_Range和m_Low可以分别翻倍(或者另外乘以共同因子)为50和100,现在,符号范围将是范围100到149的细分部分,即,均具有25间隔。这个操作等同于将初始概率空间的尺寸从100逆动地翻倍为200。由于解码器保持相同的m_Range,所以可以应用与编码器相同次数的重新正常化。
上下文变量CV限定为具有(在一个示例实施方式中)64个可能的状态,这些状态连续表示不同的概率,从在CV=63时的下限(例如,1%)到在CV=0时的50%概率。
在自适应***中,根据各种已知的因素,CV从1位变成或者修改成下一位,根据要编码的数据的块尺寸,这些因素可以不同。在一些情况下,可以考虑相邻的和先前的图像区块的状态。因此,在此处描述的技术是修改上下文变量的实例,以关于下一个输入数据值而使用,从而在给当前数据值选择的子范围内增大这组代码值的比例。
选择子范围、将当前位分配给代码值、修改这组代码值、检测该组是否小于最小尺寸、以及修改上下文变量的功能均可以由共同作用的上下文建模器950和编码引擎960执行。因此,虽然为了说明的清晰度,在图17中绘制为分开的项目,但是它们共同作用以提供上下文建模和编码功能。然而,为了更清晰,参照图19,该图更详细地示出了这些操作和功能。
从表格生成分配的代码值,对于CV的每个可能值和m_range的位6和7的每个可能值(要注意的是,m_range的位8始终是1,这是因为对m_range的尺寸的约束),该表格限定一个位置或一组位置,最近编码的位应该在所述位置被分配在相关子范围内的代码值。
图19示意性示出了使用上述技术的CABAC编码器。
CV由CV推导单元1120发起(在第一CV的情况下)或修改(在后续CV的情况下)。代码产生器1130例如使用上述表格根据CV分割当前m_range,选择子范围,并且在合适的sub_range内生成分配的数据代码。范围重置单元1140将m_range重置为所选择的子范围的范围,以便如上所述地修改这组代码值。标准化器1150检测m_range的产生值是否低于最小可允许值,并且必要时,将m_range重新正常化1次或多次,为每个这种重新正常化操作输出所输出的编码数据位。如上所述,在处理结束时,还输出分配的代码值。
在图20中示意性地示出的解码器中,CV由通过与在编码器中的单元1120相同的方式操作的CV推导单元1220发起(在第一CV的情况下)或修改(在后续CV的情况下)。代码应用单元1230根据CV分割当前m_range,并且检测数据代码位于哪个子范围内。范围重置单元1240将m_range重置为所选择的子范围的范围,以便根据分配的代码值和所选择的子范围的尺寸修改这组代码值。必要时,标准化器1250响应于所接收的数据位重新正常化m_range。
实施方式提供了一种终止CABAC流的技术。将以实例***为背景描述实施方式,在该实例***中,代码值范围具有最大值512(代替如上所述的128),因此,约束为在这个范围的上半部分内,即,从256到510。
该技术可以产生平均1.5位的损失(即,远远小于先前流终止技术所造成的损失)。还给出了了第二种替换方法,该方可以产生平均1比特的损失。建议这些技术的应用包括在发送IPCM(非频率分离)数据之前终止CABAC流,并且为每切片的行终止该流。该技术基于CABAC变量可以在终止时设置为在正确范围内的任何值这一认识。因此,CABAC变量设置为具有多个拖尾(最低有效位)零的值,以便在该值涌至数据流时,可以有效地忽略这些0。
在当前技术中,终止CABAC流使8位涌至数据流中(即,丢失或浪费)。利用如下实例示出该技术:在每个LCU或图像切片之后(即,在编码表示与特定的个图像子区域相关的一组数据值之后),终止内部帧(intra frames),允许以原始格式将系数旁路数据(符号位/转义码)放入位流内。
在每个切片的端部并且在IPCM数据之前应用终止CABAC流的处理。在实施方式中,此处理假设(为了本讨论的目的)流终止的概率固定为平均0.54%。(在数据值(1或0)被编码时,当前m_range被细分成两个符号范围,分别表示1或0的概率。对于特殊“流结束标志”值,1的符号范围始终是2。因此,数据值为1的概率取决于当前m_range的值。在一些实施方式中,如上所述,m_range可以在256与510之间变化,这样终止概率因此在2/510=0.3922%与2/256=0.7813%之间变化)。
对于编码器,此处理是:
如果流不被终止,那么CABAC范围m_range减小2,并且如果需要的话,CABAC引擎通过1个地方重新正常化(即,重新正常化m_Low和m_range);在当前CABAC流上的处理继续;
如果流要被终止,那么CABAC‘m_Low’增大‘小于2的范围’,该范围设置为2,并且CABAC引擎通过7个地方重新正常化,然后,输出进一步的二进制‘1’。该处理等同于8个地方的重新正常化,其中,迫使被重新正常化的值成为奇数。
可能存在以上处理不理想的情况,即,在流的概率是可变或者固定为更高的百分比或者甚至具有是确定的(概率1)的情况下。
实施方式可以提供如下方法:CABAC流可以利用仅2次重新正常化而被立即终止,1.5位的损失(平均),并且对解码器和编码器的复杂度具有微不足道的影响。还指出一种替代方法,该方法可以将开销减小为仅1位,但是以CABAC解码器复杂度增大为代价。于是,那么这两种方法都可以与标准的自适应上下文变量相结合使用(如果具有可变的终止概率),或者与固定百分比机制(类似于非自适应的上下文变量)相结合使用。
要注意的是,如上所述,m_Low和m_Range一起重新正常化。
1、算法
1.1、方法
编码器的步骤如下:
m_Low=(m_Low+128)&~127
{或者m_Low=(m_Low+127)&~127}
强制m_Low的2级重新正常化并调用test_write_out()
[将值写入流]
在编码下一CABAC流之前,设置m_Range=510,m_Low=0。
注释:&是AND运算,并且~表示二进制倒数(因此,~127是与十进制127对应的二进制值的二进制倒数,使得利用诸如十进制127的数(具有多个最低有效位或LSB等于1)的二进制倒数的AND运算等同于将所产生的值的LSB的数设置为0)。函数test_write_out()检查在m_Low顶部(MSB端部)的任何位是否有资格被发送给输出流,如果有资格的话,那么将它们写入。在上面示出的伪代码的上下文中,由“强迫的重新正常化”产生的新位将通过此运算被写入。
解码器的步骤如下:
将输入流倒回7位(即将读取位置回移7位).
在解码下一CABAC流之前,设置m_Range=0,并从位流读取m_value。
这种方法对解码器和编码器具有低的处理影响。
关于m_Low,要注意的是,编码器通过反复加入至m_Low来生成流。解码器通过以编码器的最终结果开始并且从其反复减去来读取该流。解码器调用从流“m_uiValue”(或在此描述的注释中的m_value)而非m_Low读取的位,并且应从位流中读取它。这与一些实施方式要求解码器保持m_Low以及m_uiValue的情况相关,因此,知道编码器正在做什么。在该情况下,通过与编码器的m_Low正好相同的方式,在解码器上生成m_Low。
替代方法
由于要求解码器保持m_Low,所以此方法增大了当前解码器的复杂度。如果其他建议需要保持m_Low,那么这个额外复杂度再次最小。
编码器的步骤如下:
使test256=(m_Low+255)&~255
如果(test256+256<m_Low+m_Range)
m_Low=m_test256
强制m_Low的1阶段的重新正常化并且调用test_write_out().
否则(如之前一样)
m_Low=(m_Low+128)&~127{或者m_Low=(m_Low+127)&~127}
强制m_Low的2阶段的重新正常化并且调用test_write_out().
在编码下一CABAC流之前,设置m_Range=510,m_Low=0.
解码器的步骤如下:
使test256=(m_Low+255)&~255
如果(test256+256<m_Low+m_Range)
将流倒回8位
否则(如之前一样)
将流倒回7位
在解码下一CABAC流之前,设置m_Range=0,设置m_Low=0,并且从位流读取m_value.
理论
对于CABAC编码器,写入流中的(或缓冲的)数据与m_Low串接,m_Low是n位值low,表示最终输出可以是最低值。最高值high是low和m_Range的总和,由编码器保持的变量在范围256(包括)到511(不包括)的范围内。在流结束时,可以选择在low(包括)与high(不包括)之间的任何值作为最终输出值,不影响解码。如果可以在不取决于该值的n个LSB的情况下发生解码,那么n个LSB可以使用位流的下一部分的数据代替。
假设v是在low与high之间的值,其中,n个LSB是0,并且其中,如果最后n个LSB是1,那么所产生的值V依然小于high。由于“high-low”至少是256,于是始终具有在low与high之间的值v,该值具有为0的至少7个LSB。即,值v是在low与high之间的第一值,可被128除尽,而没有余数。
实现此的最简单方式是标准的2的幂数调整程序(standard power-of-2alignment routine),即:
v=(low+127)&~127。
然而,由于范围至少是256,于是:
v=(low+128)&~127
也是充分的(并且产生略微更小的编码器)。
对于位流的当前部分,编码器将输出值‘v’,除了底部的7位以外,这通过将m_Low重新正常化2个地方来实现。在位流结束时,解码器从位流的下一个部分中读取7位,因此,必须将位流‘倒回(rewind)’7位。
存在底部8位不需要完全解码流的情况,最简单的示出是“m_Low=0”的情况,并且这些由替代算法探索。在此替代算法中,计算在low与high之间的值v,其中8个LSB是0,然后,应用测试,以检查是否具有相应的值V。此决定处理需要对low和high进行测试,并且由于解码器必须也做出相同的决定,所以解码器需要跟踪m_Low。
在编码器算法的这两个版本中,存在用于7位路径的选择,这会造成不同的位流,但是将可由相同的解码器解码。
参照上述图19,单元1120和1130表示选择器选择一组代码值的多个互补子范围中的一个并且数据分配单元将当前输入值分配给代码值的实施方式。单元1140表示数据修改单元的一个实施方式。单元1150表示检测器的实施方式,其用于检测这组代码值是否小于最小尺寸并且相应地执行该检测器的其他功能。单元1150还表示数据终止器的一个实施方式,其执行上述和下述数据终止功能并且尤其对何时终止流做出决定。
参照上述图20,单元1220、1230、1240以及1250共同表示指针控制器和设置单元的实施方式,这是因为它们可以操作用于执行关于这些单元的上述功能。
应用
其可能应用包括:
1、用于切片的最后解码的LCU的终止,尤其在‘每切片的行’型配置中,其中,概率明显高于0.54%;在这个设置中,实施方式可以提供一种数据编码方法,用于将表示视频数据的连续输入数据值编码,该方法包括以下步骤:根据当前输入数据值的值,选择多个互补子范围的一组代码值中的一个,子范围相对于这组代码值的比例由与该输入数据值相关联的上下文变量限定;将所述当前输入数据值分配给在所选择的子范围内的代码值;根据所选择的子范围的所述分配的代码值和尺寸,修改这组代码值;检测这组代码值是否小于预定的最小尺寸,并且如果小于的话,那么连续增大这组代码值的尺寸,直到至少具有预定的最小尺寸;并且响应于每个这种尺寸增大操作,输出编码的数据位;修改所述上下文变量,在下一个输入数据位或值方面使用,以便在给所述当前数据值选择的子范围内增大这组代码值的比例;并且在编码与在无需参照其他视频数据进行编码的视频数据的切片内的视频数据的一组区块对应的一组输入数据值之后,通过:将限定这组代码值的端部的值设置为等于0的具有多个最低有效位的值;增大这组代码值的尺寸;并且将限定这组代码值的端部的值写入输出数据中,来终止输出数据。
2、用于切片的最后可能的LCU的终止,与在切片的最后可能的LCU具有确定性的终止一样;在这个设置中,实施方式可以提供一种数据编码方法,用于将表示视频数据的连续输入数据值编码,该方法包括以下步骤:根据当前输入数据值的值,选择多个互补子范围的一组代码值中的一个,子范围相对于这组代码值的比例由与该输入数据值相关联的上下文变量限定;将所述当前输入数据值分配给在所选择的子范围内的代码值;根据所选择的子范围的所述分配的代码值和尺寸,修改这组代码值;检测这组代码值是否小于预定的最小尺寸,并且如果小于的话,那么连续增大这组代码值的尺寸,直到至少具有预定的最小尺寸;并且响应于每个这种尺寸增大操作,输出编码的数据位;修改所述上下文变量,在下一个输入数据位或值方面使用,以便在给所述当前数据值选择的子范围内增大这组代码值的比例;并且在编码表示无需参照其他视频数据进行编码的视频数据的整个切片的一组输入数据值之后,通过:将限定这组代码值的端部的值设置为等于0的具有多个最低有效位的值;增大这组代码值的尺寸;并且将限定这组代码值的端部的值写入输出数据中,来终止输出数据。
3、在IPCM数据之前的终止,可能与上下文变量相结合;在这个设置中,实施方式可以提供一种数据编码方法,用于将表示频率分离的视频数据的连续输入数据值编码,该方法包括以下步骤:根据当前输入数据值的值,选择多个互补子范围的一组代码值中的一个,子范围相对于这组代码值的比例由与该输入数据值相关联的上下文变量限定;将所述当前输入数据值分配给在所选择的子范围内的代码值;根据所选择的子范围的所述分配的代码值和尺寸,修改这组代码值;检测这组代码值是否小于预定的最小尺寸,并且如果小于的话,那么连续增大这组代码值的尺寸,直到至少具有预定的最小尺寸;并且响应于每个这种尺寸增大操作,输出编码的数据位;修改所述上下文变量,在下一个输入数据位或值方面使用,以便在给所述当前数据值选择的子范围内增大这组代码值的比例;并且在编码一组输入数据值,以便要编码的下一组数据值表示非频率分离的视频数据之后,通过:将限定这组代码值的端部的值设置为等于0的具有多个最低有效位的值;增大这组代码值的尺寸;并且将限定这组代码值的端部的值写入输出数据中,来终止输出数据。
4、用于防止“位显著”机构变得天长的流的终止;在这个设置中,实施方式可以提供一种数据编码方法,用于将连续输入数据值编码,该方法包括以下步骤:根据当前输入数据值的值,选择多个互补子范围的一组代码值中的一个,子范围相对于这组代码值的比例由与该输入数据值相关联的上下文变量限定;将所述当前输入数据值分配给在所选择的子范围内的代码值;根据所选择的子范围的所述分配的代码值和尺寸,修改这组代码值;检测这组代码值是否小于预定的最小尺寸,并且如果小于的话,那么连续增大这组代码值的尺寸,直到至少具有预定的最小尺寸;并且响应于每个这种尺寸增大操作,输出编码的数据位;修改所述上下文变量,在下一个输入数据位或值方面使用,以便在给所述当前数据值选择的子范围内增大这组代码值的比例;检测由不同的编码技术编码的一组数据值是否超过预定的尺寸,并且如果超过的话,那么通过:将限定这组代码值的端部的值设置为等于0的具有多个最低有效位的值;增大这组代码值的尺寸;并且将限定这组代码值的端部的值写入输出数据中,来终止输出数据。
该描述的以下部分涉及将编码器和解码器(例如,上述编码器和解码器)的操作扩展为具有更高的视频分辨率和相应较低(包括负数)QP的操作。如果编解码器确实支持高位深度,那么需要低操作QP。讨论由存在于编码器和解码器内(例如,由HEVC限定的编码器和解码器)的内部精度限制造成的误差的潜在来源。这些精度的一些变化可以减少误差,从而扩展HEVC的操作范围。此外,显示熵编码的变化。
在提交本申请时,HEVC版本1描述了8和10位编解码器;版本2包括12和14位操作。虽然写入了测试或演示软件,以允许数据数据位深度高达14,但是编解码器编码14位的能力不必与编解码器处理8或10位分辨率数据的方式对应。在一些情况下,内部处理可以引入噪声,这可以造成分辨率的有效损失。例如,如果14位输入数据的峰值信噪比(PSNR)很低,以至于最低有效的2位有效地减小为噪声,那么编解码器仅仅有效地通过12位分辨率操作。因此,适合于以具有内部操作功能的***为目标,这些功能允许使用更高的分辨率输入数据(例如,12或14位分辨率输入数据),而不引入这么多的噪声、误差或其他伪影,以便大量降低输出数据的有效(有用)分辨率降。
术语“位深度(bit depth)”和变量位深度(bitDepth)在此处用于表示输入数据的和/或在编解码器内执行的数据处理(后者也称为使用HEVC软件演示模型术语的“内部位深度”)(根据原文上下文)的分辨率。例如,对于14位数据处理,bitDepth=14。
在8和10位编解码器的背景中,讨论在正范围(QP>0)内的量化参数(QP)。然而,对于在输入数据的分辨率内的每个额外位(超过8位),最小可允许的QP(minQP)可以是-6,或者换言之:
minQP=-6*(bitDepth-8)
变量“PSNR”或峰值SNR限定为均方差(MSE)和位深度的函数:
PSNR=10*log10(((2bitDepth)-1)2/MSE)
在下面要讨论的图23中可以看出,无论实例编解码器实现方式的内部处理位深度是什么值,总体趋势都是PSNR在大约90dB时使峰值弯曲;对于更负的QP(与和PSNR曲线的峰值对应的QP相比),PSNR性能实际上退化。
将PSNR的等式,可以导出用于规定的位深度PSNR和MSE的以下表格:
如果14位编解码器仅仅能够实现72.2dB的PSNR,那么每个输出值仅仅精确到在对应的原始值的±4的范围内。因此,这两个最低有效位是有效的噪声,因此,编解码器实际上等于12位编解码器,在输出上添加两个额外的随机位。(重要的是,注意,这个分析基于平均值,并且实际上,在一部分图片中,可以实现比这个平均值更好或更差的质量)。
扩展这个论点,在通过这种单纯的数字方式比较PSNR时,可以认为,因此,最佳***实际上是具有无损编码的8位***,实现无限PSNR(MSE=0)。然而,这不考虑最初将视频从n位(其中,n最初高于8)舍入或截断降至8位时的损失。这种方法可以根据以下实例概括:
如果无损(n-1)位***可用于编码n位数据,那么在输出处,观察到的n位MSE将是(0+12)/2=0.5;
如果无损(n-2)位***可用于编码n位数据,那么在输出处,观察到的n位MSE将是(0+12+22+12)/4=1.5;
如果无损(n-3)位***可用于编码n位数据,那么在输出处,观察到的n位MSE是(0+12+22+32+42+32+22+12)/8=5.5;
如果无损(n-4)位***可用于编码n位数据,那么在输出处,观察到的n位MSE是(0+12+22+32+42+52+62+72+82+72+62+52+42+32+22+12)/16=21.5。
因此,返回具体实例,如果14位***不实现21.5或更小(等于71.0dB)的MSE,并且如果无损10位***的位速率相似,那么从数字上说,仅仅10位被有效地编码。
考虑具有‘m’的MSE的有损耗的低位深度(n-r)位***。如果这个***用于编码更高的位深度n位数据,那么因此,其MSE由(2r)2m规定。
例如,对于有损耗的(n-1)位***,在n位***内的MSE将是4m;对于有损耗的(n-2)位***,在n位***内的MSE将是16m;对于有损耗的(n-3)位***,在n位***内的MSE将是64m;并且对于有损耗的(n-4)位***,在n位***内的MSE将是256m。
因此,对于有损耗的更低位深度***编码更高(n位)位深度数据的情况,其损耗通常是在n位域中观察到的MSE的主要贡献者,因此,简单的PSNR图可以用作质量的直接比较。
HEVC编码器的实现方式(在提交申请时)的峰在90dB(如图23中所示);这可以被视为适合于编码11位数据,但是在这个操作点上,下面讨论是否可以获得任何进一步改进的问题。
首先,讨论误差的潜在来源。
核心HEVC***(版本1)被设计为用于8和10位运算。随着位数的增大,***的各部分的内部精度与造成总体分辨率的有效损耗的误差、噪声或伪影的潜在来源相关。
在图21中显示了阐明通过上面讨论的类型的编码器(例如,HEVC编码器)的数据的流动的简化示意图。通过在图21中显示的形式概述处理的目标在于,指示对在***内的操作分辨率的潜在限制。要注意的是,由于这个原因,所以在图21中并未显示所有编码器功能。还要注意的是,图21提供了用于编码数据组的输入数据值(可以是视频数据值)的设备的一个实例。进一步,要注意的是,(如上所述)在前向编码路径内使用的技术(例如,在图21中显示的)还可以用于编码器的互补逆解码路径内,并且还可以用于解码器的前向解码路径内。
将某个位深度的输入数据1300提供给预测阶段1310,该预测阶段还行帧内或帧间预测,并且从实际的输入图像中减去预测的版本,生成某个位深度的残留数据1320。因此,阶段1310通常与图5的项目320和310对应。
残留数据1320由变换阶段1330频率变换,该阶段涉及与在2D变换等式中的左边和右边矩阵乘法对应的变换处理(标记为阶段1和阶段2)的多个阶段,并且根据具有某个分辨率的一组或多组变换矩阵1340(变换可以由矩阵乘法处理实现)操作。称为MAX_TR_DYNAMIC_RANGE的变换处理的最大动态范围1350应用于在该处理中使用的计算中。根据MAX_TR_DYNAMIC_RANGE,变换阶段的输出是一组变换系数1360。变换阶段1330通常与图5的变换单元340对应。
然后,将系数1360传递给通常与图5的量化器350对应的量化阶段1370。量化阶段可以在量化系数和缩放列表1380的控制下使用乘法-移位机制,包括削减至最大动态范围ENTROPY_CODING_DYNAMIC_RANGE(在实施方式中,与MAX_TR_DYNAMIC_RANGE对应)。根据然后(在此处未显示的全编码器中)传递给熵编码阶段(例如,由图5的扫描单元360和熵编码器370表示的阶段)的ENTROPY_CODING_DYNAMIC_RANGE,量化阶段的输出是一组1390量化系数。
使用在图21中介绍的注释,下面在HEVC中讨论计算噪声、忽略(为了此讨论的目的)由各种预测造成的噪声整形以及RQT(剩余的四叉树)和RDOQ(速率失真优化量化)决定处理的主要来源:
变换矩阵系数值
理想地,应用于变换系数中的逆变换再现原始输入值。然而,这由计算的整数性质限制。在HEVC中,变换矩阵系数具有6个分数位(即,内在其向左移动6)。
在每个变换阶段之后将结果移动到MAX_TR_DYNAMIC_RANGE
正变换造成尺寸为bitDepth+log2(尺寸)位的值。在第一变换阶段之后,系数的位宽度应至少是bitDepth+log2(尺寸)(虽然额外位帮助保持更精确)。然而,在HEVC中,这些中间体在正(仅仅编码器)变换中移动,以便决不超过MAX_TR_DYNAMIC_RANGE;同样,用于第二阶段。在逆变换中,在每个阶段的输出上的值削减为MAX_TR_DYNAMIC RANGE。
如果MAX_TR_DYNAMIC RANGE小于bitDepth+log2(尺寸),那么在正变换中的值实际上在量化阶段中向左移动(而非向右),然后,削减为15位(ENTROPY_CODING_DYNAMIC_RANGE)。实际上,如果ENTROPY_CODING_DYNAMIC_RANGE小于bitDepth+log2(尺寸)+1,那么在QP小于(4-(6*(bitDepth-8)))时,发生削减。
在HEVC中,虽然在32x32区块内的系数可以削减,用于QP<-8,但是MAX_TR_DYNAMICRANGE(以及15的ENTROPY_CODING_DYNAMIC_RANGE)用于高达10位运算。此外,内部精度缺乏净空高度还可以给低QP造成误差。
在量化期间增加的噪声
虽然编码器和解码器的量化器和逆量化器在量化时会增加噪声,但是在应用缩放列表时,并且由于在阵列‘quantScales’和‘invQuantScales”内限定的量化系数不必是完美的倒数,所以可以无意中增加额外噪声。
下面讨论变换矩阵精度和MAX_TR_DYNAMIC_RANGE的效应。
通过分析所谓的SVT测试组(在16位中的1920x108050p,从4K视频开始缩小)的5个视频序列的编码,获得经验数据(在所谓的帧内编码配置文件下)。在这些序列中,仅仅前150个帧用于测试中。在提交本申请时,称为Traffic_RGB(在12位中的2560x160030p)的第六个序列由适用于HEVC的标准范围扩展测试条件限定。
在经验测试中,如果文件(输入数据)位深度小于正在测试的内部位深度(编解码器的输入位深度),那么填补样本(LSB设置为0);如果文件位深度大于内部位深度,那么样本缩放和舍入。
在以下讨论中,bitDepth用于描述内部位深度,而非输入数据的位深度。考虑***的内部位深度(bitDepth)高达16。
图22是位速率对量化参数(QP)的曲线图,其示意性示出了具有多个内部位深度的图21的编码器***的经验性能。图23是用于绿色通道的PSNR(基于一个通道更容易获得经验数据,并且绿色是最有助于观看者的对输出视频的感知的通道)对QP的曲线图。图22的曲线图由16位(QP-48到-26)、14位(QP-24到-14)、12位(QP-12到-2)、10位(QP 0到10)、以及8位(QP 12到22)处理的复合数据构成。垂直线1400示意性表示位深度改变的点。在图22中的多个曲线与使用不同的相应测试序列获得的结果对应。
图22示出了位速率通常随着QP单调改变。
参照图23,在QP是4以及以下时(在每个曲线上的最右边的3个数据点),用于bitDepth=8和bitDepth=10的PSNR急剧增大。在QP是4时,8位的量化除数是1(用于10位的QP-8),在DCT与IDCT之间并且在量化与去量化系数之间具有失配,作为误差仅仅可能的来源。由于***倾向于无损处理,所以MSE接近0,并且SNR向上飙升。图24是用于具有一系列不同的内部位深度(8、10、12、14、16)的一个测试序列的PSNR对位速率的曲线图。5个曲线几乎完全彼此层叠其最大范围,因此,不能容易区分。
在相同操作点上的10位***主要在两个最低有效位中具有误差,这表示在仅仅考虑8位精度时,也接近无损耗处理,但是如在本说明书中的其他地方所示,也必须考虑将10位视频转换成8位视频的行为。这增加了在考虑更低的精度时隐藏的(即,在这些经验测试中没有明确显示,但是依然造成更高的总体SNR)1.5的MSE。
在不由内容精度限制为峰值SNR的***中,在QP下降为低于(4-(6*(bitDepth-8)))时,每个bitDepth可以看出朝着无损处理的这种增大。这种图25中显示,该图是用于一系列位深度(8、10、12、14、16)的绿色通道PSNR对位速率的曲线图,具有MAX_TR_DYNAMIC_RANGE=21、ENTROIPY_CODING_DYNAMIC_RANGE=21和14位变换矩阵,禁用RDOQ并且禁用变换跳过。5个曲线彼此层叠,除了部分1420(8位曲线的)、部分1430(10位曲线的)、部分1440(12位曲线的)、部分1450(14位曲线的)以及部分1460(16位曲线的)以外。可以看出,对于相同数量的位,可以实现比在图24中显示的那些明显更高的SNR。
经验结果表明,在本公开的实施方式中,变换矩阵精度应至少是bitDepth-2。图26是比较各种精度DCT矩阵的用于bitDepth=10和MAX_TR_DYNAMIC_RANGE=17的一个测试序列的PSNR对位速率的曲线图。
在实施方式中,MAX_TR_DYNAMIC_RANGE应至少是大于bitDepth的5(其是最小值log2(尺寸))。额外精度显示为进一步提高编码效率。
在实施方式中,ENTROPY_CODING_DYNAMIC_RANGE应至少是大于bitDepth(用于由小于(4-(6*(bitDepth-8))的QP应用的“量化”因子加上用于最大值log2(尺寸)的5)的6(其是最小值log2(size))。在其他实施方式中,在最低QP值的削减不是问题的情况下,然后,ENTROPY_CODING_DYNAMIC_RANGE应至少是大于bitDepth的5(最小值log2(尺寸))。
对于16位***,变换矩阵精度应设为4,MAX_TR_DYNAMIC_RANGE应设为12,并且ENTROPY_CODING_DYNAMIC_RANGE应设为22。由于具有更多的内部精度很少被认为有害,所以还在不同的bitDepth上测试这些参数,产生结果,这些结果证明,对于相同数量的位,可实现明显更高的SNR,并且更大精度的***具有适合于高达16的bitDepth的PSNR/MSE操作点。
如果范围延伸旨在为所有位深度产生单个新配置文件,那么上述***合适。然而,如果为不同的最大bitDepth描述不同的配置文件,那么具有不同参数的值可用于降低不需要最高配置文件的***的硬件复杂度。在一些实施方式中,不同的配置文件可以限定不同的值,用于变换矩阵精度、MAX_TR_DYNAMIC_RANGE以及ENTROPY_CODING_DYNAMIC_RANGE。
在其他实施方式中,配置文件允许编码器从一系列容许值中选择一些或所有变换矩阵精度、MAX_TR_DYNAMIC_RANGE以及ENTROPY_CODING_DYNAMIC_RANGE的值或者边信息的函数,例如,bitDepth。然而,如果为配置文件限定变换矩阵精度,那么这需要多组变换矩阵,该转换矩阵精度与设计配置文件的最大位深度的推荐值对应。下面参照图28,提出了一组可能的配置文件。
在以下表格中显示变换矩阵精度、MAX_TR_DYNAMIC_RANGE、ENTROPY_CODING_DYNAMIC_RANGE以及bitDepth:
在表格中,标有‘*’的值削减为最小15,与HEVC的当前描述一致。标有的值大于规定为HEVC的当前描述规定的值,这些值分别是15和6。
如果要使用不同的配置文件,那么在本公开的实施方式中,这些规范可以用作极小值(注意,HEVC版本1的10位***不是很满足这些目标)。虽然这使更高位速率(更低QP)的PSNR退化,但是能够使用小于这些指示的极小值的值。
现在,转向CABAC***,如上所述,这提供了编码技术的一个实例,其涉及:根据当前输入数据值的值选择代码值组的多个互补子范围中的一个,所述代码值组由范围变量限定;将所述当前输入数据值分配给在所选择的子范围内的代码值;根据分配的代码值和所选择的子范围的尺寸,修改代码值组;并且检测限定代码值组的范围变量是否小于预定的最小尺寸,并且如果小于的话,那么连续增大所述范围变量从而增大代码值组的尺寸直到至少具有预定的最小尺寸;并且响应于每个这种尺寸增大操作,输出编码的数据位。在实施方式中,相对于代码值组的子范围的比例由与所述输入数据值相关联的上下文变量限定。CABAC设置的实施方式涉及:在编码输入数据值之后,修改所述上下文变量以关于下一个输入数据值而使用,从而在被选择用于当前数据值的子范围内增大代码值组的比例。
而且,如上所述,在一些实施方式中,HEVC CABAC熵编码器使用以下处理编码语法元素:
将最低有效系数(按照扫描顺序)在TU内的位置编码。
对于每个4x4系数组(按照颠倒的扫描顺序处理组),将重要的系数组标志编码,表示该组是否包含非零系数。这对于包含最低有效系数的组不需要,并且对于左上角的组(包含DC系数),假设是1。如果标志是1,那么随后立即编码属于该组的下面的语法元素:重要图;大于1的图;大于2的标志;符号位;以及转义码。
在图29中示意性示出了此设置。在步骤1500中,CABAC编码器检查当年组是否包含最低有效系数。如果包含的话,那么处理结束。如果不包含,那么处理继续进入步骤1510,在该步骤中,编码器检查当前组是否是包含DC系数的左上角的组。如果是,那么控制转到步骤1530。如果不是,那么在步骤1520中,编码器检测当前组是否包含非零系数。如果不包含,那么处理结束。如果包含的话,那么在步骤1530中,生成重要图。在步骤1540中,生成>1图,该图表示对于具有重要图值1的高达8个系数,从组的端部往后计数,幅度是否大于1。在步骤1550中,生成>2图。对于具有>1图值1的1个系数(最接近该组的端部的一个),这表示幅度是否大于2。在步骤1560中,生成符号位,并且在步骤1570中,对于幅度由更早的语法元素没有完全描述的任何系数(即,在步骤1530-1560中的任何步骤生成的数据),生成转义码。
对于在MSE小于1的操作点上的16位、14位或者甚至12位***(通常分别在QPs-34、-22以及-10),该***通常产生非常小的压缩(对于16位,实际上使源数据膨胀)。系数通常是大数量,因此,几乎总是转义编码的(escape-coded)。由于这个原因,所以通过将固定数量的LSB、BF放入每个系数的位流内,对熵编码器做出两个建议的变更以允许用于更高的位深度。在本质上,通过额外精度的替换路径将更高位***(例如,16位)有效地转换成更低位***(例如,10位),方案允许为8和10位运算开发的当前HEVC CABAC熵编码器在设计其的原始bitDepth上操作。有助于分割方法的效能,这是因为更低位***值明显更可预测,因此,适合于通过更复杂的编码方案编码,而更高位***所需要的额外经度不太可预测,因此,不容易压缩,并且复杂的编码方案不太有效。例如,16位***可以将BF配置为8。
编码器在位流内指示使用固定位方案,并且在使用方案时,确定固定位的数量的方式由编码器指示给解码器。那些方式是直接编码数量,或者指示如何从已经在位流内编码的存在于位流内的参数(包括QP、位深度和/或配置文件)或其组合中导出值BF。编码器还具有使用相同的方式指示不同图片、切片以及CU的不同BF值的选择,或者通过向为序列、图片、切片或先前CU获得的BF值指示δ值。BF值还可以被配置为针对不同的变换单元区块尺寸、不同的预测类型(帧间/帧内)以及不同的颜色通道而不同,其中,源视频的性质操纵编码器选择不同的参数。
基于QP的BF的一个实例推导如下:
BF=max(0,int(QP/-6))
基于位深度的BF的一个实例推导如下:
BF=bitDepth–8
基于变换单元区块尺寸和QP用于BF的一个实例推导如下:
BF=max(0,int(QP/-6)+2–log2(尺寸))
BF的不同值可以使用预编码器(试验)设置在编码器中确定,或者可以被配置为遵循预定规则。
熵编码实施方式1
为了允许在更高的位深度处理,对于小于bitDepth的多个固定位BF,HEVC熵编码器的处理变成以下处理:
将最低有效系数(按照扫描顺序)在TU内的位置编码。
对于每个4x4系数组(按照颠倒的扫描顺序处理各组),每个系数C分成最高有效部分CMSB和最低有效部分CLSB,其中,
CMSB=abs(C)>>BF
CLSB=abs(C)–(CMSB<<BF)
并且BF是从位流中确定的要使用的固定位的数量。
所讨论的CMSB和CLSB的生成提供了从输入数据值中生成相应的互补最高有效数据部分和最低有效数据部分的一个实例(在用于编码一系列数据值的技术方面),以便值的最高有效数据部分表示该值的多个最高有效位,并且相应的最低有效数据部分表示该值的剩余最低有效位。
将重要的系数组标志编码,表示该组是否包含CMSB的非零值。这是包含最低有效系数的组所需要的,并且对于左上角的组(包含DC系数),假设是1。如果标志是1,那么随后立即编码属于该组的下面的语法元素:
重要图:
对于在组中的每个系数,将标志编码,表示CMSB的值是否重要(具有非零值)。为由最低有效位置表示的系数编码标志。
大于1的图:
对于具有重要图值1的高达8个系数(从组的端部往回数),这表示CMSB是否大于1。
大于2的标志:
对于具有大于1的图值1的1个系数(最接近组的端部的一个),这表示CMSB是否大于2。
固定位:
对于在组中的每个系数,使用等概率的CABAC二进制,将CLSB的值编码作为旁路数据。
符号位:
对于所有非零系数,符号位被编码为等概率的CABAC二进制,在使用符号位隐藏时,可从奇偶性推断出最后的符号位(按照颠倒的扫描顺序)。
转义码:
对于幅度不完全由更早的语法元素描述的任何系数,剩余部分被编码为转义码。
然而,在重要系数组标志是0的情况下,那么随后立即编码属于该组的下面的语法元素:
固定位:
对于在组中的每个系数,使用等概率的CABAC二进制,将CLSB的值编码。
符号位:
对于所有非零系数,符号位被编码为等概率的CABAC二进制,在使用符号位隐藏时,可能从奇偶性中推断出最后的符号位(按照颠倒的扫描顺序)。
生成这些图和标志中的一个或多个,提供生成一个或多个数据组的实例,该数据组表示预定幅度的最高有效数据部分的相对于所述值的阵列的位置。利用CABAC对一个或多个图的编码提供使用二进制编码将所述数据组编码至输出数据流的一个实例。使用等概率的CABAC二进制对其他数据的编码提供包括在所述输出数据流内限定低有效(less-significant)部分的数据的一个实例,或者(使用其他术语)包括在所述输出数据流内限定低有效部分的数据的一个实例,包括使用算术编码来编码所述最低有效数据部分,其中,根据编码值范围的相应比例,将表示最低有效数据部分的符号编码,其中,描述最低有效数据部分的每个符号的编码值范围的相应比例具有相同的尺寸。然而,作为等概率的CABAC编码的替代,包括在所述输出数据流内限定低有效部分的数据的步骤可以包括在所述输出数据流内直接包括最低有效数据部分作为原始数据。
本公开的一个实施方式改变重要系数组标志的解释,以指示任何系数是否是非零(而非仅仅其CMSB对应物)。在这种情况下,不需要指示按照颠倒的扫描顺序包含最后系数的系数组(因为其将是1),并且在重要系数组标志是0时,不需要编码额外的语法元素。这提供了重要图包括数据标志的一个实例,数据标志表示具有非零值的最高有效数据部分的最后的根据值阵列的预定排序的位置。
在图30中示意性示出了后一种设置,图30在很多方面与图29对应。比较这两幅图,看出图30没有图29的步骤1500的相应步骤,与甚至对于包含最低有效系数的组发生处理这一事实对应。步骤1610和1620总体上与图29的步骤1510和1520对应。在新引入的步骤1625中,系数分成上述MSB和LSB部分。步骤1630、1640以及1650总体上与图29的相应步骤1530、1540以及1550对应,除了它们仅仅作用在分割的系数的MSB部分上以外。新引入的步骤1655涉及编码分割的系数的LSB部分作为如上所述的固定位。步骤1660和1670总体上与图29的步骤1560和1570对应。
这个修改可以有效地产生一种***,其中,CABAC熵编码器通过选择BF来在设计其的原始bitDepth上操作,以便等于编码器的设计位深度的多个MSB穿过CABAC编码,旁路编码更高位深度的LSB(其是最不可预测的,因此,是最不能压缩的)。例如,如果编码器是8或10位深度编码器,那么BF可以等于8或10。这提供了一个***的实例,其中,数据值序列表示具有图像数据位深度的图像数据;并且该方法包括将在每个最高有效数据部分内用作多个最高有效位的位数设置为等于图像数据位深度。
如上所述,技术可以(在一些实施方式中)应用于设置中,其中,数据值序列包括频率变换的图像系数的序列。然而,可以使用其他类型的数据(例如,音频或仅仅数字数据)。在图27中可以看出这个提议的结果,该图是示出根据位深度设置的DCT矩阵精度和MAX_TR_DYNAMIC_RANGE的用于一个测试序列的PSNR对QP的曲线图,示出了具有(曲线1680)和没有(曲线1690)旁路固定位编码的等效操作。具有固定位的***(相对于没有固定位的***)的位速率的节省从在QP 0中的5%变成在QP-48的37%。BF的最佳值取决于序列。BF的实例是8或10,如上所述。
熵编码实施方式2
在其他实施方式下的相似方案使用很多相同的处理步骤,但是保持重要图的原始功能,其中,标志值0表示系数值0(而非与在熵编码实施方式1中一样,用于系数的MSB部分的值0)。在考虑(通常光滑的)计算机生成的视频时(在预期0更常见的情况下),这可以更有用。对于小于bitDepth的多个固定位BF,这个熵编码实施方式包括以下处理步骤:
将最低有效系数(按照扫描顺序)在TU内的位置编码。
对于每个4x4系数组(按照颠倒的扫描顺序处理组),将重要的系数组标志编码,表示该组是否包含非零系数。这对于包含最低有效系数的组不需要,并且对于左上角的组(包含DC系数),假设是1。如果标志是1,那么每个系数C分成最高有效部分CMSB和最低有效部分CLSB,其中,
CMSB=(abs(C)–1)>>BF以及
CLSB=(abs(C)–1)–(CMSB<<BF)
所讨论的CMSB和CLSB的生成提供了从输入数据值中生成相应的互补最高有效数据部分和最低有效数据部分的一个实例(在用于编码一系列数据值的技术方面),以便值的最高有效数据部分表示该值的多个最高有效位,并且相应的最低有效数据部分表示该值的剩余最低有效位。
随后立即编码属于该组的下面的语法元素:
重要图:
对于在组中的每个系数,将标志编码,表示系数C是否重要(具有非零值)。由最低有效位置表示的系数不需要标志。
大于1的图:
对于具有重要图值1的高达8个系数(从组的端部往回数),这表示CMSB是否大于1。
大于2的标志:
对于具有大于1的图值1的1个系数(最接近组的端部的一个),这表示CMSB是否大于2。
符号位:
对于所有非零系数,符号位被编码作为等概率的CABAC二进制,在使用符号位隐藏时,可从奇偶性推断出最后的符号位(按照颠倒的扫描顺序)。
固定位:
对于在组中的每个系数,将CLSB的值编码。
转义码:
对于幅度不完全由更早的语法元素描述的任何系数,剩余部分编码,作为转义码。
生成这些图和标志中的一个或多个,提供生成一个或多个数据组的实例,表示预定幅度的最高有效数据部分的相对于所述值的阵列的位置。使用CABAC编码一个或多个图,提供使用二进制编码将所述数据组编码成输出数据流的一个实例。使用等概率的CABAC二进制编码其他数据提供包括在所述输出数据流内限定最低有效部分的数据的一个实例。
要注意的是,在输出流内的数据的各种分量的顺序具有各种选择。例如,参照符号位、固定位以及转义码,一组(即)n个系数(其中,例如,n可能是16)的顺序可能是:
n x符号位,然后n x组固定位,然后n x转义码;或者
n x符号位,然后n x(用于一个系数的转义码和固定位)。
在图31的流程图中示意性示出了这个设置。在此处,步骤1700…1770通过以下方式与图31和32的相应步骤对应,除非识别差异。要注意的是,步骤1755在图31中的步骤1760之后(相似的步骤1655位于在图30中的步骤1660之前)。
步骤1700总体上与图29的步骤1500对应。如果这不是包含最低有效系数(thelast significant coefficient)的组,那么控制进入步骤1710。步骤1710和1720与图30的步骤1610和1620对应。在与图30的步骤1625对应的步骤1725中,分割系数。然而,在步骤1730中,与前面讨论的步骤1630的设置相比,在重要图的推导中使用整个系数(暂时忽略在步骤1725中执行的分割)。步骤1740和1750仅仅作用在分割的系数的MSB部分上,并且在功能上与步骤1640和1650对应。除了在图32与33之间略微不同地阐明(通过实例)步骤的排序以外,步骤1755、1760以及1770与步骤1655、1660以及1670的功能对应。
在图28中可以看出比较这两个熵编码实施方式的结果。图28是为6个测试序列中的每个阐明相对于为熵编码实施方式1实现的结果(具有相同的参数)的熵编码实施方式2的位速率百分比改进的示图。
与熵编码实施方式1相比,熵编码实施方式2显示为对于负QP对某些源材料平均具有1%的更小效率,对于正QP,提高为大约3%。然而,对于某些更软的源材料,由于在系数内存在更多的0,所以观察到相反的情况。在一个实施方式中,编码器能够选择熵编码方法,并且将该选择信令给解码器。
由于与负QP的节省相比,正QP的节省更小,所以在QP是负时,可以启用熵编码修改。考虑到熵编码实施方式1显示了对于负QP具有高达37%的位节省,在与没有熵编码修改的***相比时,在这些操作点上,在这两个熵编码实施方式之间具有很少的差异。
因此,在实例实施方式中,频率变换的输入图像系数是根据从一系列可用量化参数中选择的一个可变量化参数量化的频率变换的输入图像系数,该技术可以包括:对于使用在这系列可用量化参数的第一预定子范围内的量化参数产生的系数,根据最高有效数据部分和最低有效数据部分,将所述频率变换的输入图像系数的阵列编码;并且对于使用不在这系列可用量化参数的第一预定子范围内的量化参数产生的系数,将所述频率变换的输入图像系数的阵列编码,以便在每个最高有效数据部分内的位数等于该系数的位数,并且相应的最低有效数据部分不包含位。
由于正在编码的数据量略微高于为标准的HEVC版本1操作点观察到的量,所以额外阶段适用于这两个建议的***,并且实际上,现在将结合本公开的进一步实施方式,讨论不能是或者不启用先前建议的***的***。
在为每个系数组编码旁路数据之前,这个额外阶段促使CABAC流进行位对准。由于现在直接从流中读出值,所以这允许更快速地(并且平行地)解码旁路数据,在解码旁路二进制时,去除了长除法的要求。
一种实现这个的机构是应用前面建议的CABAC终止方法。
然而,在现在描述的实施方式中,并未终止位流,CABAC状态与位边界对准。
在实施方式中,这组CABAC代码只包括由范围变量限定的从0到上限值的值,所述上限值在预定的最小尺寸(例如,256)与第二预定的值(例如,510)之间。
为了与流位对准,m_Range在编码器和解码器内仅仅设置为256。这明显表示编码和解码处理,允许通过原始格式直接从m_Value中读取二进制数据,因此,解码器一次可以同时处理多个位。
要注意的是,将m_Range设置为256的行为引起平均0.5的损耗(如果m_Range已经是256,那么没有损耗;如果m_Range是510,那么损耗大约1位;因此,在m_Range的所有有效值上的平均值是0.5位)。
多种方法可以用于减少由这些技术引起的损耗或可能的成本。图33到35是分别阐明由CABAC编码器执行的CABAC处理的终止阶段的版本的概略流程图。
根据图33,可以根据旁路编码的数据的预期数量的估计(例如,根据等于1的大于1标志的数量),选择是否位对准。如果预期具有一些旁路编码的数据,那么由于位速率可能更低,所以位对准昂贵(每个对准平均浪费0.5位)并且也不需要。因此,在图33中,步骤1800涉及通过检测设置了的>1标志的数量,并且比较该数量和阈值Thr,来检测旁路编码的数据的估计数量。如果估量超过阈值Thr,那么控制进入步骤1810,在该步骤中,选择位对准模式。否则,控制进入步骤1820,在该步骤中,选择非位对准模式。例如,对于在每个TU内的每个子组,图33的步骤可以重复。这提供了一个实例,编码表示不在数据组内表示的系数的数据,作为旁路数据;检测与当前阵列相关联的旁路数据的数量;并且如果所述旁路数据的数量超过阈值量,那么应用所述设置步骤,否则,不应用所述设置步骤。
参照图34,并未在每个系数组的端部编码旁路数据,可以在TU的CABAC二进制数据之后,共同编码TU的所有旁路数据。因此,每个编码的TU的损耗是0.5位,每个系数组的损耗并非0.5位。因此,在图34中的步骤1830中,应用测试,以检测在编码TU结束时,是否具有当前组。如果没有,那么不应用位对准(示意性表示为步骤1840),并且控制返回步骤1830。但是如果有的话,那么在步骤1850中,应用位对准。这提供了一种设置的实例,其中,输入数据值表示图像数据;并且其中,编码所述图像数据,作为变换单元,包括多个阵列的系数,所述方法包括在编码变换单元结束时,应用所述设置步骤。
在使用等概率机构编码的流内的其他或所有数据之前,还可以使用这个对准机构,虽然该机构可以降低效率,但是可以简化流的编码。
作为一个替换的对准,参照如图35,m_Range可以设置为预定值的数量N中的一个,而非仅仅256(例如,384与半个位对准)。由于对准值必须小于或等于m_Range的原始值(由于范围不能增大,与重新正常化不同),所以每个对准损耗然后(0.5/N)用于规则隔开的值。这种方法依然需要除以除了256以外的值,但是要提前知道分母,因此,使用查找表,可以评估除法。因此,在步骤1860中(在位对准的情况下应用),检测值m_range,并且在步骤1870中,根据m_range,选择对准值,用于位对准处理中。
作为这个替换的对准方法的进一步改进,可以使用作为2的幂的(不相等的)符号范围,在对准之后立即编码这个(或这些)二进制。通过这种方式,可以去除后续二进制的除法的所有要求,在位效率(0.5/N)上没有任何进一步损耗。
例如,在与384对准时,后续二进制的[0,1]的符号范围可以是[256,128:
如果编码0,那么m_Range设置为256,使编码二进制的成本为0.5位。
如果编码1,那么m_Range设置为128(并且将256加入m_Value中),并且重新正常化***(而且,m_Range变成256),使编码二进制的成本为1.5位。
由于预期0和1具有相等概率,所以在对准之后立即编码二进制的平均成本依然是1位。对于N=2并且两个对准点是256和384的情况,该方法是采取最大的对准点,该对准点小于或等于当前m_Range。如果该对准点是256,那么m_Range仅仅设置为256,以对准CABAC引擎;如果对准点是384,那么需要以上处理,这需要编码一个符号。
这在图32A和B中显示,并且在图32C到32F中显示了N=4的进一步实例。
为了阐明对准CABAC引擎的优点,用于解码等概率(EP)二进制(无需这个对准阶段)的方法可能如下表示:
如果(m_Value>=m_Range/2)
解码EP值为1。m_Value减去m_Range/2
否则
解码EP值为0.
然后,从位流读取下一位:
m_Value=(m_Value*2)+next_bit_in_stream
于是其工作实例是:
使m_Range=458并且m_Value=303,并且位流中的接下来两位是1
循环1:
m_Value>=229,这样下一编码EP值为1.m_Value=74
于是,从位流读取下一位:m_Value=74*2+1=149
循环2:
m_Value<229,这样EP值为0(m_Value未改变)
然后,从位流读取下一位:m_Value=149*2+1=299
解码的等概率二进制对于长除法的一个阶段相等,并且需要算术来测试不相等。为了将两个二进制解码,然后,这个实例处理使用两次,实现两阶段长除法处理。
然而,如果应用对准阶段,造成m_Range是2的最大有效幂(例如,用于9位HEVCCABAC熵编码器的256),那么简化以上处理:
编码的EP值是m_Value的最高有效位;
通过将其视为移位寄存器,在流内的下一个位中移动到最低有效位置,来更新m_Value。
因此,m_Value基本上变成移位寄存器,并且从最高有效位置中读取EP二进制,同时位流移动到最低有效位置内。因此,通过仅仅从m_Value的顶部中移动更多的位,可以读取多个EP位。
这个对准情况的工作实例是:
使m_Range=256,m_Value=189并且在位流内的接下来的两个位是1
循环1:
下一编码EP值是m_Value的位7,其为1;
通过移出位7并且将1从位流移入最低有效位置来更新m_Value:m_Value变成123。
循环2:
下一编码EP值是m_Value的位7,其为0;
通过移出位7并且将1从位流移入最低有效位置来更新m_Value:m_Value变成247。
所选择的对准点的数量N可以被视为在实现的复杂度与对准的位成本之间的权衡。对于每个对准点具有多个EP二进制的操作点,然后,浪费不太明显,并且具有更少点的对准***就足够。相反,对于每个对准点具有更少EP二进制的操作点,然后,浪费更明显,并且具有更多点的对准***优选;对于某些操作点,可以优选完全禁用对准算法。编码器以及因此位流可以表示解码器要使用的对准点的数量,可以根据用于数据流的该部分的操作点选择该数量。所指示的这个数量可以从存在于位流内的其他信息(例如,配置文件或水平)替代地推断出。
在对准位置仅仅是256和384的简单情况下,使用多个对准位置:
为了对准,
如果m_Range<384,仅设置m_Range=256,并且参见
以上用于解码的工作实例。
否则
设置m_Range=384,并且以下的处理
用于编码下一EP箱:
m_Range=384=256+128.
将256的符号范围分配给值0
并且将128的符号范围分配给值1用于下一待编码的EP二进制(EP bin)。
如果m_Value>=256,则 (MSB位测试操作)
下一EP值是1。
m_Value-=256 (实际上是位清除操作)
m_Range=128.
重新正常化(因为m_Range<256):
m_Range=256
m_Value=(m_Value*2)+next_bit_in_stream
否则
下一EP值为0。
m_Range=256.
然后,m_Range=256,并且以上的简单处理
可用于所有随后的EP箱.
在图29中显示了具有刚刚讨论的CABAC位对准机构的熵编码实施方式1的结果,该图是具有和没有用于N=1的位对准机构的用于6个序列的位速率差值对QP的示图。正位速率差值(在垂直轴上)表示具有位对准的***生成比没有位对准机构的方案更高的位速率。每个序列的位速率差值是每秒几千个系数组的数量的大约0.5倍(流量是2560x1600 30p=11520,所有其他是1920x1080 50p=9720)。
上面讨论的对准技术是以下情况的实例:在编码一组输入数据值之后,将所述范围变量设置为从可变范围变量值的预定子集中选择的一个值,在具有至少一个最低有效位的子集内的每个值等于0。子集可以包括最小尺寸(例如,256)。子集可以包括在预定的最小尺寸(例如,256)与第二预定的值(例如,510)之间的两个或多个值。可以根据范围变量的当前值,选择一个值。实施方式涉及如果范围变量的当前值在子集内在特定值与小于下一个更高值的值之间(例如,如图32A-32F中所示),那么从子集中选择一个特定值。在一个特定实例中,所述可用值的子集包括由256、320、384以及448构成的组;设置所述范围变量的步骤包括根据所述范围变量的当前值从所述子集中选择值,以便如果所述范围变量的当前值在256与319之间,那么所述范围变量设置为256,如果所述范围变量的当前值在320与383之间,那么所述范围变量设置为320,如果所述范围变量的当前值在384与447之间,那么所述范围变量设置为384,并且如果所述范围变量的当前值在448与510之间,那么所述范围变量设置为448。在另一个实例中,设置所述范围变量的步骤包括根据所述范围变量的当前值从所述子集中选择值,以便如果所述范围变量的当前值在256与383之间,那么所述范围变量设置为256,并且如果所述范围变量的当前值在384与510之间,那么所述范围变量设置为384。
在图30中陈述的选择被建议用作配置文件。
如果仅仅需要高配置文件来支持高达14的bitDepth,那么建议变换矩阵系数精度、MAX_TR_DYNAMIC_RANGE以及ENTROPY_CODING_DYNAMIC_RANGE分别设置为12、19以及20。
除了这些配置文件,还可以限定仅仅帧内主要/扩展配置文件,但是由于仅仅帧内解码器明显不如帧内/帧间解码器复杂,所以在此处仅仅描述了高帧内配置文件。
同样,可以限定用于通过各种色度格式编码静态图片的扩展/高配置文件。
更低配置文件可以需要使用与由两个配置文件产生的位流不匹配的更高配置文件所使用的那些相同的矩阵精度、MAX_TR_DYNAMIC_RANGE以及ENTROPY_CODING_DYNAMIC_RANGE。
现在,讨论各种选项。
选项1
在这个选择中,位深度决定变换矩阵精度、MAX_TR_DYNAMIC_RANGE以及ENTROPY_CODING_DYNAMIC_RANGE。这表示需要支持高达16的位深度的解码器需要通过一组不同的矩阵处理13位数据,并且虽然解码器具有支持高达21的能力,但是内部精度限制为仅仅18位,用于MAX_TR_DYNAMIC_RANGE。然而,使用高配置文件编码的12位数据可以由在更低配置文件中顺应的解码器解码。
选项2
在这个选择中,用于重叠的位深度的位参数由更低的配置文件确定,从而使用高配置文件将解码的12位数据编码,高配置文件使用符合扩展配置文件解码器可解码。此外,13位数据的内部精度与16位数据相同。此外,与在选项1中相比,需要支持少量矩阵精度。
在本上下文下,可以存储单组变换矩阵值,并且从其中获得所有其他值。
要注意的是,如果变换矩阵具有14位的初始精度,那么通常,通过除以2并且舍入,可以获得更低的精度。
使用这个一般规则来从更高的精度矩阵中获得更低的精度矩阵,会造成:
实例1
选项1:高4:4:4:限定变换矩阵精度=14;
从14导出变换矩阵精度=13...
扩展4:4:4:限定变换矩阵精度=14;
从14导出变换矩阵精度=10...
即,以“高”精度存储。
实例2
选项1:高4:4:4:限定变换矩阵精度=10;
从10导出变换矩阵精度=14...
扩展4:4:4:限定变换矩阵精度=10;
从14导出变换矩阵精度=10...
即,以“扩展的(Extended)”精度存储。
为了获得更好的质量,优选“实例1”。然而,实例2可以使得存储要求降低。
要注意的是,一种替换物当然是存储每个精度的变换矩阵组。“实例1”和“实例2”规则也可以用于“选项2”。
由于目标在于提高指令并且还分成配置文件,所以如果通过一个精度从单组中获得每个变换矩阵组,那么具有刻度误差。
在“实例1”的情况下,***从14位缩小变换矩阵,并且在“实例2”的情况下,***从10位放大和缩小变换矩阵。
选项3
即,虽然仅仅高4:4:4解码器能够解码使用高4:4:4方案编码的流,但是12位视频的位深度可以编码为“高4:4:4”或“扩展4:4:4”。
选项4
即,“高4:4:4”配置文件需要支持更低的“扩展4:4:4配置文件”,通过这个“选项4”,对编码12位视频的方式仅仅具有一个选择。
选项5
在这个选择中,矩阵精度限制为每个配置文件具有仅仅1个值,减少了编码器的开销。此外,MAX_TR_DYNAMIC_RANGE以及ENTROPY_CODING_DYNAMIC_RANGE由位深度决定,因此,仅仅需要编码13位数据的编码器不需要包括使用额外内部计算精度的实现开销。
选项6
选项6与选项5相似,但是仅仅在限定扩展配置文件用于编码12位数据的情况下。
总之,根据本公开的各种实施方式的提出的变化如下:
将至少一个额外的变换矩阵组用于更高的精度。
所有更高精度优选地具有单组,以简化多配置文件编码器/解码器。
为变换矩阵精度7到14提供所提出的变换矩阵-参照以下描述。
建议使用14位精度转换矩阵,这是因为这些适合于在16位数据类型的软件内,并且提供足够的精度,以允许进一步扩展为16位视频。
变换矩阵精度的选择可以由输入数据的位深度和配置文件配置,或者替代地,由在该序列、图片或切片水平上规定的参数确定。
MAX_TR_DYNAMIC_RANGE以及ENTROPY_CODING_DYNAMIC_RANGE可以改变,用于更高的精度。
MAX_TR_DYNAMIC_RANGE以及ENTROPY_CODING_DYNAMIC_RANGE的多个值应没有多配置文件编码器/解码器的问题。
建议获得MAX_TR_DYNAMIC_RANGE=bitDepth+5和ENTROPY_CODING_DYNAMIC_RANGE=bitDepth+6。
MAX_TR_DYNAMIC_RANGE=bitDepth+5的使用可以适合于视频材料的很多情况和类型。然而,现在讨论可能需要其中的一个变化。
经验测试表明,在某些情况下,对于视频序列的子集,尤其是具有低噪声内容的某些视频序列,使用MAX_TR_DYNAMIC_RANGE=bitDepth+5,引起响应曲线(提供在输出位速率与量化参数之间的关系)不单调。
通常,这种响应曲线单调,与在输出位速率与量化参数之间一样,以便更严厉的量化提供更低的输出位速率,并且不太严厉的量化提供更高的输出位速率。这个单调关系形成速率控制算法的基础,以便速率控制***调整量化参数,以在期望范围内或者在期望阈值下保持输出位速率。
但是在使用MAX_TR_DYNAMIC_RANGE=bitDepth+5的某些情况下,发现单调关系分解,以便例如,不太严厉的量化的变化实际上可以引起更低的输出位速率,或者甚至以便特定的输出位速率可以具有图片SNR的两个可能值。这些像差可以促使速率控制算法努力或者甚至没有达到期望的位速率。
在经验测试中,人们发现,使用MAX_TR_DYNAMIC_RANGE=bitDepth+6,可以克服这种问题。因此,在一些实施方式中,使用在MAX_TR_DYNAMIC_RANGE与bitDepth之间的这种关系。
在32x 32DCT矩阵的特定实例中,DCT处理倾向于在bitDepth上需要精度的log2(32)位,这就是获得bitDepth+5的值的方式。然而,量化处理可以增加精度的另一位的等同物。如果提供这个额外位,作为在DCT处理中的额外精度,那么可以获得明显更好的结果,至少用于一些视频材料。
然而,在经验测试中还发现,这个问题以及相应地使用MAX_TR_DYNAMIC_RANGE=bitDepth+6的解决方案仅仅与更大的DCT矩阵尺寸相关。允许在MAX_TR_DYNAMIC_RANGE与bitDepth之间具有不同的关系的优点可以在于,在不需要额外精度的情况下,这避免了不必要的处理开销。
尤其地,在本实例中,上述问题以及所提出的解决方案与32x 32DCT矩阵尺寸特别相关。对于更小的矩阵,可以使用关系MAX_TR_DYNAMIC_RANGE=bitDepth+5。
更一般而言,可以使用在MAX_TR_DYNAMIC_RANGE与bitDepth之间的关系的自适应变化,以便根据矩阵尺寸,偏移(加入bitDepth中的值,以生成MAX_TR_DYNAMIC_RANGE)改变。因此,MAX_TR_DYNAMIC_RANGE=bitDepth+偏移,其中偏移是矩阵尺寸的函数。在一个实例中,可以如下选择偏移值:
矩阵尺寸 偏移
32x 32 +6
低于32x 32的所有其他 +5
在另一个实例中,可以使用递进的关系,以便识别更多精度需要更高矩阵尺寸,而更低精度可以供更小矩阵尺寸使用:
矩阵尺寸 偏移
32x 32 +6
16x 16 +5
8x 8 +4
在偏移与矩阵尺寸之间的关系应相同,如在编码器的逆(解码)路径与解码器的解码路径之间一样。因此,需要建立或者传送关系,与在该技术的这三个区域之间一样。
在一个实例中,可以在编码器和解码器上建立关系,作为预定的硬编码关系。
在另一个实例中,可以明确传送该关系,作为编码的视频数据的一部分或者与其联合。
在另一个实例中,可以在编码器和解码器上从与编码的视频数据相关联的“配置文件”的身份中推断出关系。在此处,如在本说明书的别处所述,配置文件是用于编码或解码视频数据的一组参数的识别。在配置文件识别与由配置文件识别设置的该实际参数之间的映射预先存储在编码器和解码器上。例如,可以传送配置文件识别,作为编码数据的一部分。
然而,通常,值偏移取决于变换矩阵的矩阵尺寸。
与变换矩阵精度一样,MAX_TR_DYNAMIC_RANGE和ENTROPY_CODING_DYNAMIC_RANGE的选择可以由输入数据的位深度和配置文件配置,或者替代地由在该序列、图片或切片水平上规定的参数确定(可能是与选择DCT矩阵的参数相同的参数)。
这些设置提供了频率变换输入图像数据的实例,以根据所述变换的数据的最大动态范围并且使用具有数据精度的变换矩阵,通过矩阵乘法处理,生成频率变换的输入图像系数的阵列;并且根据所述输入图像数据的位深度,选择所述最大动态范围和所述变换矩阵的数据精度。
在实施方式中,可以将所述变换矩阵的数据精度设置为小于所述输入图像数据的位深度的第一偏移数量的位(例如2);并且可以将所述变换矩阵的最大动态范围设置为大于所述输入图像数据的位深度的第二偏移数量的位(例如5)。
熵编码可以变成包括某个固定位处理(参照熵编码实施方式1和2),以在具有低QP时,增大压缩。
可以在序列水平上配置固定位的存在。
可以在序列、图片(虽然由于图片参阵列不了解序列水平设置,所以这很困难)、切片或CU水平(可能通过从固定位的数量中信令δ,用于先前的序列/图片/切片/CU、上代实体或配置文件定义)上,配置固定位BF的数量。
熵编码可以变成包括CABAC位对准,以允许从流中提取旁路位,而不使用长除法(还可以优选地应用一个或多个上述位损失减少方法)。
因此,本公开的实施方式规定,内部精度增大,以容纳在范围扩展授权中的要求,以允许通过HEVC具有更高的位深度。研究了误差的各种来源,并且做出了推荐。此外,显示了对提高的编码效率的变化,并且还提出了提高吞吐量的变化。
更大精度变换矩阵
说明书的这个部分详细说明了具有各种水平的精度的变换矩阵。
4x4DST
变换矩阵具有以下形式:
其中,由矩阵系数精度根据以下表格(包括6位HEVC版本1矩阵值,用于比较)限定在栅格内的值:
6位 7位 8位 9位 10位 11位 12位 13位 14位
a 29 58 117 233 467 934 1868 3736 7472
b 54 110 219 439 878 1755 3510 7021 14042
c 73 148 296 591 1182 2365 4730 9459 18919
d 83 168 336 672 1345 2689 5378 10757 21513
e 0 0 0 0 0 0 0 0 0
组合的DCT矩阵
为了容易实现,可以描述单个32x32DCT矩阵M32,根据以下公式,通过子抽样(作为从具有不同的数据精度的相应源变换矩阵中获得具有需要的数据精度的变换矩阵的一个实例),从中获得每个更小的NxN DCT矩阵MN
MN[x][y]=M32[x][(2(5–log2(N)))y],x,y=0..(N–1)
组合的矩阵M32具有以下形式:
由矩阵系数精度根据以下表格(包括6位HEVC版本1矩阵值,用于比较)限定在栅格内的值:
为了提供参考,在此处显示从32x32矩阵中获得的更小DCT矩阵。在每个晶格内的值由矩阵系数精度根据以上表格限定。
4x4DCT
矩阵M4限定为每第8行组合的矩阵M32的前4个系数。
8x8DCT
矩阵M8限定为每第4行组合的矩阵M32的前8个系数。
16x16DCT
矩阵M16限定为每偶数行组合的矩阵M32的前16个系数。
参照图36和37,讨论涉及固定位编码的实施方式的进一步技术或者相关技术。
首先,然而,讨论用于编码转义码的技术。
所谓的Golomb-Rice编码将值v作为一元编码前缀。一元代码是由位于0之前的可变数(反之亦然)提供的表示,其中,前缀的“值”取决于数量1,例如,等于数量1(或者在其他实例中,等于数量1加上1),在该数量之后具有k位后缀。要注意的是,作为一个替换物,一元代码反而可以实现,作为位于1之前的0,其中,一元代码的值取决于数量0。
在本实例中,使prefix_length是在一元编码前缀内的总数1。使K是最低有效k位的值。
v=(prefix_length<<k)+K
(其中,<<m表示向左移动m位;相似的注释>>m表示向右移动m位)
位的总数等于prefix_length+1+k。
接下来,讨论所谓的指数哥伦布k阶码。在这种码中,要编码的数量分成可变长度的一元编码前缀和可变长度的后缀。后缀位的数量=prefix_length+k。在此处,prefix_length再次是在一元代码内的1的数量。
在代码内的位的总数=prefix_length+1+prefix_length+k。
使k是最后k位的值。
在prefix_length是0时,v等于k。
在prefix_length是1时,v在(1<<k)+K与(3<<k)+K之间。
在prefix_length是2时,v在(3<<k)+K与(7<<k)+K之间。
在prefix_length是3时,v在(7<<k)+K与(15<<k)+K之间。
要注意的是,在不同情况下,不包括上限,但是包括下限。
因此,v=((2^prefix_length)-1)<<k)+后缀。
在HEVC中,使用Golomb-Rice和指数哥伦布码。如果prefix_length小于3,那么代码解释为Golomb-Rice码。然而,如果prefix_length大于或等于3,那么代码解释为k阶的指数哥伦布码。前缀(在任一个***内)是一元代码的一个实例。后缀是非一元代码的一个实例。这两个***是两部分可变长度代码的实例。
在这种情况下,由于这是使用Golomb-Rice码不能表示的最小值,所以用于解码指数哥伦布码的prefix_length的值减小3,并且由解码操作造成的值增大(3<<k)。
如上所述,转义码是编码值,对于早期的语法元素未完全描述其幅度的任何系数,该编码值在转义码的代码格式(考虑值k以及该值的任何修改)允许的程度上表示剩余部分;转义-转义码是代码值,该代码值表示在编码转义码之后剩下的任何进一步过量。因此,一个或多个数据组(例如,重要图等)是编码数据值的第一部分的实例。必要时,转义码具有由参数k以及该值的任何修改限定的多个位,并且是编码数据值的第二部分的实例。必要时,转义-转义码可以使用相似的技术编码,并且是该编码数据值的第三部分的实例。
用于HEVC转义和转义-转义码的值“k”改变。对于每组16个系数,值k以0开始,并且每当系数值的幅度(在该组内的系数的有序序列内)大于3<<k时增大。响应于每次出现这种情况,k增大为最大值4。要注意的是,由于单独发送表示系数的符号的符号位,所以讨论涉及系数幅度。
图36是示意性示出用于如上所述生成转义码的处理的流程图。几个流程图步骤与前面讨论的步骤相似,并且不再详细描述。
该方法相对于一组数据值(例如,16的方形阵列)可操作,包括(例如)频率变换的图像系数序列、或该序列的非零成分、或者每个数据值的幅度减小1的该序列的非零成分(在最后一种情况下,由于重要图导致值1,所以可以首先生成重要图,以便在进一步处理之前,每个系数减小1)。
在步骤2000中,设置初始值k。在正常的HEVC***中,k最初设置为0。步骤2010、2020、2030、2040、2050以及2060与在图29-31的流程图中的步骤相似,并且在此处不进一步讨论。要注意的是,在图29-31以及图36中,在HEVC的一些实例实现方式中,每个系数并非需要生成所有图。例如,在一组(即)16个系数内,可以具有1个或多个系数,不生成一些图。
在步骤2070中,如果需要转义码,那么使用刚刚描述的技术,根据当前值k生成转义码。尤其地,首先使用重要图以及可选地一个或多个其他图,处理需要使用转义码的系数。要注意的是,在需要转义编码的系数的情况下,所使用的任何重要>1和>2图示记为“1”。这是因为需要转义编码的系数根据定义大于使用在该系数方面可用的任何图都可以编码的值。
如果还未完全编码当前数据值,那么需要转义码。在此处,术语“完全”编码表示数据值减去已经编码的值(例如,由图或者图加上固定位)是0。换言之,如果(考虑已经生成的分量)该数据值的剩余量是0,那么那些分量将数据值完全编码。
因此,假设对于未完全编码的一个实例系数,重要图和>1和>2图可用,这些图中的每个在系数方面标记为“重要”、“>1”以及“>2”。
这表示(在该实例中)未完全编码的并且需要转义码的系数必须至少是3。
因此,在转义编码之前,可以从系数中减去值3,不损失信息。在解码时,恢复值3(或者更一般而言,表示由适用于该系数的图限定的数值范围的变量base_level)。
以15十进制(1111二进制)的系数值为例,重要图是“1”,>1图是“1”,并且>2图是“1”。值base_level是3十进制位。从系数值中减去Base_level,以提供用于转义编码的12十进制(1100二进制)的值。
现在,值k(见上文)限定后缀位的数量。在减去base_level之后,从系数值的最低有效位中提取后缀位。如果(例如)k=2,那么剩余值1100的两个最低有效位被视为后缀位,即,在这个实例中,后缀位是00。处理和编码剩余位(在这个实例中,11),作为前缀。
因此,总之,与用于系数的转义码相关联的处理涉及:
生成限定系数的一个或多个最低有效位的一个或多个图,以便(如果需要转义码)系数必须具有至少base_level的值;
从系数中减去base_level;
编码系数的剩余部分的最低有效k位,作为后缀位;并且
编码系数的剩余部分的最高有效位,作为前缀。
然后,使用上述测试,如果值k需要改变,例如,响应于目前处理的系数的值大于3<<k,那么关于该组的下一个处理的系数,在步骤2080中实现变化,并且为步骤2070的下一个操作提供新值k。
可以给固定位(图30和31)的使用提供相似效应的转义码技术的修改是将偏移应用于限定在转义码中使用的后缀位数的值k中。
例如,在HEVC***中的值k具有范围0到4,并且转变(关于一组系数)是从起始点0到最大值4。在本技术的实施方式中,将偏移加入该值k中。例如,偏移可以预先确定为值param_offset,例如3,以便在编码一组系数的过程中改变k的现有技术将k从k=param_offset变成k=4+param_offset,而非将k从k=0变成k=4。
值param_offset可以预先在编码器与解码器之确定间。
或者,值param_offset可以从编码器和解码器中传送,例如,作为流、图片、切片或区块(例如,TU)报头的一部分。
或者,值param_offset可以在编码器和解码器上作为视频数据的位深度的预定函数导出,诸如(例如):
对于bit_depth≤10,param_offset=0
对于bit_depth>10,param_offset=bit_depth-10
或者,值param_offset可以在编码器和解码器上作为适用于区块或一组系数的量化(Qp)程度的预定函数导出;
或者,值param_offset可以取决于(例如,通过预定的方式)正在编码哪个视频分量、区块尺寸、模式(例如,无损或有损的)、图片类型等中的一个或多个。
或者,值param_offset可以基于自适应在编码器和解码器上导出,采用预定的起始点、或者在报头内传送的起始点、或者从(例如)bit_depth导出的起始点。下面参照图37讨论这种自适应处理的一个实例。下面参照图38讨论进一步的实例。
或者,可以应用这些标准中的不止一个。尤其地,在值param_offset取决于另一个参数(例如,区块尺寸)并且如以下图37中一样自适应改变,然后,自适应变化可以单独地应用于param_offset的每个可能值(即,分开用于每个区块尺寸)中。
要注意的是,关于在图30和31的配置中使用的固定位的数量,任何或所有这些依赖性可以适用。
比较这个修改技术和上面结合图30和31讨论的固定位技术,可以看出:
(a)在图30和31的固定位技术中,在生成任何图之前,系数被分割成更重要和不太重要部分,然后,从更重要部分生成一个或多个图,并且直接编码不太重要部分(或者如上所述的其他处理);但是
(b)在使用param_offset生成转义码时,首先生成一个或多个图,然后,系数值的剩余部分(减去值base_level)被处理为后缀或前缀,边界取决于k+param_offset在后缀与前缀之间,并且后缀表示剩余部分的最低有效位。
在任一种情况下,与固定位编码相关联的参数或值param_offset可以通过自适应的方式改变。现在,在参考图37讨论可以如何实现这个的方式的一个实例。参照图38讨论另一个实例。在图37中,根据以上讨论,相似的技术可以应用于固定位数(在图37中称为“NFB”,并且表示分别在图30和图31的步骤1625或1725中导出的最低有效部分的位数)或值param_offset(在图37中缩短为“偏移)中。
在参照图37的一个实例设置的以下讨论中,假设逐切片地进行偏移或NFB值的自适应。要注意的是,切片可以在HEVC族或***内限定为从一个LCU到整个图片的任何项,但是切片的基本特征是其编码独立于被应用于任何其他切片中的编码,以便个体切片可以解码,而无需参照任何其他切片。然而,当然,可以逐区块或逐个图片地发生自适应。
要注意的是,图37的处理在编码器上发生,而且,也以互补的解码形式在解码器上发生,使得偏移/NFB变量的值在编码器与解码器之间相同地追踪。
在步骤2100中,切片的处理开始。
在步骤2110中,重置偏移/NFB值。这可以涉及将值重置为固定值,例如0。在替代的配置中,值可以关于一个或多个先前的切片重置为从偏移/NFB变量的最终值导出的初始值。在这种情况下,为了保持独立地解码每个切片的能力,本技术的实施方式提供在切片报头内的偏移/NFB变量的初始值的指示。要注意的是,用于获得这种初始值的各种不同技术可用。例如,如果先前切片的该变量的最终值不超过2,那么偏移/NFB变量的初始值可以设置为0,否则,可以设置为1。一种相似的设置可以应用于从涉及在前图片的所有切片中获得的变量的平均最终值中。技术人员会理解的是,可利用各种其他可能性。例如,替代的起始点可以基于Qp或位深度(或这两者)。当然,如果使用预定的初始值,那么这可以由适用于编码器和解码器的标准定义提前同意,或者可以在流或图片报头内规定预定的初始值。
关于报头数据,标志可以包含在流、图片或切片报头内,以表示是否关于该流、图片或切片发生图37的自适应处理。
在步骤2120中,第一变换单元(TU)的处理开始。切片的处理逐个TU地继续,如前文所述。
在步骤2130中,重置另外三个变量,这次重置为0。这些变量称为低于(under)、超过(over)以及总数(total)。下面讨论这些变量的目的。
在TU内,轮流编码每个系数。在步骤2140中,编码下一个系数。系数的编码可以遵循图30/31的流程图或图36的流程图,在每种情况下,利用在处理中的该阶段适用的偏移或NFB值。当然,对于要编码的第一系数,偏移/NFB值等于在步骤2110中设置的值。对于稍后处理的系数,使用偏移/NFB的当前的或普遍的值。
关于步骤2140的编码结果应用测试。根据测试结果,控制进入步骤2150、2160或2170,或者直接进入步骤2180。首先,描述测试。要注意的是,根据使用图30/31的固定位***还是图37以及所附讨论的param_offset***,测试略微不同。
固定位测试
在固定位***的情况下,每当编码一组固定位时(每当执行步骤1655或步骤1755时),然后,变量“总数”增大。因此,由于变量最后重置,所以变量“总数”表示固定位已被编码的次数。在图37中,变量“总数”的增量示意性显示为在下面讨论的每个步骤2150、2160、2170中发生。
然后,测试导出变量remaining_magnitude,其被限定为并非作为固定位编码的系数幅度的一部分,使得:
remaining_magnitude=(幅度-1)>>NFB
(其中,“幅度”是系数幅度)。
另一个值base_level限定为(如上所述)可不使用转义码描述的最高幅度。在此处,要注意的是,特定系数可以具有关于系数编码的(例如)1、2或3个标志或图条目。因此:
如果系数具有>2标志,那么base_level=3;否则
如果系数具有>1标志,那么base_level=2;否则
base_level=1。
然后,再次对照base_level测试值remaining_magnitude。
如果((remaining_magnitude>>1)≥base_level),那么变量“低于”增大。在图37中,这与步骤2150对应。这个步骤的根本含义在于,检测了所谓的低于目标,使得固定位数(NFB)不足以编码当前系数。在测试中向右移动(>>1)的意义在于,如果变量NFB缺乏两个或更多个位,那么低于目标仅仅标记为值得注意的低于目标(以便有助于变量“低于”的增大)。
同样,如果((NFB>0)并且((remaining_magnitude<<1)≤0)),那么变量“超过”增大。在图37中,这与步骤2160对应。这个步骤的根本含义在于,如果甚至通过一个更少的固定位(在上面提供的表达式通过<<1移动来检测的),固定位分量能够编码系数的整个幅度,那么检测所谓的超过目标。换言之,固定位数明显超过编码该系数所需要的数量。
要理解的是,在这些测试中使用的各种参数(尤其是应用的位移数)可以根据抽象的技术人员的设计水平变化。
如果未满足低于目标或者超过目标测试,但是编码固定位,那么控制进入步骤2170,在该步骤中,仅仅变量总数增大。
为了完整性,要注意的是,控制直接进入图37的步骤2180,其中,不启用固定的位操作,以便任何变量(低于、超过以及总数)都不进行变化。
Param_Offset测试
在基于param_offset的系数的情况下,基本原理相似,并且讨论了相同的概略流程图,但是关于固定的位流,一些细节与上面讨论的略微不同。
每当编码转义值,变量“总数”增大。这示意性显示为在每个步骤2150、2160以及2170中发生。
对照参数k测试系数值(减去了值base_level,因此,等同于下面参照图38讨论的变量escapeCodeValue),如上所述,该参数限定为考虑偏移param_offset的效应。换言之,在此处使用的值“k”等于先前讨论的k(如上所述,在组内从0变成4)加上param_offset。
如果(escapeCodeValue>(3<<k)),那么变量“低于”增大。这与图37的步骤2150对应,并且表示低于目标的情况,如上所述。换言之,考虑param_offset,变量k不足以编码转义码,作为取决于该值k的两部分二进制代码。在这种情况下,如上所述,在编码转义码之后,根据任何进一步过量或剩余部分,生成转义-转义码。
另外,如果((escapeCodeValue*3)<(1<<k)),那么变量“超过”增大。这与图37的步骤2160对应。这表示超过目标的情况,其中,考虑param_offset,变量k提供具有基于比编码转义码所需要的更多后缀位的格式两部分二进制代码。
如果未满足低于目标或者超过目标测试,但是编码转义码,那么控制进入步骤2170,在该步骤中,仅仅变量总数增大。
而且,要注意的是,在不编码转义码的情况下,控制直接进入图37的步骤2180,以便任何变量(低于、超过以及总数)都不进行变化。
要注意的是,在任一组测试中,如果NFB或param_offset分别甚至更高或者甚至更低,那么通过检查发生低于目标还是超过目标,来检查低于目标还是超过目标重要。但是不需要这个额外边缘,测试可以仅仅是“发生低于(超过)目标?”。
在步骤2180中,如果另一个系数可用于在该TU内编码,那么控制返回步骤2140。否则,控制进入步骤2190,在每个TU结束时,但是在下一个TU编码之前,执行该步骤。在这个步骤2190中,变量偏移/NFB可能根据变量低于、超过以及总数自适应地变化。在此处,相同的自适应应用于偏移值或NFB值中,以便:
如果((低于*4)>总数,那么偏移/NFB值增大(1);以及
如果((超过*2)>总数,那么偏移/NFB值减小(1),经受最小值0。
要注意的是,如果在单个TU中通过这两个测试,那么在步骤2190中,NFB或param_offset的值保持相同。
要注意的是,除以切片并且然后除以TU,并非必需的,可以通过这种方式处理任一组值(可以甚至不是视频数据值),并且细分成子集,代替在本说明书中的TU除法。
如果经受25%以上的低于目标,那么这等同于增大偏移/NFB,但是如果经受50%以上的超过目标,那么这等同于减小偏移/NFB值。因此,用于低于目标测试的比例低于用于超过目标测试的比例。这个不对称的原因在于,低于目标比超过目标生成更多的无效率,这是因为在低于目标的情况下使用的转义编码方法的性质。然而,要理解的是,可以使用相同的阈值,或者可以使用不同的值。
最后,在步骤2200中,如果在切片内具有另一个TU,那么控制返回步骤2120。如果在切片内没有进一步TU,那么控制返回步骤2100。要注意的是,如上所述,可选地,偏移/NFB的开始点可以根据在刚刚完成的编码处理期间获得的结果设置(用于步骤2120的下一个实例中,用于下一个或未来的切片)。
在解码侧上(或者在编码器的解码路径上),执行互补步骤。例如,解码方法可以包括:将每个数据值的第一部分从一个或多个数据组中解码,所述数据组表示预定幅度范围的第一部分并且使用二进制编码,将所述数据组编码成输入数据流;解码所述数据组未完全编码的至少那些数据值的第二部分,第二部分的位数取决于值n,其中,n是整数,在所述输入数据流内包括限定第二部分的数据,并且如果相应的第一和第二部分未完全编码数据值,那么将数据值的剩余第三部分从输入数据流中解码;对于两个或多个数据值的子集,检测(i)数据值的多个实例,如果使用了n的更高值,那么已经编码并且依然需要第三部分,以及(ii)数据值的多个实例,编码了第二部分,但是n值促使数据值可以由第一和第二部分使用更低值n完全编码;并且在解码数据值的子集之后,根据检测步骤的结果,改变n以关于后续数据值而使用。
图38是关于param_offset变量(如上所述,加入k中)阐明上述技术的另一个实例的概略流程图。如前所述,在编码器和解码器(包括编码器的解码路径)上执行相应技术。
在步骤2300中,通过与上面讨论的步骤2100相似的方式,切片的处理开始。
在步骤2310中,例如,变量current_stat重新设置为起始值(关于该切片)0。如下面所讨论的,使用变量current_stat。
在步骤2320中,开始在当前切片内的一组16个系数的处理。在本实例中,关于每个这种组,下面讨论的处理最多发生一次。然而,要理解的是,分成这个特定尺寸的组,仅仅提供实例,并且可以使用其他组尺寸,例如,64个系数。在本实例中,组构成所有或一部分TU。
在步骤2330中,如下设置用于在所述组内编码任何两部分数据值的Golomb-Rice参数:
Golomb-Rice参数=k+INT(current_stat/4)=k+initialGolombRiceParameter(见下文),
其中,INT表示参与在圆括号内的项的整数值,即,丢弃任何小数部分。因此,例如,INT(5/4)=1。
要注意的是,这仅仅是Golomb-Rice参数的一个表达式,以便包括值k。在步骤2330中设置的Golomb-Rice参数的另一个表达式可以是:
Golomb-Rice参数=INT(current_stat/4)=initialGolombRiceParameter(见下文),
以便Golomb-Rice参数是加入k的值,以获得用于限定两部分编码的值。技术人员当然会理解的是,这是单纯记法的问题,而非技术差异。
因此,Golomb-Rice参数在每个系数组(在这个实例中,TU的4x4区域)的开始初始化。如下面所讨论的,这仅仅是使用current_stat的时间,而不修改current_stat。在当前组的处理期间,修改current_stat,但是仅仅在下一个组的开始实现任何变化(改变Golomb-Rice参数)。然而,在其他实例中,可以在下一个组开始之前实现改变Golomb-Rice参数。
在步骤2340中,可以如在上面的步骤2140中所讨论的,编码下一个系数。
步骤2350测试在步骤2340中的系数编码是否引起在该组中生成转义码的第一实例。如果引起,那么控制进入步骤2360。如果不引起,那么控制进入步骤2370。
在步骤2360中,关于在该组中生成转义码的第一实例,值current_stat(可能)如下改变:
使initialGolombRiceParameter=INT(current_stat/4),
如果escapeCodeValue>=(3<<initialGolombRiceParameter),那么增大current_stat,
否则,如果(((escapeCodeValue*2)<(1<<initialGolombRiceParameter))AND(current_stat>0)),那么减少current_stat。
在此处,在编码早期语法元素之后,escapeCodeValue是过量,这需要作为转义码来编码。在这个实例中,增大涉及增加1,并且在这个实例中,减少涉及减去1。
造成增大current_stat的上面陈述的测试有效地是是否需要转义-转义码的测试。如果是,那么增大current_stat。如果不是,那么不增大current_stat。
造成减少current_stat的上面陈述的测试考虑两个因素。首先,initialGolombRiceParameter的值(加入k中)是否超过(至少超过1)编码该转义码所需要的量?其次,current_stat是否大于0(预定最小值的实例)?如果这两个测试的回答是“是”,那么减少current_stat。
要注意的是,如上所述,在这个实例中,关于在每个组内的转义码的仅仅第一实例,在这个实例中,执行步骤2360。在其他实施方式中,关于引起转义码的其他编码值,可以执行测试。
控制进入步骤2370,在该步骤中,如果在该组中依然具有另一个系数,那么控制返回步骤2340。否则,控制进入步骤2380。
在步骤2380中,如果在切片中依然具有另一个组,那么控制返回步骤2320。否则,控制进入步骤2300。
要注意的是,与图37的设置相似,“INT”值用于使initialGolombRiceParameter和GolombRice参数与current_stat相关,除数是4(或者实际上,是大于1的任何除数),这表示initialGolombRiceParameter和GolombRice参数实际上在第一组中不改变,其中,转义码提示current_stat增大。根据这种转义码的检测的数量,两个或多个这种实例的子集需要提示initialGolombRiceParameter和GolombRice参数改变。使用“INT”函数以及大于1的除数,等同于量化current_stat的值,以获得initialGolombRiceParameter和GolombRice参数。
如前所述,在编码和解码侧上发生在图38中显示的步骤的相应处理,其中,解码侧可以包括编码器的解码路径,以便GolombRice参数的产生和发展完全在编码和解码函数之间穿过。
因此,在解码器侧上实现时,图38的设置提供一种用于解码一组数据值(在这个实例中,4x 4组)的数据解码方法的另一个实例,所述方法包括以下步骤:
将每个数据值的第一部分从一个或多个数据组中解码,所述数据组表示预定幅度范围的第一部分并且使用二进制编码,将所述数据组编码成输入数据流(数据组(例如,重要图、>1图和>2图)提供第一部分的实例;可以使用一个或多个这种数据组);
解码所述数据组未完全编码的至少那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,在所述输入数据流内包括限定所述第二部分的数据,并且如果相应的第一和第二部分未完全编码数据值,那么将数据值的剩余第三部分从所述输入数据流中解码(在此处,作为取决于在这个记法中称为n的参数的两部分代码来编码的转义码是第二部分的实例;可作为取决于n的两部分代码来编码的转义-转义码是第三部分的实例。要注意的是,记法n用于表示(参照这些实例)k和如上所述获得的变量参数的组合);
对于所述数据值(例如,具有转义码的每组的第一数据值)的子集,检测(i)第三部分已经被编码并且如果使用了n的更高值会依然需要第三部分的数据值的实例(例如,转义-转义码),以及(ii)第二部分已被编码但是n的值使得所述数据值能够使用n的更低值通过第一部分和第二部分被完全编码的数据值的实例;并且
根据检测步骤的结果,改变n(例如,步骤2360及其对下一组的在步骤2330中获得的Golomb-Rice参数的综合影响)以关于后续数据值而使用。
步骤2360及其对步骤2330的影响提供改变步骤的实例,所述改变步骤包括响应于检测到第三部分已被编码并且如果使用了n的更高值会依然需要第三部分的数据值的不止一个的检出实例,增大n。INT函数表示第一这种检测不易于对值n具有影响。
在步骤2360中的current_stat的推导提供改变n的步骤的实例,所述改变n的步骤包括:生成实例(i)和(ii)的累计计数(current_stat);并且使用如上所述的INT函数推导initialGolombRiceparameter,根据所述累计计数的量化版本,提供获得值n的实例。
上面讨论的测试(是高于0的current_stat,或者如果不是,那么不能减少)提供改变步骤的实例,所述改变步骤配置为不将n降低为低于预定的最小值。
相应的考虑因素适用于编码方法。
上面描述的步骤可以由熵编码器370和熵解码器410(在编码处理的情况下)或者仅仅由熵解码器410(在解码处理的情况下)执行。该处理可以在硬件、软件、可编程硬件等中实现。要注意的是,因此,熵编码器370可以用作编码器、发生器、检测器以及处理器,以实现编码技术。熵解码器410可以相应地用作一个或多个解码器、检测器以及处理器,以实现上述解码技术。
因此,上述设置表示用于将一组(例如,切片)数据值(例如,图像数据)解码的数据解码方法的实例,该方法包括以下步骤:
将每个数据值的第一部分从一个或多个数据组(例如,图)中解码,所述数据组表示预定幅度范围的第一部分并且使用二进制编码,将所述数据组编码成输入数据流;
解码所述数据组未完全编码的至少那些数据值的第二部分,第二部分的位数取决于值n,其中,n是整数,在所述输入数据流内包括限定第二部分的数据,并且如果相应的第一和第二部分未完全编码数据值,那么将数据值的剩余第三部分从输入数据流中解码(在此处,例如,第二部分可以表示固定位或者后缀部分;值n可以表示固定位的数量或者后缀长度(在Golomb-Rice编码中)或者如上所述的指数哥伦布码编码的顺序;第三部分可以表示在Golomb-Rice或指数哥伦布码***中的前缀或者在固定位实例中的转义码);
对于两个或多个数据值的子集,检测(i)数据值的多个实例(例如,变量“之下”),如果使用了n的更高值,那么已经编码并且依然需要第三部分,以及(ii)数据值的多个实例(例如,变量“之下”),编码了第二部分,但是n值促使数据值可以由第一和第二部分使用更低值n完全编码;并且
在解码数据值的子集之后,根据检测步骤的结果,改变n(例如,增大或减小)以关于后续数据值而使用。
变量“总数”表示实例的检测的总数的一个实例,关于数据值的该子集,编码第二部分。
以上实施方式还表示数据编码方法的一个实例,用于将数据值阵列编码成数据组以及所述数据组未编码的值的转义码,转义码包括一元编码部分和非一元编码部分,所述方法包括以下步骤:
设置限定非一元编码部分(在Golomb-Rice或指数哥伦布码中,k限定最小后缀长度或顺序)的最小数量的位的编码参数(例如,param_offset),所述编码参数在0与预定的上限之间;
将1或更大的偏移值(在实例中,param_offset)加入所述编码参数中,以便限定最小的最低有效数据部分尺寸;
生成一个或多个数据组(例如,重要图,>1、>2组),其表示预定幅度范围的数据值的相对于所述数据值的阵列的位置,以便将每个数据值的至少一个最低有效位的值编码;
从所述一个或多个数据组未编码的每个数据值的至少一部分中生成相应互补的最高有效数据部分和最低有效数据部分,以便值的最高有效数据部分表示该部分的0或更多最高有效位,并且所述相应的最低有效数据部分取决于该部分的多个最低有效位,所述最低有效位的数量大于或等于所述最小的最低有效数据部分尺寸;
将所述数据组编码成输出数据流(例如,二进制编码的数据);
将所述最高有效数据部分编码成所述输出数据流(例如,前缀);并且
将所述最低有效部分编码成所述输出数据流(例如,后缀)。
要注意的是,在生成重要图之后,可以执行以上处理(在一些实施方式中),以便可以通过以下步骤从相应的输入值中生成数据值(执行处理):生成进一步数据值,所述进一步数据值是重要图,所述重要图表示非零值的相对于输入值阵列的位置;并且从每个输入值中减去1,以生成相应数据值。
进一步实施方式由以下编号条款限定:
1.一种用于解码一组数据值的数据解码方法,所述方法包括以下步骤:
从一个或多个数据组解码每个数据值的第一部分,所述数据组表示预定幅度范围的第一部分并且使用二进制编码,将所述数据组编码至输入数据流;
解码至少所述数据组未完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,限定所述第二部分的数据包括在所述输入数据流内,并且如果相应的第一和第二部分未完全解码数据值,那么从所述输入数据流解码数据值的剩余第三部分;
对于两个或更多个数据值的子集,检测(i)第三部分已经被编码并且如果已使用了n的更高值会依然需要第三部分的数据值的情形(instance,情况/实例),以及(ii)第二部分已被编码但是n的值使得所述数据值使用n的更低值通过第一部分和第二部分可能已经被完全编码的数据值的情形;并且
在解码所述数据值的子集之后,根据检测步骤的结果,改变n以关于后续数据值而使用。
2.根据条款1所述的方法,其中,所述检测步骤包括检测第二部分被编码的关于数据值的该子集的情形的总数。
3.根据条款1或条款2所述的方法,其中,所述改变步骤包括如果第三部分已被编码的数据值的情形的数量超过第二部分被编码的、关于数据值的该子集的情形的总数的第一预定比例,那么将n的值增大。
4.根据条款3所述的方法,其中,所述改变步骤包括如果第二部分已被编码并且所述数据值通过第一部分和第二部分被完全编码的数据值的情形的数量超过第二部分被编码的、关于数据值的该子集的、情形的总数的第二预定比例,那么将n的值减小。
5.根据条款2所述的方法,其中,所述改变步骤包括如果第三部分已经被编码并且如果使用了n的更高值依然需要第三部分的数据值的情形的数量超过第二部分被编码的、关于数据值的该子集的、情形的总数的第一预定比例,那么将n的值增大。
6.根据条款5所述的方法,其中,所述改变步骤包括如果第二部分已被编码但是n的值使得所述数据值可能通过第一部分和第二部分使用n的更低值被完全编码的数据值的情形的数量超过第二部分被编码的关于数据值的该子集的情形的总数的第二预定比例,那么将n的值减小。
7.根据条款6所述的方法,其中,所述第一预定比例低于所述第二预定比例。
8.根据条款7所述的方法,其中,所述将n的值减小的步骤包括将n减小1,并且所述将n的值增大的步骤包括将n增大1。
9.根据前述条款中任一项所述的方法,包括为每个数据值生成相应的互补最高有效数据部分和最低有效数据部分,以便:
数据值的最高有效数据部分表示该值的多个最高有效位,从所述最高有效数据部分导出所述第一数据部分;并且
该数据值的最低有效数据部分表示该值的剩余n个最低有效位并且形成该数据值的第二部分。
10.根据前述条款中任一项所述的方法,其中,每个数据值的第一部分表示该数据值的一个或多个最低有效位。
11.根据条款10所述的方法,其中,数据值的第二和第三部分由两部分可变长度代码编码,以便所述第二部分表示一组后缀位,并且所述第三部分表示一个一元编码前缀。
12.根据条款10或条款11所述的方法,其中,使用算术编码来从所述输入数据流中解码所述第二数据部分,在算术编码中根据编码值范围的相应比例将表示所述第二数据部分的符号编码,其中,描述所述第二部分的每个符号的编码值范围的相应比例具有相同的尺寸。
13.根据前述条款中任一项所述的方法,其中,一个数据组是重要图,所述重要图表示非零的最高有效数据部分的相对于数据值的阵列的位置。
14.根据条款1到12中任一项所述的方法,其中,所述数据组包括:
大于1的图,表示大于1的最高有效数据部分的相对于所述值的阵列的位置;以及
大于2的图,表示大于2的最高有效数据部分的相对于所述值的阵列的位置。
15.根据前述条款中任一项所述的方法,其中,这组数据值包括频率变换的图像系数的序列、或者该序列的非零组分、或者将每个数据值的幅度已减小1的该序列的非零组分。
16.根据条款15所述的方法,其中,
这组数据值表示具有图像数据位深度的图像数据;以及
所述方法包括根据所述图像数据位深度设置n的初始值。
17.根据条款15或条款16所述的方法,包括根据以下中的一个或多个设置n的初始值的步骤:
编码模式;
要编码的视频数据分量;
数据值的子集的尺寸;以及
图片类型。
18.一种用于编码一组数据值的数据编码方法,所述方法包括以下步骤:
通过生成一个或多个数据组,将每个数据值的第一部分编码,所述数据组表示预定幅度范围的第一部分并且使用二进制编码,将所述数据组编码至成输出数据流;
生成至少所述数据组未完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,并且在所述输出数据流内包括限定所述第二部分的数据;
检测数据值是否已经通过相应的第一部分和第二部分被完全编码,并且如果未完全编码数据值,那么将数据值的剩余第三部编码至所述输出数据流;
对于两个或更多个数据值的子集,检测(i)已经编码并且如果使用了n的更高值依然需要第三部分的数据值的多个情形,以及(ii)已编码了第二部分但是n值使得所述数据值可能由第一和第二部分使用更低值n完全编码的数据值的多个情形;并且
在编码所述数据值的子集之后,根据检测步骤的结果,改变n以关于后续数据值而使用。
19.一种图像数据,由根据条款18所述的编码方法编码。
20.一种数据载体,存储根据条款19所述的图像数据。
21.一种计算机软件,在由计算机执行时,所述计算机软件促使所述计算机执行根据条款1到18中任一项所述的方法。
22.一种非临时机器可读存储介质,根据条款21所述的计算机软件存储在所述介质上。
23.一种用于编码一组数据值的数据解码设备,所述设备包括:
第一解码器,配置为将每个数据值的第一部分从一个或多个数据组解码,所述数据组表示预定幅度范围的第一部分并且使用二进制编码,将所述数据组编码成输入数据流;
第二解码器,配置为解码至少所述数据组未完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,在所述输入数据流内包括限定所述第二部分的数据,并且如果相应的第一和第二部分未完全编码数据值,那么将数据值的剩余第三部分从所述输入数据流解码;
第二检测器,配置为对于两个或更多个数据值的子集,检测(i)数据值的多个情形,对于该情形,第三部分已经被编码并且如果使用了n的更高值依然需要第三部分,以及(ii)数据值的多个情形,对于该情形,第二部分已被编码,但是n值使得所述数据值可使用更低值n通过第一和第二部分被完全编码;以及
处理器,在解码所述数据值的子集之后,所述处理器可操作,所述处理器配置为根据检测步骤的结果,改变n以关于后续数据值而使用。
24.一种配置为编码一组数据值的数据编码设备,所述设备包括:
编码器,配置为通过生成表示预定幅度范围的第一部分的一个或多个数据组来编码每个数据值的第一部分,并且配置为使用二进制编码将所述数据组编码至输出数据流;
发生器,配置为生成至少通过所述数据组未完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,并且在所述输出数据流内包括限定所述第二部分的数据;
第一检测器,配置为检测数据值是否已经通过相应的第一部分和第二部分被完全编码,并且如果未完全编码数据值,那么将数据值的剩余第三部编码至所述输出数据流;
第二检测器,配置为对于两个或多个数据值的子集,检测(i)数据值的多个情形,对于该情形,如果使用了n的更高值,那么第三部分已经被编码并且依然需要第三部分,以及(ii)数据值的多个情形,对于该情形,第二部分已被编码,但是n值使得所述数据值可能由第一和第二部分使用更低值n完全编码;以及
处理器,在编码所述数据值的子集之后,所述处理器可操作,所述处理器配置为根据所述第二检测器的检测,改变n以关于后续数据值而使用。
25.一种视频数据捕捉、传输、显示和/或存储设备,包括根据条款23或条款24所述的设备。
26.一种用于解码一组数据值的数据解码方法,所述方法包括以下步骤:
将每个数据值的第一部分从一个或多个数据组中解码,所述数据组表示预定幅度范围的第一部分并且使用二进制编码,所述数据组被编码至输入数据流;
解码至少所述数据组未完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,在所述输入数据流内包括限定所述第二部分的数据,并且如果相应的第一和第二部分未完全编码数据值,那么将数据值的剩余第三部分从所述输入数据流解码;
对于所述数据值的子集,检测(i)第三部分已经被编码并且如果使用了n的更高值会依然需要第三部分的数据值的情形,以及(ii)第二部分已被编码但是n的值使得所述数据值能够使用n的更低值通过第一部分和第二部分被完全编码的数据值的情形;并且
根据检测步骤的结果,改变n以关于后续数据值而使用。
27.根据条款26所述的方法,其中,所述改变步骤包括响应于检测到第三部分已被编码并且如果使用了n的更高值会依然需要第三部分的数据值的不止一个的检出情形,增大n。
28.根据条款26或条款27所述的方法,其中,所述改变n的步骤包括:
生成情形(i)和(ii)的累计计数;并且
根据所述累计计数的量化版本导出n的值。
29.根据条款26到28中任一项所述的方法,其中,所述改变步骤配置为不将n降低为低于预定的最小值。
29.一种用于编码一组数据值的数据编码方法,所述方法包括以下步骤:
通过生成一个或多个数据组,将每个数据值的第一部分编码,所述数据组表示预定幅度范围的第一部分并且使用二进制编码,将所述数据组编码至输出数据流;
生成至少所述数据组未完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,并且在所述输出数据流内包括限定所述第二部分的数据;
检测数据值是否已经通过相应的第一部分和第二部分被完全编码,并且如果未完全编码数据值,那么将数据值的剩余第三部编码成所述输出数据流;
对于所述数据值的子集,检测(i)第三部分已经被编码并且如果使用了n的更高值会依然需要第三部分的数据值的情形,以及(ii)第二部分已被编码但是n的值使得所述数据值能够使用n的更低值通过第一部分和第二部分被完全编码的数据值的情形;并且
根据检测步骤的结果,改变n以关于后续数据值而使用。
30.一种用于编码一组数据值的数据解码设备,所述设备包括:
第一解码器,配置为将每个数据值的第一部分从一个或多个数据组解码,所述数据组表示预定幅度范围的第一部分,并且所述数据组用二进制编码编码成输入数据流;
第二解码器,配置为解码至少所述数据组未完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,在所述输入数据流内包括限定所述第二部分的数据,并且如果相应的第一和第二部分未完全编码数据值,那么将数据值的剩余第三部分从所述输入数据流解码;
第二检测器,配置为对于所述数据值的子集,检测(i)第三部分已经被编码并且如果使用了n的更高值会依然需要第三部分的数据值的情形,以及(ii)第二部分已被编码但是n的值使得所述数据值能够使用n的更低值通过第一部分和第二部分被完全编码的数据值的情形;以及
处理器,配置为根据检测步骤的结果,改变n以关于后续数据值而使用。
31.一种配置为编码一组数据值的数据编码设备,所述设备包括:
编码器,配置为通过生成一个或多个数据组,将每个数据值的第一部分编码,所述数据组指示预定幅度范围的第一部分,并且将所述数据组用二进制编码编码成输出数据流;
发生器,配置为生成至少所述数据组未完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,并且使限定所述第二部分的数据包括在所述输出数据流内;
第一检测器,配置为检测数据值是否已经通过相应的第一部分和第二部分被完全编码,并且如果未完全编码数据值,那么将数据值的剩余第三部编码至所述输出数据流;
第二检测器,配置为对于所述数据值的子集,检测(i)第三部分已经被编码并且如果使用了n的更高值会依然需要第三部分的数据值的情形,以及(ii)第二部分已被编码但是n的值使得所述数据值可能已经使用n的更低值通过第一部分和第二部分被完全编码的数据值的情形;以及
处理器,配置为根据所述第二检测器的检测,改变n以关于后续数据值而使用。

Claims (25)

1.一种用于解码数据值组的数据解码方法,所述方法包括以下步骤:
解码来自一个或多个数据组的每个数据值的第一部分,所述数据组表示预定幅度范围的第一部分并且通过使用二进制编码所述数据组被编码到输入数据流;
解码至少通过所述数据组未完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,限定所述第二部分的数据被包括在所述输入数据流内,并且如果数据值通过相应的第一部分和第二部分未被完全解码,则将来自所述输入数据流的所述数据值的剩余第三部分解码;
对于所述数据值的子集,检测(i)第三部分已经被编码并且如果已使用了n的更高值会依然需要第三部分的数据值的情形,以及(ii)第二部分已被编码但是n的值使得所述数据值利用n的更低值通过第一部分和第二部分已经被完全编码的数据值的情形;并且
根据检测步骤的结果,改变n以关于后续数据值而使用。
2.根据权利要求1所述的方法,其中,改变步骤包括响应于检测到第三部分已被编码并且如果使用了n的更高值会依然需要第三部分的数据值的不止一个的检出情形,增大n。
3.根据权利要求1所述的方法,其中,改变n的步骤包括:
生成情形(i)和(ii)的累计计数;并且
根据所述累计计数的量化版本导出n的值。
4.根据权利要求1所述的方法,其中,改变步骤被配置为不将n降低为低于预定的最小值。
5.根据权利要求1所述的方法,其中,检测步骤包括检测第二部分被编码的关于数据值的该子集的情形的总数。
6.根据权利要求5所述的方法,其中,改变步骤包括如果第三部分已被编码的数据值的情形的数量超过第二部分被编码的关于数据值的该子集的情形的总数的第一预定比例,则将n的值增大。
7.根据权利要求6所述的方法,其中,改变步骤包括如果第二部分已被编码并且所述数据值通过第一部分和第二部分被完全编码的数据值的情形的数量超过第二部分被编码的关于数据值的该子集的情形的总数的第二预定比例,则将n的值减小。
8.根据权利要求5所述的方法,其中,改变步骤包括在第三部分已经被编码并且如果使用了n的更高值依然需要第三部分的数据值的情形的数量超过第二部分被编码的关于数据值的该子集的情形的总数的第一预定比例的情况下,则将n的值增大。
9.根据权利要求8所述的方法,其中,改变步骤包括如果第二部分已被编码但是n的值使得所述数据值使用n的更低值通过第一部分和第二部分被完全编码的数据值的情形的数量超过第二部分被编码的关于数据值的该子集的情形的总数的第二预定比例,则将n的值减小。
10.根据权利要求9所述的方法,其中,所述第一预定比例低于所述第二预定比例。
11.根据权利要求10所述的方法,其中,将n的值减小的步骤包括将n减小1,并且将n的值增大的步骤包括将n增大1。
12.根据权利要求1所述的方法,包括为每个数据值生成相应的互补的最高有效数据部分和最低有效数据部分,使得:
数据值的所述最高有效数据部分表示该值的多个最高有效位,该数据值的所述第一部分从所述最高有效数据部分导出;并且
该数据值的所述最低有效数据部分表示该值的剩余n个最低有效位并且形成该数据值的所述第二部分。
13.根据权利要求1所述的方法,其中,每个数据值的所述第一部分表示该数据值的一个或多个最低有效位。
14.根据权利要求13所述的方法,其中,数据值的所述第二部分和所述第三部分由两部分可变长度代码编码,使得所述第二部分表示后缀位组并且所述第三部分表示一元编码前缀。
15.根据权利要求13所述的方法,其中,使用算术编码来从所述输入数据流解码数据值的所述第二部分,其中,根据编码值范围的相应比例将表示所述第二部分的符号编码,其中,描述所述第二部分的每个符号的编码值范围的相应比例具有相同的尺寸。
16.根据权利要求1所述的方法,其中,一个数据组是重要图,所述重要图表示非零的最高有效数据部分的相对于所述数据值的阵列的位置。
17.根据权利要求1所述的方法,其中,所述数据组包括:
大于1的图,表示大于1的最高有效数据部分的相对于所述值的阵列的位置;以及
大于2的图,表示大于2的最高有效数据部分的相对于所述值的阵列的位置。
18.根据权利要求1所述的方法,其中,所述数据值组包括频率变换的图像系数的序列、或者该序列的非零组分、或者将每个数据值的幅度已被减小1的该序列的非零组分。
19.根据权利要求18所述的方法,其中,
所述数据值组表示具有图像数据位深度的图像数据;以及
所述方法包括根据所述图像数据位深度设置n的初始值。
20.根据权利要求18所述的方法,包括根据以下中的一个或多个设置n的初始值的步骤:
编码模式;
要编码的视频数据分量;
数据值的子集的尺寸;以及
图片类型。
21.一种用于编码数据值组的数据编码方法,所述方法包括以下步骤:
通过生成表示预定幅度范围的第一部分的一个或多个数据组并且使用二进制编码将所述数据组编码至输出数据流,将每个数据值的第一部分编码;
生成至少通过所述数据组未被完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,并且使限定所述第二部分的数据包括在所述输出数据流内;
检测码数据值是否已经通过相应的第一部分和第二部分被完全编,并且如果未被完全编码数据值,则将所述数据值的剩余第三部编码至所述输出数据流;
对于所述数据值的子集,检测(i)第三部分已经被编码并且如果已使用了n的更高值会依然需要第三部分的数据值的情形,以及(ii)第二部分已被编码但是n的值使得所述数据值通过第一部分和第二部分使用n的更低值被完全编码的数据值的情形;并且
根据检测步骤的结果,改变n以关于后续数据值而使用。
22.一种用于编码数据值组的数据解码设备,所述设备包括:
第一解码器,被配置为从一个或多个数据组解码每个数据值的第一部分,所述数据组表示使用二进制编码编码输入数据流的预定幅度范围的第一部分;
第二解码器,被配置为解码至少通过所述数据组未完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,限定所述第二部分的数据被包括在所述输入数据流内,并且如果数据值未通过相应的第一部分和第二部分被完全解码,则将所述数据值的剩余第三部分从所述输入数据流解码;
第二检测器,被配置为对于所述数据值的子集,检测(i)第三部分已经被编码并且如果使用了n的更高值会依然需要第三部分的数据值的情形,以及(ii)第二部分已被编码但是n的值使得所述数据值使用n的更低值通过第一部分和第二部分被完全编码的数据值的情形;以及
处理器,配置为根据检测步骤的结果,改变n以关于后续数据值而使用。
23.一种视频数据捕捉、传输、显示和/或存储设备,包括根据权利要求22所述的设备。
24.一种配置为编码数据值组的数据编码设备,所述设备包括:
编码器,被配置为通过生成表示预定幅度范围的第一部分的一个或多个数据组来编码每个数据值的第一部分,并且使用二进制编码将所述数据组编码至输出数据流;
发生器,被配置为生成至少通过所述数据组未被完全编码的那些数据值的第二部分,所述第二部分的位数取决于值n,其中,n是整数,并且使限定所述第二部分的数据包括在所述输出数据流内;
第一检测器,被配置为检测数据值是否已经通过相应的第一部分和第二部分被完全编码,并且如果未被完全编码,则将数据值的剩余第三部编码至所述输出数据流;
第二检测器,被配置为对于所述数据值的子集,检测(i)第三部分已经被编码并且如果使用了n的更高值会依然需要第三部分的数据值的情形,以及(ii)第二部分已被编码但是n的值使得所述数据值使用n的更低值通过第一部分和第二部分被完全编码的数据值的情形;以及
处理器,被配置为根据所述第二检测器的检测,改变n以关于后续数据值而使用。
25.一种非临时机器可读存储介质,存储有计算机软件,所述计算机软件在由计算机执行时,使所述计算机执行根据权利要求1所述的方法。
CN201480039205.9A 2013-07-09 2014-07-08 数据编码和解码 Active CN105379283B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1312328.6 2013-07-09
GB1312328.6A GB2516422A (en) 2013-07-09 2013-07-09 Data encoding and decoding
PCT/GB2014/052076 WO2015004441A1 (en) 2013-07-09 2014-07-08 Data encoding and decoding

Publications (2)

Publication Number Publication Date
CN105379283A CN105379283A (zh) 2016-03-02
CN105379283B true CN105379283B (zh) 2018-11-09

Family

ID=49033575

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201480039205.9A Active CN105379283B (zh) 2013-07-09 2014-07-08 数据编码和解码

Country Status (7)

Country Link
US (1) US11290751B2 (zh)
EP (1) EP3020196B1 (zh)
JP (1) JP6400092B2 (zh)
CN (1) CN105379283B (zh)
BR (1) BR112015032982B1 (zh)
GB (1) GB2516422A (zh)
WO (1) WO2015004441A1 (zh)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105659606B (zh) 2013-10-14 2019-06-18 微软技术许可有限责任公司 用于视频和图像编码和解码的方法、***和介质
CA2924763A1 (en) 2013-10-14 2015-04-23 Microsoft Corporation Features of intra block copy prediction mode for video and image coding and decoding
US11109036B2 (en) 2013-10-14 2021-08-31 Microsoft Technology Licensing, Llc Encoder-side options for intra block copy prediction mode for video and image coding
JP6355744B2 (ja) 2014-01-03 2018-07-11 マイクロソフト テクノロジー ライセンシング,エルエルシー ビデオ及び画像符号化/デコーディングにおけるブロックベクトル予測
US10390034B2 (en) 2014-01-03 2019-08-20 Microsoft Technology Licensing, Llc Innovations in block vector prediction and estimation of reconstructed sample values within an overlap area
US11284103B2 (en) 2014-01-17 2022-03-22 Microsoft Technology Licensing, Llc Intra block copy prediction with asymmetric partitions and encoder-side search patterns, search ranges and approaches to partitioning
US10542274B2 (en) 2014-02-21 2020-01-21 Microsoft Technology Licensing, Llc Dictionary encoding and decoding of screen content
KR102413529B1 (ko) 2014-06-19 2022-06-24 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 통합된 인트라 블록 카피 및 인터 예측 모드
EP3917146A1 (en) 2014-09-30 2021-12-01 Microsoft Technology Licensing, LLC Rules for intra-picture prediction modes when wavefront parallel processing is enabled
US10097833B2 (en) * 2014-12-26 2018-10-09 Intel Corporation Method and system of entropy coding using look-up table based probability updating for video coding
EP3262839B1 (en) * 2015-04-08 2021-06-16 HFI Innovation Inc. Methods for palette mode context coding and binarization in video coding
EP3308540B1 (en) * 2015-06-09 2020-04-15 Microsoft Technology Licensing, LLC Robust encoding/decoding of escape-coded pixels in palette mode
US10142629B2 (en) * 2015-12-28 2018-11-27 Mediatek Inc. Method and apparatus for entropy coding in image compression
EP3244610A1 (en) * 2016-05-12 2017-11-15 Thomson Licensing Method and device for context-adaptive binary arithmetic coding a sequence of binary symbols representing a syntax element related to video data
KR102390298B1 (ko) * 2016-07-04 2022-04-25 소니그룹주식회사 화상 처리 장치 및 방법
CN108259896B (zh) * 2016-12-29 2021-10-08 四川大学 一种利用系数分布特性的哥伦布-莱斯初始参数自适应决策方法
US10757412B2 (en) * 2017-01-03 2020-08-25 Avago Technologies International Sales Pte. Limited Architecture flexible binary arithmetic coding system
JP7176511B2 (ja) * 2017-03-27 2022-11-22 ソニーグループ株式会社 撮像素子、並びに、撮像装置および方法
US20200120359A1 (en) * 2017-04-11 2020-04-16 Vid Scale, Inc. 360-degree video coding using face continuities
US10986349B2 (en) 2017-12-29 2021-04-20 Microsoft Technology Licensing, Llc Constraints on locations of reference blocks for intra block copy prediction
CN111713104B (zh) * 2018-02-14 2022-04-26 索尼公司 图像处理装置和方法
US10860399B2 (en) 2018-03-15 2020-12-08 Samsung Display Co., Ltd. Permutation based stress profile compression
US10515612B2 (en) * 2018-03-26 2019-12-24 Samsung Display Co., Ltd. Transformation based stress profile compression
US10803791B2 (en) 2018-10-31 2020-10-13 Samsung Display Co., Ltd. Burrows-wheeler based stress profile compression
US10606775B1 (en) * 2018-12-28 2020-03-31 Micron Technology, Inc. Computing tile
US11308873B2 (en) 2019-05-23 2022-04-19 Samsung Display Co., Ltd. Redundancy assisted noise control for accumulated iterative compression error
US20220159258A1 (en) * 2019-06-25 2022-05-19 Intel Corporation Generalized bypass bins and applications for entropy coding
US11245931B2 (en) 2019-09-11 2022-02-08 Samsung Display Co., Ltd. System and method for RGBG conversion
GB2589066B (en) * 2019-10-24 2023-06-28 Advanced Risc Mach Ltd Encoding data arrays
AU2019284053A1 (en) * 2019-12-23 2021-07-08 Canon Kabushiki Kaisha Method, apparatus and system for encoding and decoding a block of video samples
CN111130558A (zh) * 2019-12-31 2020-05-08 世纪恒通科技股份有限公司 一种基于统计概率的编码表压缩方法
GB2601184A (en) * 2020-11-23 2022-05-25 Sony Group Corp Image data encoding and decoding
US20220086445A1 (en) * 2020-12-03 2022-03-17 Intel Corporation Methods, apparatus, and articles of manufacture for multi-symbol equiprobable mode entropy coding
CN113282552B (zh) * 2021-06-04 2022-11-22 上海天旦网络科技发展有限公司 流量统计日志的相似性向量化方法及***
US20230102088A1 (en) * 2021-09-29 2023-03-30 Tencent America LLC Techniques for constraint flag signaling for range extension
CN114760481B (zh) * 2022-04-29 2023-05-30 北京淳中科技股份有限公司 一种视频编码方法、装置、设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5140621A (en) * 1988-04-15 1992-08-18 Thomson Csf Method of encoding and decoding data in blocks, and encoding and decoding devices implementing this method
US5956429A (en) * 1997-07-31 1999-09-21 Sony Corporation Image data compression and decompression using both a fixed length code field and a variable length code field to allow partial reconstruction

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000115782A (ja) * 1998-10-06 2000-04-21 Canon Inc 符号化装置及び方法及び記憶媒体
GB0007781D0 (en) * 2000-03-30 2000-05-17 Sony Uk Ltd Data compression
KR100668344B1 (ko) * 2005-09-20 2007-01-12 삼성전자주식회사 영상 부호화장치 및 방법, 영상 복호화장치 및 방법과 이를채용한 디스플레이 구동회로 및 방법
JP2008271039A (ja) 2007-04-18 2008-11-06 Toshiba Corp 画像符号化装置及び画像復号化装置
GB201119175D0 (en) 2011-11-07 2011-12-21 Sony Corp Context adaptive data encoding

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5140621A (en) * 1988-04-15 1992-08-18 Thomson Csf Method of encoding and decoding data in blocks, and encoding and decoding devices implementing this method
US5956429A (en) * 1997-07-31 1999-09-21 Sony Corporation Image data compression and decompression using both a fixed length code field and a variable length code field to allow partial reconstruction

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
AHR5:range extensions and high bit depths;SHARMAN K ET AL;《JCTVC》;20130419(第M0178期);第6.1节固定比特数的熵编码 *
CABAC with combined context variables;SHARMAN K ET AL;《JCTVC》;20111108(第G504期);全文 *

Also Published As

Publication number Publication date
CN105379283A (zh) 2016-03-02
US20160373788A1 (en) 2016-12-22
JP6400092B2 (ja) 2018-10-03
WO2015004441A1 (en) 2015-01-15
JP2016528789A (ja) 2016-09-15
BR112015032982B1 (pt) 2023-03-07
US11290751B2 (en) 2022-03-29
GB201312328D0 (en) 2013-08-21
EP3020196A1 (en) 2016-05-18
EP3020196B1 (en) 2020-02-26
GB2516422A (en) 2015-01-28
BR112015032982A2 (zh) 2017-07-25

Similar Documents

Publication Publication Date Title
CN105379283B (zh) 数据编码和解码
CN105103548B (zh) 一种编码、解码图像数据的方法及设备
CN105103453B (zh) 数据编码和解码
US10893273B2 (en) Data encoding and decoding
CN108366257B (zh) 数据解码设备和方法、数据编码设备和方法
EP2744212A1 (en) Adaptive transformation of residual blocks depending on the intra prediction mode
CN104702962A (zh) 帧内编解码方法、编码器和解码器
CN104041040A (zh) 用于无损视频编码的预测残差编码
CN104380741A (zh) 用于lm帧内预测的参考像素缩减
KR20080082147A (ko) 컨텍스트 기반 적응적 이진 산술 부호화, 복호화 방법 및장치
CN108737842A (zh) 用于分割块的方法和解码设备
GB2519070A (en) Data encoding and decoding
TW202402050A (zh) 使用基於矩陣之內預測及二次轉換之寫碼技術
CN103918186B (zh) 上下文自适应数据编码
CN104205845A (zh) 具有统一位宽乘法器的lm模式
KR20210158432A (ko) 참조 샘플을 이용하는 비디오 신호 처리 방법 및 장치
CN101502122A (zh) 编码装置及编码方法
CN105453566B (zh) 数据编码及数据解码
JP2023504726A (ja) モード-グローバル設定によるマトリックスベースのイントラ予測

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant