admin管理员组

文章数量:1531443

量化后变换系数的熵编码在整个熵编码中占有举足轻重的地位,由于量化后变换系数大多为零值或者幅度较小的值,如何有效利用这一特性是熵编码的关键环节,H265/HEVC标准中,亮度数据和色度数据均以变换块TB为单位,通过编码非零系数的位置信息和非零系数的幅值信息来表示变换系数,本节将详细介绍一个NxN变换块的变换系数是如何进行熵编码的。

8.4.1 变换系数扫描

在对量化后的变换系数进行熵编码之前,必须先通过扫描技术将二维的变换系数排列成一维变换序列,扫描的顺序需要考虑变换系数幅值的分布,一般将幅度想尽的尽量相近排列,以便于在CABAC中建立更有效的上下文模型。提高编码效率。

在H265/HEVC中,变换系数的扫描是基于4x4大小的子块进行的。较大TB需要首先分割成多个4x4的子块,子块和子块内部系数按照相同的方式进行扫描,图8.7给出了8x8的TB采用对焦扫描时变换系数的扫描顺序,8x8的TB被划分成4个4x4的TB,扫描起始于最后一个系数,终止于DC系数,扫描过程包括了子块的扫描和子块内变换系数的扫描,子块扫描中4x4子块从右上角到左下角逐一扫描,子块内变换系数扫描中4x4系数从右上角到左下角逐一扫描,这种基于4x4子块的扫描技术可以一致性的处理所有大小的TB,有助于编码器模块化,一个4x4子块内扫描后的16个连续系数成为系数组Coefficient Group, CG。

上述的对角扫描与H264/AVC中的aigzag 扫描方式相似,此外,H265/HEVC还采用了另外两种扫描方式,水平扫描和垂直扫描,具体扫描顺序分别如图

所有的扫描都起始于TB内最后一个系数,终止于DC系数,以反向的水平或者垂直扫描方式进行。

采用不同的预测模式的TB,其系数分布往往具有一定的规律,如一个采用水平预测模式的帧内块,变换后的能量很大程序上集中在前几列,垂直扫描方式的对变换系数的熵编码非常有利,垂直预测模式更适合于水平扫描方式,H265/HEVC详细规定了预测模式于扫描方式的对应关系,这种方法叫模式依赖的系数扫描,因此扫描方式不需要语法元素显示表示,如对于帧内预测的4x4TB和8x8 TB,垂直预测模式对应水平扫描方式。对于16x16 TB和32x32TB的帧内模式以及帧间预测模式都采用了对角扫描。

8.4.2 非零系数的位置信息编码

一个TB的变换系数经过扫描后就可以得到一组一维的变换系数,该组系数可以根据非零系数位置信息和幅值信息完全表示,H265/HEVC标准就是对该组系数中非零位置信息和幅值信息进行CABAC编码

表示非零系数位置信息涉及的语法元素有last_sig_coeff_x_prefix. last_sig_coeff_y_prefix, last_sig_coeff_x_suffix, last_sig_coeff_y_sufix, CSBF 和sig_coeff_flag, 前4个语法元素用于标定TB中的最后一个非零系数的位置,即经过扫描后第一个非零系数在TB中的位置,后面两个语法用于标定经过扫描后除第一个非零系数外的所有非零系数的位置。

1 最后一个非零系数的位置

对一个TB的变换系数进行熵编码,首先是熵编码TB中的足后一个非零系数的位置,设经过扫描后的最后一个非零系数在TB中的位置坐标为(x,y) ,x和y分别表示该系数所在的列号和行号。x使用语法元素last_sig_coeff_x_prefix和last_sig_coeff_x_suffix表示,y使用语法元素last_sig_coeff_y_prefix和last_sig_coeff_y_suffix表示。这4个语法元素值的获取过程为,将TB的行和列划分为B个区间,不同尺寸的变换块对应的N不同,变换尺寸为4x4,8x8,16x16,32x32时,对应的N分别为4,6,8,10。每个区间对应一个区间索引,表示该区间内的最小位置坐标,last_significant_coeff_x_prefix和last_significant_coeff_y_prefix就等于x和y各自所在区间的索引值,last_significant_coeff_x_suffix和last_significant_coeff_y_suffix就等于x和y各自区间内部的偏移量,区间索引值对应的最小位置坐标加上偏移量,即可分别得到x和y最终的位置坐标,8.46给出了TB为32x32,x或y所对应的区间索引和区间内偏移量,以及各自的二元码。

坐标位置

前缀

后缀

偏移范围

0

0

-

1

10

-

2

110

-

3

1110

-

4-5

11110

X

6-7

111110

X

8-11

1111110

XX

12-15

11111110

XX

16-23

111111110

XXX

24-31

111111111

XXX

X为0或者1

最后一个非零系数位置的熵编码即为对着4个语法元素进行CABAC编码,具体顺序为,首先,编码语法元素last_sig_coeff_x_prefix和last_sig_coeff_y_prefix,然后,编码last_sig_coeff_x_suffix和last_sig_coeff_y_suffix ,last_significant_coeff_x_prefix和last_significant_coeff_y_prefix。经过TR二元化后进行熵编码,采用的上下文索引模型见表8.47

last_significant_coeff_x_suffix和last_significant_coeff_y_suffix 经过FL二元化后进行旁路编码。

本文标签: 系数Hevc