首页 > 代码库 > HEVC变换后残差系数编码原理

HEVC变换后残差系数编码原理

变换系数熵编码简介:


变换系数的扫描是基于4*4大小的子块进行的,子块和子块内部递归扫描。较大的TB首先被分割为多个4*4子块,扫描一般起始于最后一个系数,终止于DC系数,扫描包括子块的扫描和子块内部的扫描。每一个子块内的扫描方式都是一样的。

三种扫描方式:对角,水平,垂直

 

编码过程:
非零系数位置信息编码:


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

扫描最后一个非零系数在TB中的位置(x,y)对应last_sig_coeff_x_prefix,last_sig_coeff_y_prefix;  last_sig_coeff_x_suffix,last_sig_coeff_y_suffix

每一个TB会根据他的大小划分为N个区间(区间具体为多大??)

前两个变量表示所在区间的左上角索引,经TR之后进行常规编码

后两个变量表示在区间内的索引信息,讲过FL之后进行旁路编码

 

其余非零系数的位置

涉及CSBFcoded_sub_block_flag这个在H264也有)表示当前数组CG中是否含有非零系数

sig_coeff_flag 表示当前位置的系数值是否非零

先扫描一个CGCSBF,若为0,检查下一个CG,若为1那么开始编码每一个位置上的sig_coeff_flag

 

非零系数的幅值信息编码

coeff_sign_flag 表示系数是正值还是负值

coeff_abs_level_greater1_flag 表示幅值绝对值是否大于1

coeff_abs_level_greater2_flag 表示幅值绝对值是否大于2

Coeff_abs_level_remaining = absCoeffLevel-baseLevel

baseLevel = sig_coeff_flag+coeff_abs_level_greater1_flag+coeff_abs_level_greater2_flag

 

一个CG内所有非零系数的复制信息编码过程:

(1)先扫描CG中前8个非零系数的coeff_abs_level_greater1_flag,之后的默认为0

(2)编码CG中第一个absCoeffLevel大于1的元素的coeff_abs_level_greater2_flag,后面的默认为0

(3)编码CG中所有非零元素的符号coeff_sign_flag,采用旁路编码

(4)计算CG当中所有非零元素的Coeff_abs_level_remaining 采用旁路编码

 

后面还有一种根据符号奇偶性进行符号数据隐藏的办法,SDH

比较简单,主要是最后一个非零系数的符号不需要编码

HEVC变换后残差系数编码原理