关于CABAC的几点认识

一,自适应二进制算术编码
CABAC采用自适应二进制算术编码方式,自适应即信源符号的概率根据编码时符号出现的频繁程度动态进行修改,在编码过程中需要对信源符号概率进行更新,该过程称为建模。
假设有一个随机变量X,信源列表为{0,1},概率分布为{p(X=0)=p0,p(X=1)=p1}。设0和1的累积概率为p0和p1,编码前后码字C值分别为C_old和C_new,编码前后的区间长度A分别为A_old和A_new,则有:
C_new = C_old+(A_old*pi) (1)
A_new = A_old*pi (2)
i由输入码字决定取0或1;


二,CABAC
HEVC中的CABAC分四步执行:上下文概率模型构建、语法元素二进制化、更新概率估计、二进制算术编码。


1,上下文概率模型
自适应二进制算术编码需要对0和1的概率进行更新,使概率能够实时准确地反映0和1的分布。考虑到符号之间可能存在的相关性,在自适应算术编码中通常引入模型的概念,也就是根据当前输入符号和在它之前出现符号的某个特征将当前符号归入不同的类别,不同的类别有不同的统计特性。因此在HEVC中为每个语法元素分配了专用的概率模型。
在编码中,语法元素所使用的上下文概率模型都被唯一的上下文索引号标志,该索引号包括两部分:最大概率符号MPS和概率状态索引pStateIdx


2,二进制化
CABAC是二进制算术编码,对非二进制元素,如运动矢量、宏块类型、参考帧号以及变换量化后的残差数据,需要预先进行二进制化。
对于CABAC这种结构,使用二进制算术编码较之多进制算术编码有很多的优越性:
首先可实现快速自适应;
其次,二进制算术编码器不会出现0或1的概率极小的情况,从而导致编码效率大幅度降低(区间细分严重,编码后码字过长);
CABAC中每一个二进制符号都对应着一个上下文模型,可以避免设置较多的上下文模型;


3,更新概率估计
在CABAC中,根据先验知识为LPS(最小概率符号,与MPS一一对应)设定了64个代表值,即状态转移表,pStateIdx与LPS的概率值一一对应,而概率估计即LPS概率的更新,最终表现为pStateIdx的变化,该状态转移表即HEVC标准提案JCTVC-L1003_v34中Table 9-41,初始化过程提案中同样有介绍

概率估计即通过状态转移表来实现,其中每个状态代表一种概率分布,状态之间相互转化的条件就是已编码位的取值,更新到哪一个状态,并不是根据前一位取0还是取1,而是根据取的是LPS还是MPS来决定的。具体更新过程参考标准提案



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值