Контекстно-адаптивное двоичное арифметическое кодирование (CABAC ) - это форма энтропийного кодирования, используемая в H.264 / MPEG- 4 стандарта AVC и High Efficiency Video Coding (HEVC). Это потеря метод меньшего сжатия, хотя стандарты кодирования видео, в которых он используется, обычно предназначены для приложений сжатия с потерями. CABAC примечателен тем, что обеспечивает намного лучшее сжатие, чем большинство других алгоритмов энтропийного кодирования, используемых при кодировании видео, и является одним из ключевых элементов, обеспечивающих схеме кодирования H.264 / AVC лучшие возможности сжатия, чем его предшественники..
В H.264 / MPEG-4 AVC CABAC поддерживается только в основном и более высоких профилях (но не в расширенном профиле) стандарта, поскольку для декодирования требуется больший объем обработки, чем для более простой схемы, известной как контекстно-адаптивное кодирование переменной длины (CAVLC), которое используется в стандартном базовом профиле. CABAC также сложно распараллеливать и векторизовать, поэтому с его использованием могут быть связаны другие формы параллелизма (например, параллелизм пространственных областей). В HEVC CABAC используется во всех профилях стандарта.
CABAC на основе арифметического кодирования, с некоторыми нововведениями и изменениями для адаптации к требованиям стандартов кодирования видео:
CABAC имеет несколько режимов вероятности для разных контекстов. Сначала он преобразует все не двоичные символы в двоичные. Затем для каждого бита кодер выбирает, какую модель вероятности использовать, а затем использует информацию от близлежащих элементов для оптимизации оценки вероятности. Наконец, для сжатия данных применяется арифметическое кодирование.
Метод энтропийного кодирования CABAC, используемый в стандарте сжатия видео H264 на английском языкеКонтекстное моделирование обеспечивает оценки условных вероятностей кодирующих символов. Используя подходящие контекстные модели, можно использовать данную межсимвольную избыточность, переключаясь между различными вероятностными моделями в соответствии с уже закодированными символами в окрестности текущего символа, который нужно кодировать. Контекстное моделирование обеспечивает большую часть примерно 10% экономии CABAC в скорости передачи по сравнению с методом энтропийного кодирования CAVLC.
Кодирование символа данных включает следующие этапы.
1. Бинаризуйте значение MVDx, разность векторов движения в направлении x.
MVD x | Бинаризация |
---|---|
0 | 0 |
1 | 10 |
2 | 110 |
3 | 1110 |
4 | 11110 |
5 | 111110 |
6 | 1111110 |
7 | 11111110 |
8 | 111111110 |
Первый бит двоичного кодового слова это корзина 1; второй бит - это ячейка 2; и так далее.
2. Выберите контекстную модель для каждой корзины. Для бина 1 выбирается одна из 3 моделей на основе ранее закодированных значений MVD. Вычисляется норма L1 двух ранее закодированных значений, e k :
ek | Контекстная модель для бина 1 |
---|---|
0 ≤ e k< 3 | Модель 0 |
3 ≤ e k< 33 | Модель 1 |
33 ≤ e k | Модель 2 |
Если e k мало, то высока вероятность того, что текущая MVD будет иметь небольшую величину; и наоборот, если e k велико, то более вероятно, что текущий MVD будет иметь большую величину. Соответственно выбираем таблицу вероятностей (контекстную модель). Остальные ячейки кодируются с использованием одной из 4 дополнительных контекстных моделей:
Bin | Контекстная модель |
---|---|
1 | 0, 1 или 2 в зависимости от e k |
2 | 3 |
3 | 4 |
4 | 5 |
5 и выше | 6 |
3. Кодируйте каждую ячейку. Выбранная контекстная модель предоставляет две оценки вероятности: вероятность того, что ячейка содержит «1», и вероятность того, что ячейка содержит «0». Эти оценки определяют два поддиапазона, которые арифметический кодер использует для кодирования бина.
4. Обновите контекстные модели. Например, если контекстная модель 2 была выбрана для ячейки 1 и значение ячейки 1 было «0», счетчик частоты «0» увеличивается. Это означает, что в следующий раз, когда будет выбрана эта модель, вероятность получения «0» будет немного выше. Когда общее количество вхождений модели превышает пороговое значение, счетчики частоты для «0» и «1» будут уменьшены, что фактически дает более высокий приоритет последним наблюдениям.
Арифметический декодер более подробно описан в Стандарте. Он имеет три различных свойства:
Определение процесса декодирования разработано для облегчения -сложность реализации арифметического кодирования и декодирования. В целом, CABAC обеспечивает повышенную эффективность кодирования по сравнению с кодированием на основе CAVLC за счет большей вычислительной сложности.
В 1986 году исследователи IBM Коттапурам М. А. Мохиуддин и Йорма Йоханнен Риссанен подали патент на алгоритм двоичного арифметического кодирования без умножения. В 1988 году исследовательская группа IBM, в которую входили Р. Б. Арпс, Т. Чыонг, Д.Дж. Лу, У. Б. Пеннебейкер, Л. Митчелл и Г. Г. Лэнгдон представили алгоритм адаптивного двоичного арифметического кодирования (ABAC) под названием Q-Coder.
Вышеупомянутые патенты и исследовательские статьи, а также несколько других от IBM и Mitsubishi Electric, позже были процитированы CCITT и Joint Photographic Experts Group в качестве основы для адаптивного двоичного файла формата JPEG сжатия изображений. алгоритм арифметического кодирования в 1992 году. Однако кодеры и декодеры формата файла JPEG, который имеет опции как для кодирования Хаффмана, так и для арифметического кодирования, обычно поддерживают только вариант кодирования Хаффмана, который изначально был связан с патентами, хотя патенты JPEG на арифметическое кодирование с тех пор истекли из-за возраста стандарта JPEG.
В 1999 году Ёнджун Ю (Texas Instruments ), Янг Гэп Квон и Антонио Ортега (Университет of Southern California ) представила контекстно-адаптивную форму двоичного арифметического кодирования. Современный алгоритм контекстно-адаптивного двоичного арифметического кодирования (CABAC) был коммерчески представлен с форматом H.264 / MPEG-4 AVC в 2003 году. Большинство патентов на формат AVC принадлежат Panasonic, Godo Kaisha IP Bridge и LG Electronics.