Кодирование Голомба
Кодирование Голомба — это метод сжатия данных без потерь с использованием семейства кодов сжатия данных , изобретенных Соломоном В. Голомбом в 1960-х годах. Алфавиты, следующие геометрическому распределению, будут иметь код Голомба в качестве оптимального префиксного кода . [1] что делает кодирование Голомба очень подходящим для ситуаций, в которых появление малых значений во входном потоке значительно более вероятно, чем больших значений.
Кодирование риса
[ редактировать ]Кодирование Райса (изобретое Робертом Ф. Райсом ) означает использование подмножества семейства кодов Голомба для создания более простого (но, возможно, неоптимального) префиксного кода. Райс использовала этот набор кодов в схеме адаптивного кодирования ; «Кодирование Райса» может относиться либо к этой адаптивной схеме, либо к использованию этого подмножества кодов Голомба. В то время как код Голомба имеет настраиваемый параметр, который может быть любым положительным целым значением, коды Райса — это те, в которых настраиваемый параметр представляет собой степень двойки. Это делает коды Райса удобными для использования на компьютере, поскольку умножение и деление на 2 можно более эффективно реализовать в двоичной арифметике .
Райс была мотивирована предложить это более простое подмножество из-за того, что геометрические распределения часто меняются со временем и не известны точно, или и то, и другое, поэтому выбор, казалось бы, оптимального кода может быть не очень выгодным.
Кодирование Райса используется в качестве этапа энтропийного кодирования во многих методах сжатия изображений без потерь и сжатия аудиоданных .
Обзор
[ редактировать ]Построение кодов
[ редактировать ]Кодирование Голомба использует настраиваемый параметр M для разделения входного значения x на две части: q , результат деления на M , и r , остаток. Частное передается в унарном кодировании , за которым следует остаток в усеченном двоичном кодировании . Когда , кодирование Голомба эквивалентно унарному кодированию.
Коды Голомба-Райса можно рассматривать как коды, которые указывают число по положению ячейки ( q ) и смещению внутри ячейки ( r ). На рисунке в качестве примера показаны позиция q и смещение r для кодирования целого числа x с использованием параметра Голомба-Райса M = 3 с вероятностями источника, следующими за геометрическим распределением с p (0) = 0,2 .
Формально эти две части задаются следующим выражением, где x — кодируемое неотрицательное целое число:
и
- .
И q, и r будут закодированы с использованием переменного числа битов: q - унарным кодом, а r - b битами для кода Райса или выбором между b и b +1 битами для кода Голомба (т. е. M не является степенью 2). ), с . Если , затем используйте b бит для кодирования r ; в противном случае используйте b +1 бит для кодирования r . Четко, если M — степень 2, и мы можем закодировать все значения r с помощью b бит.
Целое число x, обработанное Голомбом, было длиной прогона процесса Бернулли , который имеет геометрическое распределение, начинающееся с 0. Наилучший выбор параметра M - это функция соответствующего процесса Бернулли, который параметризуется выражением вероятность успеха в данном испытании Бернулли . M — это либо медиана распределения, либо медиана ±1. Его можно определить с помощью неравенств:
которые решаются
- .
Для примера с p (0) = 0,2 :
- .
Код Голомба для этого распределения эквивалентен коду Хаффмана для тех же вероятностей, если бы можно было вычислить код Хаффмана для бесконечного набора исходных значений.
Использовать с целыми числами со знаком
[ редактировать ]Схема Голомба была разработана для кодирования последовательностей неотрицательных чисел. Однако его легко расширить для приема последовательностей, содержащих отрицательные числа, используя схему перекрытия и чередования , в которой все значения переназначаются некоторому положительному числу уникальным и обратимым способом. Последовательность начинается: 0, -1, 1, -2, 2, -3, 3, -4, 4, ... n -е отрицательное значение (т. е. ) отображается в n й нечетное число ( ), а м й положительное значение отображается в m -е четное число ( ). Математически это можно выразить следующим образом: положительное значение x отображается в ( ), а отрицательное значение y отображается в ( ). Такой код можно использовать для простоты, даже если он неоптимален. По-настоящему оптимальные коды для двусторонних геометрических распределений включают в себя несколько вариантов кода Голомба в зависимости от параметров распределения, в том числе и этот. [2]
Простой алгоритм
[ редактировать ]Ниже приведена кодировка Райса-Голомба, где в остаточном коде используется простая усеченная двоичная кодировка, также называемая «кодированием Райса» (для остаточных кодов возможны другие двоичные кодировки различной длины, такие как арифметические кодировки или кодировки Хаффмана, если статистическое распределение коды остатков не являются плоскими, особенно когда используются не все возможные остатки после деления). В этом алгоритме, если параметр M равен степени 2, он становится эквивалентным более простому кодированию Райса:
- Присвойте параметру M целочисленное значение.
- Для N числа, которое нужно закодировать, найдите
- частное = q = пол( N / M )
- остаток = r = N по модулю M
- Создать кодовое слово
- Формат кода: <Код частного><Код остатка>, где
- Частный код (в унарном кодировании )
- Запишите строку длиной q из 1 бита (или из 0 бит).
- Запишите 0 бит (соответственно 1 бит)
- Код остатка (в усеченной двоичной кодировке )
- Позволять
- Если код r в двоичном представлении с использованием b бит.
- Если закодируйте номер в двоичном представлении с использованием b + 1 бит.
- Позволять
Расшифровка:
- Декодируйте унарное представление q (подсчитайте число 1 в начале кода)
- Пропустить разделитель 0
- Позволять
- Интерпретируйте следующие b бит как двоичное число r' . Если удерживается, затем напоминание
- В противном случае интерпретируйте b + 1 бит как двоичное число r' , напоминание будет выглядеть так:
- Вычислить
Пример
[ редактировать ]Установите М = 10 . Таким образом . Прекращение .
|
|
Например, при кодировании Райса-Голомба с использованием параметра M = 10 десятичное число 42 сначала будет разделено на q = 4 и r = 2 и будет закодировано как qcode( q ),rcode( r ) = qcode(4 ),rcode(2) = 11110,010 (вам не нужно кодировать разделительную запятую в выходном потоке, поскольку 0 в конце q -кода достаточно, чтобы сказать, когда q заканчивается и начинается r ; оба qcode и rcode являются саморазграниченными).
Использовать для кодирования длин серий
[ редактировать ]- Обратите внимание, что p и 1 – p в этом разделе поменяны местами по сравнению с использованием в предыдущих разделах.
Учитывая алфавит из двух символов или набор из двух событий, P и Q , с вероятностями p и ( 1 − p ) соответственно, где p ≥ 1/2 , кодирование Голомба может использоваться для кодирования серий из нуля или более P ′ s, разделенные одиночными Q 's. В этом приложении наилучшей настройкой параметра M является ближайшее целое число к . Когда p = 1/2, M = 1, и код Голомба соответствует унарному ( n ≥ 0 P , за которым следует Q, кодируется как n единиц, за которыми следует ноль). Если требуется более простой код, можно присвоить параметр Голомба – Райса b (т. е. параметр Голомба ) до целого числа, ближайшего к ; хотя это не всегда лучший параметр, обычно это лучший параметр Райса, и его производительность сжатия довольно близка к оптимальному коду Голомба. (Сам Райс предлагал использовать различные коды для одних и тех же данных, чтобы выяснить, какой из них лучше. Более поздний исследователь JPL предложил различные методы оптимизации или оценки параметра кода. [3] )
Рассмотрите возможность использования кода Райса с двоичной частью, имеющей b битов, для кодирования последовательностей серий, где P имеет вероятность p . Если — это вероятность того, что бит будет частью k -битной серии ( Ps и один Q ) и - степень сжатия этого пробега, тогда ожидаемая степень сжатия равна
Сжатие часто выражается через , пропорция сжата. Для подход кодирования длин серий приводит к степени сжатия, близкой к энтропии . Например, используя код Райса для дает сжатие 91,89% , а предел энтропии составляет 91,92% .
Адаптивное кодирование Голомба – Райса
[ редактировать ]Если распределение вероятностей для целых чисел неизвестно, оптимальный параметр кодера Голомба – Райса определить невозможно. Таким образом, во многих приложениях используется двухпроходный подход: сначала блок данных сканируется для оценки функции плотности вероятности (PDF) для данных. Затем на основе этой оцененной PDF определяется параметр Голомба – Райса. Более простой вариант этого подхода состоит в том, чтобы предположить, что PDF принадлежит параметризованному семейству, оценить параметры PDF на основе данных, а затем вычислить оптимальный параметр Голомба – Райса. Именно этот подход используется в большинстве приложений, обсуждаемых ниже.
Альтернативный подход к эффективному кодированию целочисленных данных, PDF которых неизвестен или варьируется, заключается в использовании обратно-адаптивного кодировщика. Кодер RLGR [1] достигает этого, используя очень простой алгоритм, который регулирует параметр Голомба-Райса вверх или вниз, в зависимости от последнего закодированного символа. Декодер может следовать тому же правилу для отслеживания изменений параметров кодирования, поэтому не требуется передавать никакой дополнительной информации, а только закодированные данные. Предполагая обобщенный гауссовский PDF-файл, который охватывает широкий диапазон статистических данных, наблюдаемых в данных, таких как ошибки прогнозирования или коэффициенты преобразования в мультимедийных кодеках, алгоритм кодирования RLGR может очень хорошо работать в таких приложениях.
Приложения
[ редактировать ]Многочисленные кодеки сигналов используют код Райса для предсказания остатков.В алгоритмах прогнозирования такие остатки имеют тенденцию попадать в двустороннее геометрическое распределение , причем небольшие остатки встречаются чаще, чем большие, а код Райса близко аппроксимирует код Хаффмана для такого распределения без накладных расходов, связанных с передачей таблицы Хаффмана. .Одним из сигналов, который не соответствует геометрическому распределению, является синусоидальная волна , поскольку дифференциальные остатки создают синусоидальный сигнал, значения которого не создают геометрическое распределение (самое высокое и самое низкое значения остатка имеют одинаковую высокую частоту появления, только медианные положительные и отрицательные значения остатки встречаются реже).
Несколько аудиокодеков без потерь , таких как Shorten , [4] ФЛАК , [5] Apple Lossless и MPEG-4 ALS используют код Райса после этапа линейного прогнозирования (называемого «адаптивным FIR-фильтром» в Apple Lossless).Кодирование Райса также используется в кодеке изображений без потерь FELICS .
Кодер Голомба-Райса используется на этапе энтропийного кодирования алгоритма Райса на основе кодеков изображений без потерь . Один из таких экспериментов дает показанный график степени сжатия.
Схема JPEG-LS использует Райс-Голомба для кодирования остатков прогнозирования.
Упомянутая выше адаптивная версия кодирования Голомба-Райса, кодировщик RLGR [2] , используется для кодирования содержимого экрана в виртуальных машинах в компоненте RemoteFX протокола удаленного рабочего стола Microsoft.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Галлагер, Р.Г.; ван Вурхис, округ Колумбия (1975). «Оптимальные исходные коды для геометрически распределенных целочисленных алфавитов». Транзакции IEEE по теории информации . 21 (2): 228–230. дои : 10.1109/тит.1975.1055357 .
- ^ Мерхав, Н.; Серусси, Г.; Вайнбергер, MJ (2000). «Кодирование источников с двусторонними геометрическими распределениями и неизвестными параметрами». Транзакции IEEE по теории информации . 46 (1): 229–236. дои : 10.1109/18.817520 .
- ^ Кили, А. (2004). Выбор параметра Голомба при кодировании Райса (технический отчет). Лаборатория реактивного движения . 42-159.
- ^ «Человек укорачивается» . Архивировано из оригинала 30 января 2014 г. Проверено 7 декабря 2008 г.
- ^ «FLAC — Обзор формата» . xiph.org .
Дальнейшее чтение
[ редактировать ]- Голомб, Соломон В. (1966). Кодировки длин серий. Транзакции IEEE по теории информации, IT-12(3):399-401
- Райс, Роберт Ф.; Плааунт, Р. (1971). «Адаптивное кодирование переменной длины для эффективного сжатия телевизионных данных космических аппаратов». Транзакции IEEE в области коммуникаций . 16 (9): 889–897. дои : 10.1109/TCOM.1971.1090789 .
- Роберт Ф. Райс (1979), « Некоторые практические универсальные методы бесшумного кодирования », Лаборатория реактивного движения, Пасадена, Калифорния, публикация JPL 79–22, март 1979 г.
- Уиттен, Ян Моффат, Алистер Белл, Тимоти. «Управление гигабайтами: сжатие и индексирование документов и изображений». Второе издание. Издательство Morgan Kaufmann, Сан-Франциско, Калифорния. 1999 год ISBN 1-55860-570-3
- Дэвид Саломон. «Сжатие данных», ISBN 0-387-95045-1 .
- Х. С. Малвар, Адаптивное кодирование по длинам серий/Голомба – Райса квантованных обобщенных гауссовских источников с неизвестной статистикой , Proc. Конференция по сжатию данных, 2006 г.
- Энтропийное кодирование RLGR , открытая спецификация Microsoft MS-RDPRFX, кодек RemoteFX для протокола удаленного рабочего стола.
- С. Бютчер, CLA Кларк и Г. В. Кормак. Поиск информации: внедрение и оценка поисковых систем. Архивировано 5 октября 2020 г. в Wayback Machine . MIT Press, Кембридж, Массачусетс, 2010.