AVS3摒弃了HEVC和AVS2中的基于CG(Coefficient Group)的变换系数编码方式,使用基于扫描区域的变换系数编码方法Scan Region-based Coefficient Coding(SRCC)。
在基于块的预测变换混合编码框架里,当一个块完成预测、变换和量化后会获得相应的变换系数,在对系数进行熵编码前需要将二维的变换系数先转化为一维,HEVC和AVS2的做法是先将变换块(TU)分成4x4的块,每个4x4的块称为系数组CG,然后对TB内的CG按照反向zig-zag扫描或反向垂直(水平)扫描,CG内的4x4系数按照同样的扫描方式,最终得到一维的变换系数。
SRCC
SRCC和传统变换系数编码最大的不同是它没有CG的概念,从特定区域的右下角开始对系数进行反向zig-zag扫描。
扫描区域
TU的扫描区域的右下角坐标的x轴坐标(SRx)是最右侧非零系数的x坐标,y轴坐标(SRy)是最下方的非零系数的y坐标,如下图。

下图是SRCC扫描方式和基于CG的扫描方式的区别,

Significance flag
Significance flag表示区域内每个位置是否有非零系数,即只有非零系数需要传输。有两种特殊情况,如果区域的右边界即(SRx,y) y>0没有非零系数则(SRx,0)处的Significance flag默认为1;如果区域的下边界即(x,SRy) x>0没有非零系数则(0,SRy)处的Significance flag默认为1;
Significance flag熵编码的上下文索引由以下两个表求得,

GT1 flag和GT2 flag
在对非零系数的值进行编码时,由于大量系数比较小,集中在1和2附近,可以采用GT1和GT2标志位表示,当一个系数Significance flag为1时表示该系数非零,如果该系数大于1则GT1为1否则为0,如果该系数还大于2则GT2为1,只有在GT1为1时才需要编码GT2标志位。
GT1和GT2的熵编码上下文索引由下表求得,

Remaining absolute level
只有当GT2为1时才需要编码Remaining absolute level,该值等于系数的绝对值减去2。
符号位编码
每个非零系数的符号位使用bypass编码方式。
实验结果
SRCC集成进了AVS3-Baseline,实验平台是HPM3.2,结果如下表,可以发现分辨率越高gain越大,这是因为分辨率越高大尺寸变换块越多,SRCC对于区域的限制越高效。

下表是SRCC和传统方法所使用的上下文变量的数量的对比,
