变换系数熵编码简介:
变换系数的扫描是基于4*4大小的子块进行的,子块和子块内部递归扫描。较大的TB首先被分割为多个4*4子块,扫描一般起始于最后一个系数,终止于DC系数,扫描包括子块的扫描和子块内部的扫描。每一个子块内的扫描方式都是一样的。
三种扫描方式:对角,水平,垂直
编码过程:
非零系数位置信息编码:
1 最后一个非零系数的位置:
扫描最后一个非零系数在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之后进行旁路编码
2 其余非零系数的位置
涉及CSBF(coded_sub_block_flag这个在H264也有)表示当前数组CG中是否含有非零系数
sig_coeff_flag 表示当前位置的系数值是否非零
先扫描一个CG的CSBF,若为0,检查下一个CG,若为1那么开始编码每一个位置上的sig_coeff_flag
3 非零系数的幅值信息编码
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
比较简单,主要是最后一个非零系数的符号不需要编码