用于视频预测残差系数编码的熵编码方法

文档序号:7949980阅读:235来源:国知局
专利名称:用于视频预测残差系数编码的熵编码方法
技术领域
本发明涉及一种图像/视频编解码技术,特别是指一种用于在图像/视频压缩、数字音视频编码技术中,进一步提高编码效率,同时保持较低的软硬件计算实现复杂度的熵编码方法,属于数字媒体处理技术领域。
背景技术
视频编码技术是数字媒体存储与传输等应用的关键技术之一。视频编码系统中的核心技术包括预测编码、变换编码、熵编码。其中,熵编码是指对编码过程中产生的语法元素(例如运动矢量mv、块标识cbp、块预测残差系数等)进行信息熵编码,其作用是去除数据的统计冗余。
以往视频编码标准对块预测残差系数的编码方法有H.261、MPEG(运动图象专家组,Motion Picture Experts Group简称MPEG)-2标准的2D-VLC(Variable Length Coding)熵编码器,H.263、MPEG-4标准的3D-VLC熵编码器及H.264/AVC(国际电信协会ITU-T的H.264视频编码建议或ISO/IEC的国际标准14496-10,即MPEG-4标准的第10部分)视频编码标准的CAVLC(Context-based Adaptive Variable Length Coding)熵编码器和CABAC(Context-based Adaptive Binary Arithmetic Coding)熵编码器。
2D-VLC熵编码器对残差系数的编码采用(level,run)+EOB的编码方式,level表示经过DCT变换和量化后的残差图像块的非零系数,而run表示该系数到其前第一个非零系数间的值为0的系数个数,EOB(End of Block)为块结束标志,EOB在码表中独占一个位置,即EOB单独分配一个码字。3D-VLC熵编码器将EOB结合在(level,run)数对中,形成三维量(level,run,last),last表示当前系数是否为块内做后一个系数,这样腾出了码表中EOB占据的较短码字,并且利用了level、run及EOB的联合概率,因此编码效率有提高。H.264/AVC视频编码标准的CAVLC熵编码器由于其充分的利用了上、下文信息,并针对4×4块大小进行了很好的优化,因此虽然将level、run分开编码,但依然取得了很好的编码结果。以上的各种熵编码器属于变长编码器,其编码基本原理是Huffman编码,即将大概率的符号用短码字编码,而出现概率小的符号用长码字编码,从而最终达到平均码长最短的目的。H.264/AVC视频编码标准的CABAC熵编码器属于算术编码器,算术编码器的性能高于变长编码器,而且由于CABAC能够很好地对上下文进行建模,对信源符号的出现概率有更准确的估计,因此编码效率很高。但相比于变长编码器,算术编码器的计算复杂度高,同时硬件实现复杂,相当于以软、硬件的高复杂度换取编码效率的提高。
因此,从编码效率及算法的软硬件实现复杂度两方面来考虑,变长编码是一种性价比更高的熵编码方案。在变长编码器中,2D-VLC熵编码器利用了level及run的联合概率,理论上效率高于CAVLC熵编码器将level及run分开编码的方式,而且相对于3D-VLC编码器,2D-VLC码表的体积更小,所以2D-VLC熵编码器兼顾了性能和硬件的实现复杂度。但是传统的2D-VLC熵编码器采用通过全局统计而得到的单一码表进行编码,其缺点是,单一码表不能很好的适应局部概率分布的变化,因此编码效率不高。

发明内容
本发明所要解决的技术问题在于提供一种用于视频预测残差系数编码的新型高效熵编码方法,进一步提高编码效率,同时保持较低的计算实现复杂度。
本发明的目的是这样实现的
一种用于视频预测残差系数编码的熵编码方法,包括如下步骤
步骤1对图像块的被编码块系数进行zig-zag扫描,形成(level,run)数对序列;
步骤2根据图像块所在宏块类型选择用于编码当前被编码图像块的码表类型;
步骤3对步骤1得到的数对序列中每一(level,run)数对进行编码;
步骤4编码块结束标志EOB。
本发明用于视频预测残差系数编码的熵编码方法,在2D-VLC编码器中引入了自适应机制,为不同类型宏块和不同level值区域设定了不同的局部统计分布最优的码表,编码时通过码表切换,找到最匹配当前局部概率特性的码表进行编码,充分考虑到了视频块残差系数的上下文环境和统计规律,同时对计算实现复杂度没有影响,进一步提高了编码效率。


图1是本发明实施例的流程图2是本发明一实施例对4x4块图像块进行zig-zag扫描形成(level,run)数对的示意图3是本发明对4×4块图像块的编码方案的示意图。
具体实施例方式
以下结合附图和具体的实施例对本发明作进一步的详细说明
本实施例所述的熵编码方法,如图1,图3所示,包括如下步骤
步骤1对图像块的被编码块系数进行zig-zag扫描,形成(level,run)数对序列;
步骤2根据图像块所在宏块类型选择用于编码当前被编码图像块的码表类型;
步骤3对步骤1得到的数对序列中每一(level,run)数对进行编码;
步骤4编码块结束标志EOB。
在视频图像编码中,宏块是编码的基本单位,每一个宏块包括4个8×8的亮度块和2个8×8的色度块,共6个图像块。对预测残差系数的熵编码中,图像块每一点为一个系数,这个系数表示经过熵编码之前的编码步骤得到的视频预测残差。
宏块类型可分为两种,一种是intra(内部)型,采用帧内相邻的图像块对待编码图像块进行帧内预测的方法进行编码;另一种是inter(外部)型,采用相邻帧的图像块对待编码图像块进行帧间预测的方法进行编码。这两种不同的预测编码方法使得所得到的块残差系数的特性不同,在扫描后形成的相同(level,run)数对出现的概率不同。比如某一(level,run)数对(3,0),可能在所有intra型图像块中出现的概率为10%,而在所有inter型图像块中出现的概率只有7%。
为了提高编码效率,本发明针对不同的类型建立不同的类型的码表,使得每种类型下,被编码符号的码字长度和被编码符号的出现概率能够更好的匹配,从而取得更好的编码效果。
步骤1所述的zig-zag扫描,即“之”字扫描,如图2,图3所示,从左上到右下,依次得到(level,run)数对。
步骤2所述的根据图像块类型选择用于编码当前被编码块系数的码表,具体为如果当前宏块类型为intra型,则选择intra型码表编码当前宏块内亮度块的系数;如果宏块类型为inter型,则选择inter型码表编码当前宏块内亮度块的系数;如果对宏块内色度块的编码采用inter型码表或采用自己单独的码表。
用inter型码表编码色度块的效果基本可以满足编码的需求,当然也可以在基于统计分析的基础上,为色度块建立自己的码表,但一般可以不这样做。
本实施例所述的步骤3,进一步具体包括
步骤31采用固定码表编码最后一个(level,run);
步骤32以当前已编码的(level,run)数对的level值选择编码前一数对的码表;
步骤33以步骤32所选择的码表编码前一(level,run)数对编码;
步骤34如果没有对所有的(level,run)数对编码完毕,则执行步骤32;否则结束步骤3。
对于视频熵编码而言,编码的结果越小,计算复杂度越小,编码效率越高,而本发明不涉及计算复杂度,因此,对出现几率高的(level,run)数对分配数字比较小的码字,对码字编码后的结果也小,相应的最后的编码结果也就最小,效率最高。
本发明对于确定的intra/inter图像块类型,采用了多个不同的码表来分配码字,每一个码表都是根据码表本身的level值对下一个将要编码的(level,run)数对的出现概率进行统计后制成的,按下一个将要编码的(level,run)数对的出现概率由高到低分配由小到大的码字,充分的利用了上下文环境和统计规律,比只有一个统一的码表,不考虑上下文环境,只考虑总的统计规律效率提高了很多。这也是本发明方法步骤32切换码表的原因。
由于相近的level值的预测结果可能会比较接近,为了提高编码的速度并降低码表的存储需求,本发明采用了分区的方法来设计多个码表,即将整个分成若干个区域,每个区域采用相同的码表。一般level值越大预测结果越接近,所以大多数码表都集中在level值小的地方。
下面给出一个具体的、用C语言表达的多个码表切换实例
int incVlc[]={1,2,3,5,8,3000};TableNum=0;//采用VLC0_Intra或VLC0_Inter编码第一个(level,run)for(icoeff=TotalCoeff;icoeff>0;icoeff--)//编码块内所有非零系数{encode_levelrun(TableNum);//采用当前码表,编码当前(level,run)if(abs(level)>incVlc[TableNum])//以已编码的level值切换码表<!-- SIPO <DP n="5"> --><dp n="d5"/>{if(abs(level)<=3)TableNum=(abs(level)-1);else if(abs(level)<=5)TableNum=3;else if(abs(level)<=8)TableNum=4;elseTaleNum=5;}}
在以上码表选择方法中,用于Inter型系数块的编码共有6个码表,将整个level的可能取值分成了6个区域,1,2,3,4-5,5-8和8以上,分别对应不同码表。
所述的码表为2D-VLC结构,包括(level,run)数对及EOB与码字的映射关系。表1给出了编码Inter型图像块所用的码字分配码表VLC0_Inter及VLC1_Inter示例。VLC0_Inter表示Inter型图像块level为1的码表,用来对level为1的(level,run)数对后的(level,run)数对编码,或作为固定码表编码第一个(level,run)数对。VLC1_Inter表示Inter型图像块level为2的码表,用来对level为2的(level,run)数对后的(level,run)数对编码。
其他的码表结构与这两个码表类似。
表1
在所述的步骤31中,所述的固定码表为VLC0_inter或VLC0_intra。这是因为在大多数情况下,最后一个(level,run)的level为1,即最后一个(level,run)的level为1的几率非常高。这样可以在没有任何上下文的情况下,可以获得最好的编码结果。步骤3中采用逆序的方式从后向前对(level,run)进行编码也是这个原因。
本发明对(level,run)数对编码,具体包括如下步骤
步骤331如果(level,run)包含在码表当中,则直接从码表中查表得到码字,再将码字转换成Exp-Golomb码;
步骤332如果(level,run)超出码表范围,先编码escape_code,之后将level和run分别转换成Exp-Golomb码。
由于统计预测的结果一般集中在一个区域,这是图像的渐进变化所决定的,所以设计码表时,码表中不包括那些出现几率非常小的,超出设定的区域的(level,run)数对。从码表VLC0_Inter及VLC1_Inter就可以看到,码表中对下一个level值的预测区域非常集中,因此需要对超出码表范围的(level,run)数对,进行例外的处理。
所述的例外处理的方法是先根据当前码表,即超出范围的码表,确定此码表所采用的Exp-Golomb码的阶数,然后,编码一个escape_code,再将超出码表的level和run分别转换成Exp-Golomb码。
所谓的escape_code就是一个Exp-Golomb码,该Exp-Golomb码对应的码字大于对应码表中所有码字。
所谓的Exp-Golomb码,即Exponential(指数型)-Golomb码。Exp-Golomb码具有不同的阶数,每个码表中的码字要转换成Exp-Golomb码要选择合适阶数;对超出码表范围的(level,run)数对的level和run转换成Exp-Golomb码也要选择合适阶数。
所有转换成Exp-Golomb码的数据选择阶数的方法如下所述
步骤100判断需要进行转换的类型,如果是从码表中查出的(level,run)对应的码字或EOB对应的码字,执行步骤101;如果是超出码表的level值或run值执行步骤102;
步骤101根据码表的不同来确定Exp-Golomb的阶数;
步骤102根据图象块所在宏块为intra型和inter型来确定Exp-Golomb的阶数。
下面给出一个码表与Exp-Golomb码阶数对应关系和图象块所在宏块类型与Exp-Golomb码阶数对应关系的实例
码表VLC0_Inter及VLC1_Inter选择2阶Exp-Golomb码,其他码表选择3阶Exp-Golomb码。
intra型图象块level值对应3阶Exp-Golomb码;run值也对应3阶Exp-Golomb码;inter型型图象块level值对应2阶Exp-Golomb码;run值对应3阶Exp-Golomb码。
阶数的选择根据出现具体概率分布而定,这样做的目的也是尽量减小编码后的数据长度。
本发明中所述的将码字或数值转化成Exp-Golomb码具体包括如下过程
首先根据码表确定所采用的Exp-Golomb码的阶数,然后根据阶数和码字从Exp-Golomb码表中查出对应的Exp-Golomb码,完成转换。
表2给出了本发明的熵编码方法所采用的各阶Exp-Golomb码,Golomb码由前缀和后缀组成,前缀码为若干个0及末尾一个1的比特串,后缀码为信息比特。所述的INFO,是一个信息量,用如下公式计算
表2是Exp-Golomb码表的一种简写形式,表中的Xi为0或1。把每一个Exp-Golomb码利用码字公式计算就可以知道Exp-Golomb码对应的码字。比如,Exp-Golomb码00111的依据上面公式计算INFO=4,而L=5,则L/2=2(这里只取整数部分)依据码字公式,得出码字为7。
表2
所述的步骤4,编码块结束标志EOB,具体过程为利用步骤3结束时的(level,run)数对,即步骤3中编码的最后一个(level,run)数对的level值选择编码EOB采用的码表;从码表中查出对应的EOB码字,采用步骤331所述的方法,将EOB码字转换成Exp-Golomb码。
通过以上的描述可以看出,本发明方法是一种对2D-VLC变长熵编码器的改进,计算复杂度并不高,但编码效率有了极大的提高。
最后应说明的是以上实施例仅用以说明本发明而并非限制本发明所描述的技术方案;因此,尽管本说明书参照上述的各个实施例对本发明已进行了详细的说明,但是,本领域的普通技术人员应当理解,仍然可以对本发明进行修改或者等同替换;而一切不脱离本发明的精神和范围的技术方案及其改进,其均应涵盖在本发明的权利要求范围当中。
权利要求
1、一种用于视频预测残差系数编码的熵编码方法,包括如下步骤
步骤1对图像块的被编码块系数进行zig-zag扫描,形成(level,run)数对序列;
步骤2根据图像块所在宏块类型选择用于编码当前被编码图像块的码表类型;
步骤3对步骤1得到的数对序列中每一(level,run)数对进行编码;
步骤4编码块结束标志EOB。
2、根据权利要求1所述的用于视频预测残差系数编码的熵编码方法,其特征在于所述的zig-zag扫描,具体过程为从图像块最左上开始,先横向移动一个单元,然后向左下方顺次移动,每次到达图像块左或下边缘,就向下或向移右动一个单元,然后向右上方顺次移动,每次到达图像块上或右边缘,再向右或向下移动一个单元,然后向左下方顺次移动,如此循环,到达最右下;就得到整个图像块的(level,run)数对序列。
3、根据权利要求1所述的用于视频预测残差系数编码的熵编码方法,其特征在于所述的根据宏块类型选择用于编码当前被编码图像块系数的码表,具体为如下过程如果当前宏块类型为intra型,则选择intra型码表编码当前宏块内亮度块的系数;如果宏块类型为inter型,则选择inter型码表编码当前宏块内亮度块的系数;如果对宏块内色度块的编码,采用inter型码表或采用色度块自身的码表。
4、根据权利要求1所述的用于视频预测残差系数编码的熵编码方法,其特征在于所述的步骤3,进一步具体包括
步骤31采用固定码表编码最后一个(level,run)数对;
步骤32以当前已编码的(level,run)数对的level值选择编码前一数对的码表;
步骤33以步骤32所选择的码表编码前一(level,run)数对编码;
步骤34如果没有对所有的(level,run)数对编码完毕,则执行步骤32;否则结束步骤三。
5、根据权利要求4所述的用于视频预测残差系数编码的熵编码方法,其特征在于所述的码表为2D-VLC结构,包括(level,run)数对及EOB与码字的映射关系。
6、根据权利要求4所述的用于视频预测残差系数编码的熵编码方法,其特征在于步骤31中所述的固定码表,当编码inter型图像块时为VLCO_inter码表;当编码intra型图像块时为VLCO_intra码表。
7、根据权利要求4所述的用于视频预测残差系数编码的熵编码方法,其特征在于所述步骤3中,编码具体包括如下步骤
步骤331如果(level,run)包含在码表当中,则直接从码表中查表得到码字,再将码字转换成Exp-Golomb码;
步骤332如果(level,run)超出码表范围,先编码escape_code,之后将level和run分别转换成Exp-Golomb码。
8、根据权利要求7所述的用于视频预测残差系数编码的熵编码方法,其特征在于转化成Exp-Golomb码具体包括如下过程首先根据码表确定进行转换需要的Exp-Golomb的阶数,然后根据阶数和码字从Exp-Golomb码表中查出对应的Exp-Golomb码,完成转换。
9、根据权利要求8所述的用于视频预测残差系数编码的熵编码方法,其特征在于确定进行转换需要的Exp-Golomb的阶数,具体包括如下过程
步骤100判断需要进行转换的类型,如果是从码表中查出的(level,run)对应的码字或EOB对应的码字,执行步骤101;如果是超出码表的level值或run值执行步骤102;
步骤101根据码表的不同来确定Exp-Golomb的阶数;
步骤102根据图象块所在宏块为intra型和inter型来确定Exp-Golomb的阶数。
10、根据权利要求1所述的用于视频预测残差系数编码的熵编码方法,其特征在于所述的步骤4,编码块结束标志EOB,具体过程为根据步骤3最后一个(level,run)数对的level值选择编码EOB的码表,从码表中查出对应的EOB码字,并转换成Exp-Golomb码。
全文摘要
本发明公开了一种用于视频预测残差系数编码的熵编码方法,包括如下步骤首先,对被编码块系数进行zig-zag扫描,形成(level,run)数对序列;然后,根据图像块类型选择用于编码当前被编码块的码表类型;接下来对得到的数对序列中每一(level,run)数对进行多码表切换编码,数对的编码顺序为zig-zag扫描的逆向顺序;最后,以当前码表,编码块结束标志EOB;本发明用于视频预测残差系数编码的熵编码方法通过为不同类型,不同level值区域设定不同的码表进行编码,充分考虑到了上下文环境和被编码元素的条件概率分布规律,同时对算法实现复杂度没有影响,并且提高了编码效率。
文档编号H04N7/24GK1527610SQ03157189
公开日2004年9月8日 申请日期2003年9月18日 优先权日2003年9月18日
发明者文 高, 高文, 赵德斌, 王强, 马思伟, 吕岩 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1