// Exponential-Golomb — стандартный код переменной длины для видеосжатия
Используется в кодеках H.264/AVC и H.265/HEVC.
Разные значения k для разных распределений данных.
Встроенное отображение для знаковых целых чисел.
Коды Exp-Golomb порядка k кодируют неотрицательное целое n так: 1) Прибавьте 1 к n, чтобы получить codeNum, 2) Разделите на 2^k, чтобы получить частное q и остаток r, 3) Запишите q нулей, затем 1, затем r в k битах. При k=0 это соответствует коду Элиаса Гамма. Для знаковых чисел используется отображение: 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, позволяющим адаптироваться к различным распределениям данных.
k=0 (стандартный Exp-Golomb) хорошо подходит для небольших целых чисел с примерно экспоненциальным распределением. Более высокие значения k лучше для больших чисел или более равномерных распределений. Видеокодеки часто используют k=0 для синтаксических элементов и адаптивное k для остатков.
Exp-Golomb идеально подходит для видео, потому что: 1) его легко реализовать в аппаратуре, 2) не требуются таблицы поиска, 3) он хорошо соответствует статистическому распределению видеоданных, 4) обеспечивает хорошее сжатие для векторов движения и трансформант коэффициентов.
По сравнению с Хаффманом: проще, без таблиц, но менее оптимален. По сравнению с арифметическим кодированием: гораздо проще, но с меньшей степенью сжатия. Exp-Golomb — это компромисс между простотой и эффективностью, идеально подходящий для кодирования видео в реальном времени.