// Exponential-Golomb —— 视频压缩中的标准可变长码
用于 H.264/AVC 与 H.265/HEVC 编码器。
根据不同分布选择不同的 k 值。
内置有符号整数映射。
阶数为 k 的 Exp-Golomb 码对非负整数 n 的编码过程:1)先将 n 加 1 得到 codeNum;2)用 2^k 相除得到商 q 和余数 r;3)写出 q 个 0,再写 1,最后将 r 用 k 位二进制写出。k=0 时等价于 Elias Gamma 编码。有符号整数的映射为:n>0 → 2n-1,n≤0 → -2n。
阶数 k=0(标准): 0 → 1 1 → 010 2 → 011 3 → 00100 阶数 k=1: 0 → 10 1 → 11 2 → 010 3 → 011 有符号模式(k=0): 0 → 1(映射到 0) 1 → 010(映射到 1) -1 → 011(映射到 2) 2 → 00100(映射到 3)
Exponential-Golomb 编码是一种通用的可变长编码,在 H.264、H.265 等视频压缩标准中被广泛采用。它在 Elias Gamma 编码的基础上引入参数 k,使编码能够适应不同的数据分布。
k=0(标准 Exp-Golomb)适合分布大致呈指数衰减的较小整数。对于数值更大或分布更均匀的数据,更大的 k 通常效果更好。视频编解码器往往对语法元素使用 k=0,对残差数据使用自适应的 k。
Exp-Golomb 非常适合视频:1)硬件实现简单;2)不需要查找表;3)与视频信号的统计分布高度匹配;4)对运动向量和变换系数有良好的压缩效率。
与 Huffman 相比:实现更简单、无需表,但压缩率略低;与算术编码相比:结构更简单、复杂度更低,但压缩性略逊一筹。Exp-Golomb 在“简单实现”和“压缩效率”之间取得了很好平衡,非常适合实时视频编码。