// 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、その後に k ビットで表した r を書きます。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 などの動画圧縮標準で広く利用されているユニバーサル可変長コードです。パラメータ k を導入することで Elias Gamma 符号を一般化し、さまざまなデータ分布に適応できるようにします。
k=0 (標準的な Exp-Golomb) は、指数分布に近い小さな整数に適しています。より大きな整数やより均一な分布には、より大きな k の方が向いています。動画コーデックでは、構文要素には k=0 を、残差には適応的な k を用いることが多いです。
Exp-Golomb が動画に適している理由は次の通りです。1) ハードウェア実装が簡単、2) ルックアップテーブルが不要、3) 動画データの統計的分布に良く合う、4) モーションベクトルや変換係数を効率よく圧縮できます。
Huffman と比べると、Exp-Golomb はテーブルが不要でより単純ですが、最適性はやや低くなります。算術符号化と比べるとはるかに単純ですが、圧縮率は低くなります。Exp-Golomb は単純さと効率のバランスが良く、リアルタイム動画エンコードに最適です。