二值化过程(Binarization process)

VVC标准中使用了4种二值化方案:截断莱斯码(truncated Rice (TR)), 截断二进制码(truncated binary (TB)), k阶指数哥伦布码(k-th order Exp-Golomb (EGk)), 定长码(fixed-length (FL))。

TR码

TR码由前缀和后缀组成,后缀可能不存在。TR码有3个输入,分别是:语法元素值 symbolVal、门限值 cMax 和莱斯参数 cRiceParam。语法元素值 symbolVal 的前缀值 prefixVal 定义如下:

prefixVal = symbolVal >> cRiceParam

如果 prefixVal 小于 cMax >> cRiceParam,则前缀码由 prefixVal 个1和0组成。下表给出了这种一元二值化的码表:

如果 prefixVal 大于等于 cMax >> cRiceParam,则前缀码由 cMax >> cRiceParam 个1组成。

cMax 大于 symbolVal cRiceParam 大于0时,TR码的后缀存在,后缀值推导如下:

suffixVal = symbolVal − ( prefixVal << cRiceParam )

TR 码的后缀通过定长码(FL)为 suffixVal 进行二值化,cMax 值等于 ( 1 << cRiceParam ) − 1。

TB码

TB码的输入有两个,分别为语法元素值 synVal 和门限值 cMax。TB码的推导过程如下:

n = cMax + 1
k = Floor( Log2( n ) )
u = ( 1 << ( k + 1 ) ) − n

如果 synVal 小于 u,则通过定长码(FL)为 synVal 进行二值化,其中 cMax 值等于 ( 1 << k ) − 1。否则,通过定长码(FL)为 (synVal+u) 进行二值化来导出TB码,其中 cMax 值等于(1<<(k+1))−1。

k阶指数哥伦布码

k阶指数哥伦布码包括前缀码和后缀码,输入为语法元素值 symbolVal 和阶数 k,输出的二进制串定义如下,其中函数put(X)是将X放在二进制串的末尾。

absV = Abs( symbolVal )
stopLoop = 0
do
if( absV >= ( 1 << k ) ) {
put( 0 )
absV = absV − ( 1 << k )
k++
} else {
put( 1 )
while( k−− )
put( ( absV >> k ) & 1 )
stopLoop = 1
}
while( !stopLoop )

下表给出了0阶指数哥伦布码的前缀码和后缀码

下表给出了无符号0阶指数哥伦布码,对应语法元素表中的ue(v)

对于有符号的0阶指数哥伦布码,对应语法元素表中的se(v),VVC标准中采用了映射的方法,映射表为:

FL码

FL 码是通过使用符号值 symbolVal 的固定长度位无符号整数二进制串来构造的,其中fixedLength = Ceil( Log2( cMax + 1 ) )。 FL 码的 bin 索引使得 binIdx = 0 与最高有效位相关,并且 binIdx 的值向最低有效位递增。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注