您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 视频编码技术及H264标准
HEVC视频编码标准之熵编码——基于上下文的自适应二进制算术编码CABAC(Context-basedAdaptingBinaryArithmeticCoding)郑明魁数字电视智能化技术国家地方联合工程研究中心福州大学智能多媒体通信实验室熵编码基础目前的视频编码标准主要通过去除空间冗余、时间冗余与编码冗余来实现压缩。编码器将多种算法有效的结合起来达到较高的压缩性能,主要相关技术包括预测编码、变换编码、量化和熵编码技术。预测变换量化熵编码熵编码基础熵编码是按照熵原理进行的一种无失真压缩编码方式,生成的码流可以通过解码过程无失真的将原始数据解析出来。常见的熵编码主要有:香农编码(ShannonCoding)、哈夫曼编码(HuffmanCoding)和算术编码(ArithmeticCoding)等。熵编码基础哈夫曼编码(HuffmanCoding),霍夫曼编码是可变字长编码(VLC)的一种。出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码。现在流行的很多压缩方法都使用了范式哈夫曼编码技术,如GZIB、ZLIB、PNG、JPEG、MPEG等。在直流DC系数经过上面的DPCM编码,交流AC系数经过RLE编码后,得到的数据,还可以再进一补压缩,即使用Huffman编码来处理。序号码字长度码字权值12000x0022010x01331000x11431010x0255110000x2165110010x0375110100x3185110110x4195111000x121061110100x5111711101100x6112711101110x7113711110000x8114711110010x9115711110100x2216711110110x13178111110000x32游程编码:游程编码在传真文件压缩中的应用例:000100011101111100003133154熵编码基础电话网H.264CAVLC5、runbefore:以反z向扫秒零的个数,类似游程编码。注意两个参数,Zeroleft和Run_beforeZeroleft:当前非零系数之前所有零的个数,初始值为TotalZerosRun_before:游程下面两种情况不需要编码:最后一个非零系数(反Z方向)前零的个数没有剩余的零可以编码,∑Run_before=total_zeros本例题中:0301-1-101000。。。。。run_before(4)ZerosLeft=3;run_before=1run_before(3)ZerosLeft=2;run_before=0run_before(2)ZerosLeft=2;run_before=0run_before(1)ZerosLeft=2;run_before=1run_before(0)ZerosLeft=1;run_before=1Nocoderequired;lastcoefficient.熵编码原理H.264基于上下文的自适应变长编码CAVLC(Context-basedAdaptingVariableLengthCoding)游程编码思想的应用:熵编码原理1.算术编码ArithmeticCoding(二进制)在编码过程中,输入数据流中的信源符号被分为大概率符号(MPS)和小概率符号(LPS)。LPS的概率记为Q,MPS的概率记为P=1-Q算术编码的唯一性和效率•上述产生的标识可以唯一表示一个序列,这意味着该标识的二进制表示为序列的唯一二进制编码•但二进制表示的精度可以是无限长:保证唯一性但不够有效•为了保证有效性,可以截断二进制表示,但如何保证唯一性?•答案:为了保证唯一性和有效性,需取小数点后l位数字作为信源序列的码字,其中–注意:P(x)为最后区间的宽度,也是该符号串的概率–符合概率匹配原则:出现概率较大的符号取较短的码字,而对出现概率较小的符号取较长的码字1log1()lPxx熵编码原理算术编码的唯一性和效率•长度为n的序列的算术编码的平均码长为:()1()log1()1()log11()()log()2()22AnlPlPPPPPPPHXnHXxxxxxxxxx22nAAHnHXlnHXXlHXn算术编码的效率高:当信源符号序列很长,平均码长接近信源的熵熵编码原理算术编码基础2.自适应算术编码AdaptingArithmeticCoding在前面讨论的算术编码中,我们把信源的统计特性被看作是固定不变的,这在实际应用中显然不太实际。为解决使编码技术适应信源统计特性变化的问题,前人提出了自适应算术编码方法,自适应算术编码在一次扫描中可完成两个过程,即概率模型的建立过程和扫描编码过程。自适应算术编码在扫描符号序列前并不知道各符号的统计概率,这时假定每个概率相等,并平均分配区间[0,1],然后在扫描符号序列的过程中不断调整各个符号的概率。1.调整概率后,再进行进行区间分配,随着编(译)码过程的进行。2.概率分配将逐渐趋于信源的实际概率分布。这种方法对于无法进行概率统计的信源比较合适。算术编码基础3.基于上下文自适应算术编码在实际的视频编码过程中,由于冗余的存在(特别是时间冗余和空间冗余,于是在自适应算术编码的基础上引入了contextmodel的概念,通过信源前后(时间或空间上)消息的预测分布来调整并适应信源统计特性的变化,这就是所谓的基于上下文的自适应算术编码。Contextmodel是根据当前符号周围的已编(译)码符号的情况构造的,每个contextmodel内,概率随着编(译)码的进行而进行自适应的更新。对于不同的contextmodel,其概率分配也是不同的,此时的概率即为条件概率。采用恰当的contextmodel,就可以根据当前符号周围的已编码符号的情况来决定如何在各种条件概率模型之间切换,从而达到利用符号间己有的冗余度的目的。Contextmodel:用周围信息来设计对应概率模型CABAC框架作用:通过统计编码,提高编码效率。流程包含三个阶段:二值化,上下文建模和算术编码二值化组合:如变换系数的二值化方式是TR和EGk的组合定制:标准规定相应的二进制串,如帧内色度预测模式等二值化语法元素的二进制化(Binarization)UnaryBinarization:简称U二进制化(一元二进制化),二进制化方法:二值化二进制化方法:TU二进制化(截尾一元二进制化)该方法对语法元素的值有特定要求:只针对不大于某个“界限值”的语法元素进行“二进制化”,设“界限值”为S,语法元素的值为x,则要求:0xS。二值化Golomb编码是一种无损的数据压缩方法,由数学家SolomonW.Golomb在1960年代发明。Golomb编码只能对非负整数进行编码,符号表中的符号出现的概率符合几何分布(GeometricDistribution)时,使用Golomb编码可以取得最优效果,也就是说Golomb编码比较适合小的数字比大的数字出现概率比较高的编码。它使用较短的码长编码较小的数字,较长的码长编码较大的数字。Golomb编码是一种分组编码,需要一个正整数参数m,然后以m为单位对待编码的数字进行分组,如下图:Golomb编码二值化对于任一待编码的非负正整数N,Golomb编码将其分为两个部分:商:q=N/mUnary编码余数:r=N%m使用固定长度的二进制编码(binaryencoding)如果参数m不是2的次幂,设b=⌈log2(m)⌉1.如果r,则使用b-1位的二进制编码r。2.如果r≧,则使用b位二进制对r+进行编码mb2mb2mb2Golomb-Rice编码二值化m是2的次幂:商:q=N/mUnary编码余数:r=N%m优点:•不需要做模运算即可得到余数r,r=N&(m-1)•对余数r编码更为简单,只需要取r二进制的低log2(m)位即可。km20--150x3x2x1x016--3110x3x2x1x032--47110x3x2x1x048--631110x3x2x1x0码字:[qbits1]0[kbitsINFO]Truncated-Rice编码参数k二值化m是2的次幂:商:q=N/mUnary编码余数:r=N%mq=Nk;第q个区间ifq(cMaxk)【q个1】【0】【N%m】elseq≥(cMaxk)【(cMaxk)个1】【N%m】注:NcMax时无后缀km2【P个1】【0】【N%m】101x0001x1x00001x2x1x000001x3x2x1x0[qbits0]1[qbitsINFO]Exp-Golomb编码EGkk=0二值化Exp-Golomb则有了一个很大的改进,不再使用固定大小的分组,而使组的大小呈指数增长。如下图(k=0时):分组的编号,分隔符,组内的偏移量code_num(N)Codeword012345678…10100110010000101001100011100010000001001…qnumcodeINFO21_)]1_([log2numcodeqExp-Golomb编码EGkk任意二值化一般公式:)21(2_qknumcodeINFO)]12/_([log2knumcodeq[qbits0]1[qbitsINFO]k=0k=1k=2Exp-Golomb编码EGkk任意二值化有符号数问题该方法需要假设相应得语法元素的值x为有限,即0xS。方法为直接用x值的二进制表示形式作为其二进制化结果(bins)下表给出了当S=5时语法元素值对应的FL二进制序列。Fixed-LengthBinarization二值化HEVC二值化示意图二进制化方法比较:FLBinarization方案需要预先知道语法元素的最大值,这一点在实际当中很难做到。另外,FLBinarization的“bins”是等长码的形式,本身信息冗余量大,且译码不便,因此,除对个别类型的语法元素外,这种二进制化算法不适于单独构成二进制化方案,只可和其他方法级联使用。UnaryBinarization的优点是形式简单,没有复杂的计算,算法容易实现。Unarybinarization是把语法元素的值表示成连续的“1”后跟一位“0”的形式,“1”的个数标志着语法元素的值,如果我们把二进制化过程看成一个编码过程,把逆二进制化过程看作译码过程的话,UnaryBinarization的译码过程也非常简捷——只需统计单个“0”比特前的连续“1”的个数。另外,U二进制序列的形式利于概率的快速自适应运算,适合自适应算术编码压缩。但是UnaryBinarization存在一个缺点——“bins”的长度等于其语法元素值加1,导致较大的语法元素值所对应的“bins”过长,需要足够的存储空间来支持,这在实际中不易满足。二值化小结二进制化方法比较:TruncatedUnaryBinarization顾名思义是UnaryBinarization的截断形式,它虽然继承了UnaryBinarization的优点,但是,该方案也要求设定语法元素的最大值,因此也不能单独构成二进制化方案,不过可以充当前缀与其他方法级联使用。EGkBinarization的优越性在于其“bins”短小,而且无需预知语法元素取值范围。EGkBinarization的“bins”的前缀部分是TU二进制序列形式,因此也较适合于自适应算术编码压缩。缺点在于EGk二进制化的算法中存在2的指数和对数运算,算法相对复杂一些。不过,计算机算法中2的指数和对数运算可以通过移位操作来实现,因此,总体来说EGkBinarization是一个较理想的二进制化方案。尤其当k=0时的EG0binarization算法更加简便,译码也更为方便。二值化小结CABAC模型初始化已知L=0,R=510,MPS取值,LPS的概率Pσ不同的语法元素,不同的模型,不同的initValue,
本文标题:视频编码技术及H264标准
链接地址:https://www.777doc.com/doc-6210999 .html