Спецификация формата сжатия видео SIF1

В данном документе, как и в других подобных спецификациях, описывается только алгоритм декодирования. Также, возможно, некоторые вопросы связанные с кодированием будут рассмотрены в приложении к данному документу. Уровень изложения материала данной спецификации выбран, с расчетом на то, что читатель знаком с общими принципами работы алгоритма SIF преобразования, изложенными в опубликованном патенте.


Общая структура декодера и описание использованных алгоритмов.

Основная структура декодера традиционна и весьма проста. Она в чем-то даже проще, чем структура MPEG1 декодера. В то же время, за счет применения ряда уникальных алгоритмов в каждом функциональном блоке декодера, достигается очень высокая эффективность сжатия. Общая структура декодера изображена на рис. 1.

Входные сжатые данные поступают на два независимых движка энтропийного декодирования.

Первый декодер декодирует и деквантует входные прямые и межкадровые текстурные данные, а также декодирует геометрические управляющие данные. Геометрические данные содержат информацию о разбиении сжатого изображения на паттерны передискретизации, а текстурные данные представляют из себя одномерные массивы декодированных субсэмплов из этих паттернов. Все три вышеперечисленных типа данных используются движком обратного SIF преобразования для восстановления сжатого изображения. При этом для восстановления паттернов передискретизации, закодированных межкадровым методом используется и изображение предыдущего кадра в котором с помощью движка компенсации движения было компенсировано межкадровое движение.

Второй декодер декодирует данные векторов движения, которые необходимы для работы движка компенсации движения.

Таким образом, в декодере имеются четыре основных функциональных блока, реализующих четыре основных алгоритма декодера. При этом в двух энтропийных декодерах используются некоторое количество унифицированных алгоритмов.

Рассмотрим сначала эти общие алгоритмы:

  1. Используется унифицированный интервальный кодер. Код данного кодера является модификацией известного свободного кода написанного Евгением Шелвиным и отличается от него уменьшенной точностью целочисленной арифметики. Данный кодер может быть реализован на любой аппаратуре поддерживающей аппаратное умножение двух 16 битных чисел.
  2. Используется собственный унифицированный алгоритм быстрого бинарного PPM (Prediction by Partial Matching) кодирования c механизмом наследования между контекстами разного порядка.
  3. Используется несколько контекстно применяемых bPPM кодеков с контекстами довольно высокого порядка. В некоторых случаях порядок доходит до 3. Однако размер каждого контекста невелик и обычно не превосходит 16, то есть 4 двоичных разряда. Такой алгоритм был выбран потому, что декодер не использует заранее заданные таблицы вероятностей, как это например сделано в CABAC кодере стандарта H.264. Вместо этого алгоритм оптимизирован на максимально быстрый набор статистики в начале кодирования.
  4. Бинаризация входных данных обычно осуществляется с помощью алгоритма выделения из числа его знака, мантиссы и экспоненты с кодированием индивидуальными bPPM кодеками каждой из этих составляющих.
  5. Используется два алгоритма адаптации весовых коэффициентов энтропийной модели – быстрый используемый для устоявшихся контекстов и медленный, боле точный, для новых неустойчивых контекстов.
  6. Состояние энтропийной модели сбрасывается только при кодировании каждого ключевого кадра. Это понижает устойчивость кодека к ошибкам в канале передачи, но увеличивает эффективность работы энтропийного кодека. Также в будущем возможна реализация других, режимов работы энтропийных кодеков, которые будут более устойчивы к вещанию по зашумленным каналам связи.

Теперь перейдем к индивидуальным особенностям каждого из основных функциональных блоков.

Энтропийный декодер и деквантователь текстурных данных использует следующие индивидуальные алгоритмы:

  1. Текущие геометрические управляемые данные используются как одни из контекстов в bPPM кодеках текстурных данных.
  2. Для каждой группы из 32 текстурных сэмплов декодируется индивидуальный базовый порог квантования.
  3. Для каждого индивидуального текстурного сэмпла базовый порог квантования пересчитывается в индивидуальный порог квантования, который зависит от положения данного сэмпла в иерархической древовидной структуре геометрических данных.
  4. Квантованные текстурные данные деквантуются с помощью нелинейного, психовизуально адаптированного, табличного алгоритма деквантования.

Энтропийный декодер векторов движения использует следующие индивидуальные алгоритмы:

  1. Используется блочный алгоритм представления векторов движения с переменным размером блока.
  2. Размер блока описываемого одним вектором движения может изменяться от 64x64 пикселя, до 4x4 пикселя. При этом используются половинные по высоте или ширине прямоугольные блоки. То есть поддерживаются все возможные конфигурации блоков в ряду от 64x64, 32x64, 64x32 … до … 8x8, 4x8, 8x4, 4x4.
  3. Для кодирования расположения блоков векторов движения используется древовидная структура, более эффективная, чем обычное квадродерево, применяемое, например, в стандарте H.264.
  4. Поддерживаются очень большие вектора движения с размером до 16384 по каждой координате.
  5. Используется адаптивный выбор типа предсказателя для каждого кодируемого вектора движения.

В целом можно считать, что кодирование векторов движение в SIF1 более эффективно, чем в H.264, то есть относительный размер векторов движения в выходном потоке у SIF1 существенно меньше чем у H.264.

Движок компенсации движения имеет следующие уникальные особенности:

  1. Для вычисления субпиксельных сдвигов используются адаптивные интерполяционные фильтры с переключаемой длинной.
  2. Для устранения резких перепадов на границах блоков, образующихся при блочной компенсации движения, и ухудшающих визуальное качество изображения используется два адаптивно переключаемых алгоритма.
  3. Первый алгоритм это стандартный алгоритм компенсации движения перекрывающимися блоками. Однако его особенность в том, что используются небольшие радиусы перекрытия. Этот алгоритм применяется в тех случаях, когда второй алгоритм не эффективен.
  4. Второй алгоритм, это уникальный алгоритм использующий специальные пред-пост преобразования на границе блоков. Преимущество его в том, что он позволяет получить достаточно высокую эффективновсть устранения резких перепадов на границах блоков при очень маленьких степенях перекрытия блоков и соответственно без необходимости вычислять ”лишние” субпиксельные сдвиги для перекрывающихся участков. Это обеспечивает высокую скорость работы движка компенсации движения и его повышенную эффективность.
  5. Для компенсации движения на цветовых составляющих используются блоки половинного размера с минимальным размером 2x2 пиксела.
  6. Изначально алгоритм субпиксельной интерполяции был разработан для четвертьпиксельной интерполяции, однако сейчас реализованы только полупиксельные интерполяционные фильтры. Полностью алгоритм интерполяции будет реализован в ближайшем будущем.

В целом можно сказать, что в движке компенсации движения реализован ряд уникальных алгоритмов. Применение данных алгоритмов позволило полностью решить проблему эффективной компенсации движения для такого, не имеющего отдельных независимых блоков преобразования, алгоритма как SIF.

Движок SIF преобразования имеет следующие особенности:

  1. Для представления геометрических данных используется древовидная структура в виде вложенного квадродерева. Она приблизительно эквивалентна той структуре, которая описана в патенте. На данный момент это далеко не самая эффективная древовидная структура из возможных, но так ”исторически” сложилось.
  2. Для сигналов яркости используется 4 уровня децимации базовой пирамиды лапласа, что соответствует размеру базовой, самой низкочастотной картинки в 1/16 по горизонтали и вертикали относительно исходного изображения.
  3. Всего используется 7 базовых паттернов передискретизации. Пять из них имеют базу своей неперекрывающейся интерполяционной части в 2x2 пикселя, а два имеют базу в 4x4 пикселя. Графически неперекрывающиеся части этих паттернов изображены на Рис.2.
  4. Таким образом, первый паттерн представляет из себя просто единственный субсэмпл с более низкого уровня пирамиды Лапласа. Паттерны со 2 по 5 представляют из себя экстраполяцию вертикального, горизонтального, или двух разнонаправленных диагональных перепадов, соответственно. Эти паттерны состоят из 2 субсэмплов каждый. И наконец, два больших паттерна на матрице 4x4 представляют из себя тоже простую экстраполяцию горизонтального и вертикального перепадов, только более протяженных, чем 2 и 3 паттерны. Два последних паттерна состоят из 4 субсэмплов каждый.

  5. Диагональные паттерны сделаны, на мой взгляд, весьма неудачно. На сегодняшний день я бы их сделал по-другому. При реальном кодировании они редко работают. Они помогают только при сжатии диагональных перепадов под углом близким к 45 градусам, что бывает редко.
  6. Нетрудно заметить, что текущие паттерны экстраполируют обычные локальные перепады яркости. Если учесть, что при использовании только первых 3 паттернов SIF кодек становится близок к классическим вейвлет кодекам, то можно считать, что в текущем SIF алгоритме реализована только самая простая, базовая функциональность.
  7. Для каждого паттерна используются индивидуальные адаптивные корректирующие интерполяционные фильтры с перекрытием. При этом происходит адаптивное переключение между двумя - длинным или коротким вариантами корректирующего фильтра.
  8. При межкадровом сжатии режим кодирования текущего паттерна межкадровый, или прямой можно выбирать для каждого узла вложенного квадродерева. То есть для любого квадрата с максимальным размером 16x16 пикселей и минимальным размером 2x2 пикселя.
  9. При кодировании в межкадровом режиме имеется еще один скрытый паттерн – так называемый пустой паттерн. Он представляет из себя квадратный участок, аналогичный первому паттерну, но для которого субсемпл не кодируется и не передается в декодер т.к. для этого участка межкадровая разность считается близкой к нулю. Для такого участка используется специальный упрощенный фильтр, для устранения возможного появления на нем артефакта с квадратными границами.

Определения

Арифметические операции

+Сложение
-Вычитание
*Умножение
/Целочисленное деление с отбросом дробной части. Для примера 7 / 4 будет 1.
//Целочисленное деление с округлением к ближайшему целому числу. Если остаток >= 0.5 результат целочисленного деления увеличивается на 1. Для примера 7 // 4 будет 2, а -7 // 4 будет -2.
&Остаток от целочисленного деления. Пример 7 % 4 будет 3.
++Увеличение на 1
--Уменьшение на 1
| |Абсолютное значение числа |x| = x при x >= 0, и |x| = -x при x < 0
=Знак равенства

Функции

Sign()Знак числа Sign(x) = 1 при x >= 0, и Sign(x) = -1 при x < 0
Clip16()Ограничение 16 битного числа Clip16(x) = 32767 при x > 32767, и Clip16(x) = -32768 при x < -32768, в остальных случаях Clip16(x) = x
Clip8()Ограничение 8 битного числа Clip8(x) = 255 при x > 255, и Clip8(x) = 0 при x < 0, в остальных случаях Clip8(x) = x
MinМинимальный из списка аргументов
MaxМаксимальный из списка аргументов
Sqrt()Квадратный корень числа
Abs()Абсолютное значение числа – эквивалентно | |
Median3()Медиана 3 чисел. Median3(x, y, z) = x + y + z – Min(x, y, z) – Max(x, y, z)
Median4()Медиана 4 чисел. Median4(a, b, c, d) = ((a + b + c + d - Max(a, b, c, d) - Min(a, b, c, d)) // 2
Log2()Логарифм по основанию 2

Операции сравнения

>Больше, чем
>=Больше, или равно
<Меньше чем
<=Меньше, или равно
==Равно
!=Не равно

Битовые операторы

&Побитное И
|Побитное ИЛИ
^Побитное исключающее ИЛИ
>>Сдвиг в право с расширением знакового разряда
<<Сдвиг влево с заполнением младших разрядов нулями

Логические операции

&&Логическое И
||Логическое ИЛИ
!Логическое НЕТ

Сокращенные обозначения

SIFSteerable Interpolation and Filtration. Название способа преобразования изображения положенного в основу данного кодека. Алгоритм описан в соответствующем патенте.
RCRange Coder. Интервальный кодер - алгоритм, альтернативный арифметическому кодированию. По своим свойствам приблизительно эквивалентен арифметическому кодеру, но не попадает под патенты.
bPPMБинарный Prediction by Partial Matching. Основной алгоритм энтропийного сжатия использованный в данном кодеке.
RPResampling Patterns – Паттерны передикретизации – Основные элементы, на которые разбивается изображение в SIF алгоритме. Состоят из двух частей – неперекрывающейся базы и перекрывающегося корректирующего фильтра.
LPLaplacian Pyramid – Иерархическое представление изображения в виде нескольких уровней с различным разрешением. Каждый следующий уровень имеет разрешение в два раза ниже, чем у предыдущего.

Стандартные функции ввода-вывода

GetByte()Читает из потока данных один байт и возвращает в качестве аргумента.
DecodeBit(freq)Декодирует с помощью RC один бит данных и возвращает его в качестве аргумента. Переменная freq это текущая вероятность данного бита, определенная энтропийной моделью.

Внешний формат данных

Большинство данных сохраняемых кодеком хранится в единых, закодированных RC блоках. Однако некоторое количество конфигурационных данных находится вне этих блоков.

Всего используется два основных внешних формата – сокращенный, рассчитанный на использование с внешним универсальным контейнером и расширенный, который можно использовать как raw данные. Например, в расширенный формат может сохранять промежуточные сжатые данные консольный энкодер, перед тем, как эти данные будут переданы в отдельную программу мультиплексор. Эта программа, используя дополнительные данные, сохраненные в расширенном формате, сможет правильно смикшировать их в универсальный контейнер.

Также хочется отметить, что в кодеке используется байтовая внешняя организация данных. Это означает, что минимальным элементом, читаемым из потока и записываемым в поток является байт данных.

Сокращенный формат данных

Для правильного декодирования сокращенного формата необходимо, чтобы во внешнем контейнере сохранялись и передавались в декодер следующие данные:

  1. Размер изображения по горизонтали и вертикали.
  2. Для каждого декодируемого кадра флаг признака ключевого кадра.
  3. Частота кадров закодированного видео.

При этом ключевые кадры имеют формат изображенный на Рис 3.:

Первым в ключевом кадре всегда идет байт конфигурации. На сегодняшний день используются только два его старших разряда, в которых содержится информация о числе блоков энтропийных данных. Остальные разряды основного байта конфигурации должны содержать число 32. Если остальные разряды байта конфигурации содержат другое число, то это признак нового, неподдерживаемого текущим декодером формата данных. Вот псевдокод обработки первого байта:

    bk = GetByte()
    em = (bk >> 6) & 3
    if ((bk & 63) != 32) Error()

При этом декодируемая переменная em содержит число энтропийных блоков в данном кадре.

em == 0Один блок
em == 1Два блока
em == 2Четыре блока
em == 3Восемь блоков

Режим кодирования с несколькими энтропийными блоками используется для поддержки мультипоточных режимов работы энтропийного декодера. Допускается в одном файле сочетать кадры с разным числом блоков энтропийных данных, однако каждое такое переключение режима работы требует переинициализации памяти энтропийного декодера, что может замедлять скорость декодирования.

Дополнительные байты конфигурации сейчас не используются, но могут использоваться в будущем.

Таблица размеров энтропийных блоков используется только если в кадре имеется больше одного блока. Она содержит трехбайтные числа с размерами всех энтропийных блоков кроме последнего. Тоесть при двух блоках таблица имеет 1 запись, при четырех – 3 записи и при восьми блоках – 7 записей. Размеры блоков вычисляются в байтах, таким образом максимальный размер одного блока – 16 мегабайт. Читать размер одного блока из таблицы можно с помощью следующего псевдокода.

    bs == GetByte() + (GetByte() << 8) + (GetByte() << 16)

То есть младшие разряды сохраняются первыми. Записи в таблице идут в порядке расположения блоков в кадре – Первая запись- размер первого блока. Вторая запись - размер второго блока и т.д.

Для быстрого перехода на начало одного из блоков нужно к числу байт конфигурации прибавить размер таблицы размеров, а также размеры всех энтропийных блоков находящихся перед нужным блоком.

Для дельта кадров не передается байт конфигурации. При этом считается, что конфигурация остается неизменной с последнего ключевого кадра. Формат дельта кадров изображен на Рис. 4

Расширенный формат данных

При расширенном формате данных используется дополнительный информационный заголовок, содержащий необходимые для декодирования данные. Дополнительные поля для ключевого кадра изображены на Рис. 5

Сначала идут четыре байта сигнатуры ключевого кадра. Эти байты имеют значения равные – 83, 73, 70 и 73. Затем два байта размера по горизонтали. После них два байта размера по вертикали. Таким образом, поддерживаются размеры изображения по вертикали и горизонтали вплоть до 65535.

После байт размера идут два байта частоты кадров и два байта делителя частоты кадров. Частота кадров задается как (значение частоты) / (значение делителя).

В конце дополнительного заголовка находятся четыре байта размера остальной части кадра.

Полностью дополнительный заголовок ключевого кадра занимает 16 байт. Для всех чисел имеющих размер больше одного байта младшие байты сохраняются первыми.

Дополнительный заголовок для дельта кадров имеет более простую структуру – он изображен на Рис. 6.

Сначала идут четыре байта сигнатуры дельта кадра. Эти байты имеют значения равные – 83, 73, 70 и 68. Затем четыре байта размера остальной части кадра.

Полностью дополнительный заголовок дельта кадра занимает 8 байт. Для всех чисел имеющих размер больше одного байта младшие байты сохраняются первыми.




Creative Commons License
Этот текст распространяется на условиях лицензии «Creative Commons Attribution 3.0 Unported».
SIF1 specification license



НовостиСтатьиDownloadsО SIF-еСсылки

• Идеи, статьи, программы Neiromaster © 2003-2011