HEVC中混合零块检测
对于G-AZB检测:用SAD的两个边界和一个SATD阈值来减少G-AZB检测复杂度;
对于P-AZB检测,提出快速率失真估计算法来提高P-AZB检测效率。
本文首先采用SAD的两个边界和SATD的一个阈值来检测G-AZB。其次,提出一种快速率失真代价估计的方法来检测P-AZB。
混合AZB检测方法
下图展示了本文AZB检测方法的伪代码:
第一步,如果一个TU的SAD小于第一个SAD阈值(SADlower),认为TU是G-AZB;否则,如果SAD大于第二个SAD阈值(SADupper),给TU被认为是NAZB。
第二步,对于其余TU,采用哈达玛阈值检测G-AZB。
第三步,如果上述条件都不满足,提出快速率失真代价估计的方法来预测Costzero和Costnonzero,并且如果Costzero小于Costnonzero,该TU被认为是P-AZB;否则,TU被编码为NAZB。
A.G-AZB检测
如果TU的SAD小于SADlower,它直接被检测为G-AZB;否则,如果TU的SAD大于SADupper,TU被检测为NAZB;其他情况,利用哈达玛阈值检测G-AZB。
HEVC量化:
已经提出下面的SAD阈值:
由于SADlower源于HEVC整数DCT和量化的性质,因此SAD小于SADlower的几乎所有TU被认为是G-AZB,所以把它当作第一个SAD阈值。
为避免冗余计算,提出SAD上界:
其中,C[WDCT]根据实验得到,对于32x32、16x16、8x8、4x4的TU,将C[WDCT]分别设为580、148、37、17。|D-D’|代表量化误差。UB[QP][WDCT]的值设为0.95*|D-D’|。RUB是常数。k[WDCT]是归一化因此,对于32x32、16x16、8x8、4x4的TU分别设为1024、256、64、16。
考虑到哈达玛变换与整数DCT的频率性质相似,定义THH[QP][WDCT]为给定QP和TU宽度的哈达玛阈值:
其中,对于32x32、16x16、8x8、4x4的TU,m分别等于8、2、1/2、1/8。G-AZB检测条件就是:
其中,NUMhadmard代表大于THH[QP][WDCT]的非零哈达玛系数的个数。
由于哈达玛变换只支持2x2、4x4和8x8,因此,DC哈达玛变换被用于检测16x16和32x32的G-AZB。
B.P-AZB检测
当满足下面条件,TU认为是P-AZB:
其中,Costzero和Costnonzero分别代表TU编码成AZB和NAZB的率失真代价。
Costzero的真实值必须经过变换、量化、反量化、反变换和熵编码才能计算出来。如果早些时候检测到P-AZB,可以跳过上面一些操作。对于一个TU的Costzero和Costnonzero的计算:
这里,Distzero和Distnonzero分别代表把TU编码成AZB和NAZB的失真。Bitszero和Bitsnonzero分别代表把TU编码成AZB和NAZB产生的比特数。λ是一个在率失真代价中平衡失真和bit的参数,它可以用量化参数和编码结构得到。
为便于描述推到过程,下表中定义一些符号:
失真计算:
对于Distzero,RR等于0。AZB可以仅用一个标志位粗略地编码。因此:
Distnonzero的值:
对于每个变换系数,普通量化的可视化描述如下图:
首先,通过加入普通量化中的偏移量,将蓝点表示的变换系数移动到红点;然后通过舍入操作减去丢弃量,落入量化区间的红点被移动到黑点处(代表重构值)。这样,单个系数的失真可以近似为:
这样的话,Distnonzero可以被估计为:
下面使用TU的自信息来估计码率:
应用零均值广义高斯分布来模拟变换系数分布。由于HEVC中有四种不同的TU大小,因此通过下面来估计自信息:
由于自信息是理论上编码一个值所需的最小比特数,因此自信息和与实际比特数可能存在差异。Bitsnonzero的估计值假设与实际比特数线性相关,通过下面式子估计Bitsnonzero:
当所有变换系数为0,截距为常数时,Bitsnonzero的估计值为1。