Особенности сжатия видеоданных
по рекомендации H.264
Игорь ГУК
В настоящее время очень быстро растет потребность в различных сервисах, связанных с обработкой видеоданных. Повсеместно внедряется телевидение высокого качества, увеличивается число домашних пользователей DVD-проигрывателей, широко распространяются видеоконференцсвязь, системы дистанционного обучения и безопасности и т. д. Все это требует высокоэффективных и, главное, стандартизованных алгоритмов сжатия видеопотока. Одно из таких решений — рекомендация H.264, предложенная объединенной группой экспертов, в которую вошли представители от разработчиков рекомендаций MPEG и H.263. Этими специалистами была совместно разработана рекомендация, чье полное наименование звучит так: H.264/MPEG 4 Part 10 «Advanced Video Coding».
Введение
В рекомендации нет явного определения кодера и декодера. В ней описывается синтаксис сжатого видеопотока, а также метод его декодирования. Однако можно считать, что кодер и декодер включают функциональные элементы, показанные на рис. 1 и 2. При реализации видеокодека в соответствии с рекомендацией Н.264 необязательно точно повторять структуру, представленную на рис. 1 и 2, но основные элементы должны присутствовать обязательно.
Кодек Н.264 содержит практически те же элементы, что и кодеки МРЕ01, МРЕ02, МРЕ04, Н.261, Н.263. В целом сжатие происходит по тем же принципам, хотя во всех основных элементах есть качественные изменения. Это позволило значительно повысить
качество кодирования. По оценкам экспертов, например, более чем в два раза возрастает степень сжатия при том же качестве восстановления исходного изображения.
Кодер (рис. 1) включает две ветви обработки видеопотока:
• канал прямого кодирования (отмечен синим цветом), где обработка данных происходит слева направо;
• канал реконструкции видеоизображения (отмечен сиреневым цветом), в нем обработка данных происходит справа налево. На рис. 2 показан декодер. Обработка данных происходит справа налево. Сопоставив рис. 1 и 2, можно проследить соответствие между блоками кодера и декодера.
На вход кодера поступает кадр Бп. Обработка кадра происходит по макроблокам, соответствующим фрагментам размером 16x16
точек в исходном изображении. Каждый макроблок может быть обработан в двух режимах: INTRA или INTER. В любом режиме прогноз макроблока Pn формируется на основе восстановленного кадра.
В режиме INTRA прогноз формируется из выборок текущего кадра n, предварительно закодированных и восстановленными (F'n на рис. 1 и 2). Причем используются выборки кадра до деблокирующего фильтра. В режиме INTER прогноз формируется с учетом изменений, которые произошли в текущем кадре по сравнению с одним или несколькими предыдущими (или последующими). Кадры, служащие для прогноза, должны быть предварительно закодированы и восстановлены. В блоках формирования INTRA-и INTER-прогноза происходит выбор наиболее подходящего способа в зависимости
4—И
Ж-Г
I—н
г-►
ЁН
Блок
формирования
INTER-прогноза
Блок
формирования
INTER-прогноза
— А
м—*■
■ °п Блок Блок
! прямого прямого
преобразования квантования
рпо'„
+
Блок ■ Блок і
обратного обратного Я
преобразования ш квантования ■
Блок
прямого
сканирования
Блок NAL
энтропийного ►
кодирования
Рис. 1. ^дер
от типа кодируемого кадра. Эти способы подробно описаны в рекомендации, но критериев выбора нет. Задача выбора решается разработчиком видеокодека самостоятельно.
Полученный прогноз Pn вычитается из текущего макроблока. В результате вычисляется макроблок остаточных коэффициентов Dn. Этот макроблок поступает в преобразователь, где происходит частотное преобразование остаточных коэффициентов. Необходимо отметить, что в рекомендации используется ква-зиортогональное частотное преобразование. Таким образом, значительно уменьшается вычислительная сложность алгоритма, но в процессе сжатия появляются дополнительные искажения. Частотные коэффициенты квантуются (масштабируются), что позволяет произвести сжатие видеоданных с потерями. Полученный набор преобразованных и квантованных коэффициентов X служит исходным для обратного канала реконструкции данных. В дальнейшем коэффициенты переупорядочиваются в блоке прямого сканирования. В результате коэффициенты выстраиваются в линейный массив в порядке возрастания. Затем происходит энтропийное кодирование упорядоченного массива коэффициентов, что обеспечивает сжатие данных без потерь. Закодированные коэффициенты вместе с дополнительной информацией, требуемой для правильного декодирования макроблока (режима прогноза, коэффициент квантования и т. д.), составляют сжатый битовый поток данных (bitstream) абстрактного сетевого уровня (NAL). Этот поток может передаваться по каналу связи либо быть записан на любой носитель для хранения.
В канале реконструкции вначале происходит обратное квантование, затем обратное частотное преобразование. В итоге получаются восстановленные разностные коэффициенты D'n. Они суммируются с прогнозом Pn, и это позволяет получить восстановленный кадр F'n. Необходимо отметить, что восстановленный кадр не является идентичными исходному. В него внесены искажения, обусловленные квантованием и квазиортогональ-ным частотным преобразованием. Именно
такой кадр будет получен на приемной стороне, и поэтому именно его необходимо использовать для формирования прогноза в режиме INTRA.
При обработке кадра по макроблокам возникают специфические искажения (блоч-ность), проявляющиеся в резких перепадах значений коэффициентов на границе между макроблоками. Для их уменьшения предназначен деблокирующий фильтр. Полученный после него восстановленный кадр служит в качестве опорного для формирования прогноза в режиме INTER. Отметим, что невозможно использовать деблокирующий фильтр в режиме INTRA, так как на момент формирования прогноза в этом режиме обработанной является только часть макроблоков, и полной информации о границе между макроблоками нет.
Декодер получает сжатый bitstream абстрактного сетевого уровня NAL (рис. 2), Структура декодера понятна из рис. 2. Он осуществляет обратные процедуры по отношению к кодеру. Стоит только отметить, что в блоках формирования INTRA- и INTER-прогнозов нет элементов, отвечающих за анализ кадра. Информация о конкретном режиме и способе его реализации извлекается из bitstream.
Формирование INTRA-прогноза
В режиме INTRA прогноз P формируется на основании предварительно закодированных и восстановленных блоков. Для яркост-ной составляющей изображения прогноз P может быть сформирован как для макроблока размером 16x16, так и отдельно для всех входящих в него блоков размером 4x4. Всего определено 9 дополнительных режимов (способов) формирования прогноза (предсказания) для яркостных блоков размером 4x4, 4 дополнительных режима для яркостных макроблоков размером 16x16 и 4 режима для цветоразностных блоков размером 8x8.
Обработка кадра в кодере происходит справа налево и сверху вниз. Таким образом, формирование прогноза для текущего блока (или
макроблока) происходит на основе уже обработанных блоков, расположенных сверху и слева от текущего (обрабатываемого в данный момент). Отметим, что существует только один блок, который не использует прогноза. Это блок, расположенный в левом верхнем углу кадра. Кроме того, прогноз для блоков первого ряда обрабатываемого кадра основан только на блоках, расположенных слева, а прогноз для первого столбца использует только блоки сверху.
Режимы формирования прогноза для яркостных блоков размером 4x4 Отсчеты блока прогноза (обозначенные на рис. 3 как а, Ь, с, 4 е, £, g, Ь, 1, ], к, 1, т, п, о, р) формируются на основе уже обработанных вертикальных (I, I, К, Ь) и горизонтальных (А, В, С, Б, Е, Б, О, Н) отсчетов предыдущих блоков (рис. 3).
При этом в рекомендации описаны следующие режимы формирования прогноза:
• Режим 0. Верхние отсчеты А, В, С, Б экстраполируются вертикально.
• Режим 1. Левые отсчеты I, I, К, Ь экстраполируются горизонтально.
• Режим 2. Все отсчеты в прогнозе Р являются средним из выборок А...Б и 1...Ь.
• Режим 3. Отсчеты интерполируются под углом в 45° в направлении между нижним левым и верхним правым отсчетами.
• Режим 4. Отсчеты интерполируются под углом 45° вниз и направо.
• Режим 5. Интерполяция отсчетов производится под углом приблизительно 26,6° влево к вертикальному направлению (отношение ширины к высоте равно 1/2).
А В С D Е F G Н
1 а Ь с d
J е f д h
к і j к 1
L m п о Р
Рис. 3. Маркировка отсчетов для блока прогноза размером 4x4
Режим О
Режим 1
Режим 2
А В С D EFGH А В С D EFGH А В С D EFGH
1 1 1
J J J отсчетами А... D и 1... L
к К К
L L ' г г і < г L
Режим 6
Е F I G I Н
Режим 4
Е I F Iе I н]
Режим 7
л
Е I F I G I Н I
Режим 5
А в с II 3 EFGH t
Н ++ Л
Рис. 4. Режимы формирования прогноза для яркостных блоков размеры 4?4
Режим 0 Режим 1 Режим 2 Режим 3
н н
V V ► ► ► ► ►
н
V Среднее между отсчетами
н
V / /
Рис. 5. Режим формирования прогноза INTRA-блоков размером 16x16
• Режим б. Интерполяция отсчетов производится под углом приблизительно 26,6° вниз по отношению к горизонтальному направлению.
• Режим 7. Интерполяция отсчетов производится под углом приблизительно 26,6° вправо от вертикального направления.
• Режим 8. Интерполяция отсчетов производится под углом приблизительно 26,6° выше горизонтального направления. Стрелки на рис. 4 указывают направление
предсказания в каждом режиме. В режимах 3-8 отсчеты прогноза формируются из средневзвешенных выборок A...L. Например, если выбран режим 4, то отсчет прогноза d (рис. 3) высчитывается по формуле:
, .(В С D\
а = round —і- —і— .
U 2 4)
Кодер может выбирать режим предсказания для каждого блока таким образом, чтобы минимизировать разность между прогнозом Р и кодируемым блоком.
Режимы формирования прогноза для яркостных блоков размером 16x16
Кодер имеет возможность кодировать не только яркостные блоки размером 4x4, но и размером 16x16. В рекомендации Н.264 определены четыре режима формирования прогноза для макроблоков (рис. 5).
• Режим 0. Экстраполяция верхних выборок Н.
• Режим 1. Экстраполяция левых выборок V.
• Режим 2. Среднее между верхними Н и левыми выборками V.
• Режим 3. Линейное сглаживание между верхними Н и левыми выборками V.
Режимы формирования прогноза для цветоразностных блоков размером 8x8 Каждый из отсчетов цветоразностного блока размером 8x8 предсказывается от цветоразностных выборок, расположенных выше и/или слева, закодированных и восстановленных. Четыре режима формирования прогноза для цветоразностных составляющих аналогичны режимам для яркостного блока размером 16x16, рассмотренным в разделе «Введение».
Необходимо отметить, если любой из яр-костных блоков макроблока кодируется в ЮТИА-режиме, то и оба цветоразностных блока также должны быть закодированы в ШТИА-режиме.
Формирование ШТЕР-прогноза
В ШТЕИ-режиме прогноз формируется на основе одного или нескольких предварительно закодированных и восстановленных кадров путем выбора в них опорных блоков, сдвинутых относительно кодируемого блока (прогноз с компенсацией движения). Кодек стандарта Н.264 использует тот же принцип компенсации движения, что и в старых стандартах, начиная с Н.261. Важными отличиями от более ранних версий являются возможность менять размер блока (от 16x16 до 4x4) и возможность поиска векторов движения с меньшим шагом (1/4 пикселя для яркост-ных компонент).
Разбиение макроблока на блоки для формирования прогноза с компенсацией движения В кодере, описываемом в рекомендации
Н.264, в режиме прогнозирования с компенсацией движения поддерживаются размеры блоков от 16x16 до 4x4 для яркостной составляющей изображения в различных сочетаниях. Яркостная составляющая каждого макроблока (размером 16x16) может быть разбита четырьмя способами, как это показано нарис. 6: 16x16, 16x8, 8x16 или 8x8. Каждая из областей меньшего размера является частью макроблока. Если выбран режим поиска векторов движения для блоков 8x8, то каждый из четырех блоков 8x8 может быть разбит на блоки четырьмя способами, как показано на рис. 7: 8x8, 8x4, 4x8 или 4x4. Возможность делить макроблок на блоки, а те в свою очередь на субблоки, позволяет получить большое количество комбинаций их сочетаний в пределах каждого макроблока. Этот метод разбиения макроблоков на блоки
16 8 8 16 8 8
16 0 16 0 1 8 0 8 0 1
8 1 8 2 3
Рис. 6. Разбиение макроблока 16x16 на блоки 16x16, 16x8, 8x16, 8x8
8 4 4 8 4 4
8 0 8 0 1 4 0 4 0 1
4 1 4 2 3
Рис. 7. Разбиение блока 8x8 на субблоки 8x8, 8x4, 4x8, 4x4
о о о о о о о о • • • • о ООО • • О • о •
о о о о о о о о • • • • о ООО • • о • о •
о • <§ о • о о о • • • • о ООО • • о • о •
о т о о о о о X • • • о ООО о о
о • <§ о • о о о о о о ч О • о • о • о
о о о о о о о о о о о о о ООО о о
н и и
Рис. 9. Пример целочисленного и дробного векторов движения
и субблоки в режиме компенсации движения получил название структурного дерева компенсации движения.
Для каждого блока и субблока требуется отдельный вектор движения. Каждый вектор движения должен быть закодирован и передан; кроме того, необходимо закодировать и передать конкретный вид структурного дерева для каждого макроблока.
Выбор большого размера блоков (например, 16x16, 16x8, 8x16) означает, что количество бит для передачи данных векторов движения и структуры дерева минимально, однако при этом остаточные коэффициенты могут содержать существенное количество энергии в высокочастотных областях кадра (с высокой детальностью). При выборе маленького размера блоков (например, 8x4, 4x4 и т. д.) можем получить более низкую энергию остаточных коэффициентов после компенсации движения, но потребуется большее число бит для кодирования и передачи данных о векторах движения и структуре дерева. Поэтому выбор размера блоков оказывает существенное влияние на эффективность сжатия. Вообще, большой размер блоков соответствует низкочастотным областям кадра, а маленький — может быть выгоден для высокочастотных.
Разрешающая способность цветоразностных составляющих макроблока (Сг и СЬ) равна половине яркостного. Каждый цветоразностный блок разбивается таким же образом, как яркостной, за исключением того, что вертикальные и горизонтальные размеры блока в два раза меньше (если яркостной блок имеет размер 8x16, то соответствующий ему цветоразностный блок имеет размер 4x8; яркостному блоку 8x4 соответствует цветоразностный 4x2; и т. д.). Горизонтальные и вертикальные составляющие каждого вектора движения (одного на блок) делятся на два, когда применяются к цветоразностным блокам.
На рис. 8 показан пример разбиения остаточного кадра (до процедуры компенсации движения). Кодер выбирает «лучший» размер блока для каждой части кадра, то есть такой размер, который минимизирует кодирование остаточных коэффициентов и векторов движения. На рис. 8 тонкими линиями показано разбиение кадра на блоки. В облас-
тях кадра, где изменения незначительны (остаточные коэффициенты кажутся серыми), выбирается размер блока 16x16; в областях с большими изменениями (остаточные коэффициенты кажутся черными или белыми) выбираются меньшие размеры блоков.
Дробные значения векторов движения
Каждый блок в режиме ЮТЕИ-кодирова-ния макроблока предсказывается от блока того же размера в опорном кадре. Смещение между этими двумя областями (вектор движения) имеет минимальное разрешение, равное четверти расстояния между точками (пикселями) в опорном изображении (для яркостной составляющей). Опорных яркост-ного и цветоразностного блоков для нецелочисленных (дробных) векторов движения в опорном кадре не существует, поэтому их необходимо вычислить на основе ближайших пикселей.
На рис. 9 показан пример целочисленного и дробного векторов движения. Необходимо сформировать прогноз для блока размером 4x4 (красные точки на рис. 9а). Если горизонтальные и вертикальные компоненты вектора движения — целые числа (рис. 9б), то опорный блок в опорном кадре существует (синие точки). Если один или оба вектора движения — дробные числа (рис. 9в), прогноз (синие точки) формируется вставкой между смежными пикселями в опорном кадре (серые точки).
Компенсация движения с четвертьпиксель-ным разрешением может обеспечивать значительно лучшую эффективность сжатия, чем компенсация с целочисленным разрешением, но при этом увеличивается сложность процедуры поиска векторов движения.
Интерполированные выборки формируются следующим образом. В яркостной компоненте опорного изображения сначала формируются выборки с полупиксельной точностью (рис. 10). На этом рисунке выборки в целочисленных позициях выделены серым цветом. Каждая выборка в полупиксельной позиции, которая является смежной с двумя целочисленными выборками (например, выборки Ь, Ь, т, 8 на рис. 10), интерполируется на основе 6 пикселей в целочисленных позициях при помощи КИХ-фильтра. Коэффициенты фильтра равны: 1/32, -5/32, 5/8, 5/8, -5/32, 1/32.
Например, полупиксельная выборка Ь рассчитывается от 6 горизонтальных целочисленных выборок Е, Е, О, Н, I и I по формуле:
, гоишЦ.Е'-5^ + 206 + 20#-5/ +У)
Ь =------------------------------------.
32
Точно так же выборка к интерполируется на основе выборок А, С, О, М, И и Т. После формирования полупиксельных выборок, смежных с целочисленными отсчетами, производится вычисление остальных полупик-сельных выборок (например, выборки в позиции ] на рис. 10) с интерполированием 6 горизонтальных или вертикальных полу-пиксельных выборок, полученных на первом шаге. Например, выборка ] формируется на основе выборок сс, йй, к, т, ее и (Обратите внимание, что получается одинаковый результат при интерполировании по горизонтали или вертикали.) Интерполирующий КИХ-фильтр 6-го порядка является относительно сложным (по сравнению, например, с билинейной интерполяцией), но формирует более точный прогноз и, следовательно, обеспечивает лучшую эффективность компенсации движения.
Как только получены все выборки в полу-пиксельных позициях, на их основе формируются выборки с четвертьпиксельной точностью методом линейной интерполяции (рис. 11). Выборки в четвертьпиксельной позиции формируются на основе двух горизон-
Рис. 10. Вставка в яркостный блок полупиксельных выборок
G b н
h ■ ►к< m
М Е Z
"1 G ь н
h т ч % гг
* Р У м
ZI М S N
Рис. 11. Вставка в яркостный блок четвертьпиксельных выборок
тальных или вертикальных смежных полу-или целочисленных выборок (например, а, с, г, к и й, _£ п, ц на рис. 11) путем линейной интерполяции между ними. Например:
а =
round (G + Ъ)
Оставшиеся четвертьпиксельные выборки (е, g, р и г на рис. 11) линейно интерполируются между диагональной парой противоположных полупиксельных выборок. Например, е интерполируется на основе выборок Ь и к.
Векторы движения с четвертьпиксельным разрешением для яркостной компоненты требуют 1/8-пиксельной точности для цветоразностной компоненты (для формата кадра YUV 4:2:0). Интерполирование выборок в 1/8-пиксельных интервалах производится на основе целочисленных выборок в каждом цветоразностном компоненте. В этом случае используется линейная интерполяция для формирования цветоразностных выборок с 1/8-пиксельной точностью (рис. 12).
В этом случае каждая выборка формируется как линейная комбинация соседних пикселей в целочисленных позициях, например, для выборки а аппроксимация производится на основе целочисленных выборок А, В, С и Б (1).
Для примера можно рассмотреть случай, показанный на рис. 12 (йх =2 и = 3):
а = -
гошк!(3(Ы + 10.8 + 18С + 6D) 64 .
Преобразование, сканирование и квантование
Каждый разностный макроблок преобразуется, сканируются и квантуется. Предыдущие стандарты, такие как МРЕО-1, МРЕО-2, МРЕО-4 и Н.263, использовали в качестве базового преобразования дискретное косинусное преобразование (ОСТ) для массивов размером 8x8. В рекомендации Н.264 определены три вида преобразования в зависимости от типа обрабатываемых блоков:
• преобразование блока размером 4x4 нулевых (БС) яркостных коэффициентов, полученных из яркостных макроблоков размером 16x16, сформированных в режиме ЮТИА;
• преобразование блока размером 2x2 нулевых (БС) цветоразностных коэффициентов, полученных из цветоразностных блоков любого типа;
• преобразование для всех остальных разностных блоков размером 4x4. Сканирование макроблоков
Данные в пределах макроблока передаются в порядке, показанном на рис. 13. Если макроблок размером 16x16 обрабатывается в режиме ЮТИА, то вначале передается блок БС-ко-эффициентов размером 4x4. Он маркируется значением «-1». Затем передаются остальные (0-15) яркостные блоки в порядке, показанном на рис. 13 (с обнуленными БС-коэффи-
циентами). Блоки 16 и 17 содержат массивы размером 2x2 DC-коэффициентов, полученных из цветоразностных Cb- и Cr-составляющих соответственно. Наконец, передаются оставшиеся цветоразностные блоки 18 и 25 (с обнуленными DC-коэффициентами). Преобразование и квантование для блоков 0-15 и 18-25 Это преобразование используется для блоков размером 4x4 с номерами 0-15 и 18-25 на рис. 13 после осуществления INTER- или INTRA-обработки. Преобразование основано на DCT, но имеет некоторые фундаментальные отличия:
1. Это целочисленное преобразование (все операции могут быть выполнены в целочисленной арифметике без потери точности).
2. Обратное преобразование, определенное в рекомендации H.264, производит восстановление исходных данных с искажениями, то есть является приблизительным.
3. Основная часть преобразования не имеет умножений, то есть оно основано только на суммированиях и сдвигах.
4. Масштабирующее умножение (входящее в процесс преобразования) интегрировано в процесс квантования (что сокращает общее количество умножений).
Полный процесс преобразования и квантования может быть выполнен при помощи 16-разрядной целочисленной арифметики, и только одно умножение выполняется с небольшой потерей точности.
Приблизительное DCT 4x4 DCT для входного массива X размером 4x4 определяется соотношением (2), где
1 и 1
а = —, o=J—cos
2 V 2
Данное матричное умножение может быть факторизировано и формула (2) примет следующий вид (3).
'п' [Г f371!
— > С =1 —cos
1 h оо
а =
round((8 - dx )(8 - dy )А + dx (8 - dy )В + (8 - dx )dyC + dxdyD)
64
(1)
16 17
и 0 и 1 и 4 и 5
J 2 J 3 J 6 J 7
J 8 J 9 J 12 J 13
J 10 J 11 J 14 J 15
II оо J 19
-j 20 J 21
CN ГМ И и 23
J 24 J 25
Cb Cr
Цветоразностные составляющие
Яркостная составляющая
Рис. 12. Вставка в цветоразностный блок 1/8-пиксельных выборок
Рис. 13. Порядок сканирования блоков внутри макроблока
Y = AXA1 =
(2)
а а а а а Ъ а с
Ь с — с -Ъ х[Х]х а с -а -Ъ
а — а — а а а — с — а Ъ
с -Ь Ъ -с а -Ь а -с
Y = (CXCT)®E =
(3)
Y = (CfXCTf)®E-
(4)
f 1 1 1 Г '1 1 1 с \ a2 ab a2 ab
1 d -d -1 1 d -1 -1 ab b2 ab b2
x[X]x <£>
1 -1 -1 1 1 -d -1 1 a2 ab a2 ab
V d -1 1 -d 1 -1 1 -d ab b2 ab b2
1 1 1 1-1-2 -1 -1 1
■2 2-1
x[X]x
d = ~. 2
j i 0 3
0 5 11 8 10
1 9 8 4 12
2 1 10 11 4
3 19 6 15 7
2 1 с
1-1 -2 -1-1 2 ■2 1 -1
a2 a2 abA
b1/ /4 abA bV /4
a2 “Уг a2 abA
-Yi b2/ /4 ЛА b2/ /4
Произведение матриц СХСТ является «ядром» преобразования. Матрица Е представляет собой набор коэффициентов, причем каждый элемент матрицы (СХСТ) должен быть умножен на соответствующий элемент матрицы Е (скалярное поэлементное умножение матриц). Коэффициенты а и Ь те же, что и в формуле (1); коэффициент й = с/Ь («0.414).
Для упрощения процедуры выполнения преобразования предлагается принять й = 0.5. Для того чтобы гарантировать ортогональность преобразования, необходимо изменить и коэффициент Ь, так что получим следующие значения коэффициентов:
Результатом ЭСТ будет матрица (5).
Результатом аппроксимированного преобразования будет матрица (6).
Различие между ЭСТ и целочисленным (7).
Очевидны различия в выходных значениях, которые зависят от коэффициентов Ь или й. Применяемое в кодеке Н.264 приблизительное преобразование позволяет получить практически такую же степень сжатия, что и ЭСТ, и, кроме того, обладает рядом важных преимуществ. Во-первых, «ядро» преобразования СХСТ может быть выполнено в целочисленной арифметике при помощи только операций суммирования, вычитания и сдвига (умножение на 2). Во-вторых, дина-
Y = АХА =
мический диапазон результата действий данного преобразования такой, что везде может быть использована 16-разрядная арифметика без риска выхода за пределы диапазона ±255. В-третьих, масштабирование при помощи матрицы Е требует только одного умножения для каждого коэффициента, которое может быть «включено» в процесс квантования (см. ниже).
Обратное преобразование определяется соотношением (8).
В этом случае матрица У вначале масштабируется матрицей Е;, путем поэлементного умножения. Обратите внимание на коэффициенты ±1/2 в матрицах С и СТ; операции с ними могут быть правильно выполнены без существенной потери точности, потому что коэффициенты У вначале подвергаются масштабированию.
Прямое и обратное преобразования являются ортогональными, то есть: Т\Т(Х) = X.
Квантование
В рекомендации Н.264 используется скалярное квантование. К его определению и выполнению предъявляются следующие требования: (а) исключить деление и арифметику с плавающей точкой, (Ь) включить в процесс квантования масштабирование при помощи матриц Е^ и Е{, описанных выше.
Базовой операцией прямого квантования является следующее действие:
Z:;
- round (Yj/Q.
■step■
Второй и четвертый ряды, а также вторая и четвертая колонки матрицы С умножаются на 2, а матрица Е изменяется так, чтобы компенсировать данное умножение. (Это позволяет исключить деление на 2 в «ядре» преобразования СХСТ, которое привело бы к потере точности при целочисленной арифметике.) Окончательно преобразование примет вид (4).
Данное преобразование является аппроксимированным (приблизительным) ЭСТ размером 4x4, так как изменение коэффициентов й и Ь привело к появлению нового преобразования, не идентичного исходному ЭСТ размером 4x4.
Пример
Необходимо обработать при помощи ЭСТ и аппроксимированного преобразования блок X размером 4x4:
где Уц — коэффициенты преобразования, описанные выше, ((^ — шаг квантования, и 7ц — квантованные коэффициенты.
(5)
35.0 -0.079 -1.5 1.115
-3.299 -4.768 0.443 -9.010
5.5 3.029 2.0 4.699
-4.045 -3.010 -9.384 -1.232
Y1 =(СХСТ)<8)Е =
35.0 -0.158 -1.5 1.107
-3.004 -3.900 1.107 -9.200
5.5 2.688 2.0 4.901
-4.269 -3.200 -9.329 -2.100
(6)
Y-Y' =
0 0.079 0 0.008
-0.295 -0.868 -0.664 0.190
0 0.341 0 -0.203
0.224 0.190 -0.055 0.868
(7)
(8)
1 1 1 1/ /2
1 1/ /2 -1 -1
1 - 1/ /2 -1 1
1 -1 1 . 1/ /2
[У]®
a2 ab а2 ab аЪ Ь2 ab Ъ2 a2 ab a2 ab
аЪ Ь2 аЪ Ъ2
1 1
1 У. 1 -
х2
-1
Таблица 1. Размер шага квантования в кодеке Н.264
Таблица 3. Коэффициент обратного квантования V
0.625 I 0.6875 I 0.8125 I 0.875 I 1 Гї^ 2 I 2.25
С
ЗО ... З6 ... 42
їО її ї2 ...
5 2 1 2.25 2.5
... 48 5ї
) 1 160 224
Общее количество значений шага квантования <3^, определенное в стандарте, равно 52, они передаются как параметр (Р, показанный в таблице 1. Обратите внимание, что значение (;(ер удваивается для каждого приращения (Р на 6; ((йер увеличивается на 12,5% для каждого приращения (Р на 1. Широкий диапазон значений шага квантования позволяет кодирующему устройству точно и гибко управлять обменом между количеством передаваемых бит и качеством.
Коэффициенты масштабирования 2, аЬ/2 или Ь2/4 (4) включены в прямое квантование. Вначале входной блок Xпреобразуется, и получается блок промежуточных коэффициентов Щ = СХСТ. Затем каждый коэффициент Щ квантуется и масштабируется при помощи одной операции:
Ztj = round
где
w„
Q
PF
(9)
Позиция в блоке X PF
(0, 0), (2, 0), (0, 2), или (2, 2) а2
(1, 1), (1, 3), (3, 1), или (3, 3) b2/4
в остальных случаях ab/2
Операция (РР/(;(ер) осуществляется в рекомендации Н.264 [3] как умножение на коэффициент ЫР (коэффициент-фактор) и сдвиг вправо, таким образом, исключается операция деления:
Ztj = round
wa^
У >-sqbits
(10)
где
MF PF
2qbi,s Qs
и qbits =15 +floor
step
QP
46
В целочисленной арифметике (10) может быть выполнено следующим образом:
= (ШцЫР + А^фй$, (11)
где «А» определяет логический сдвиг вправо. В рекомендации определяется коэффициент /как 2‘>Ыв/3 для ШТИЛ-блоков и 2‘>Ыв/6 для ШТЕИ-блоков.
Пример
(Р = 4, следовательно, = 1.0.
(г,;) = (0,0), следовательно, РР = а2 = 0.25. qbits = 15, следовательно, 2‘>Ыв = 32768.
Так как
МР РР
Таблица 2. Коэффициент умножения МР
QP Позиция (О, О), (2, О), (О, 2), (2, 2) Позиция (ї, ї), (ї, З), (З, ї), (З, З) В остальных случаях
0 13107 5243 8066
1 11916 4660 7490
2 10082 4194 6554
3 9362 3647 5825
4 8192 3355 5243
5 7282 2893 4559
Yj = ZjQt
ij ttep
(12)
W
ij
ZjjxQ,
step
xPFx64.
(1З)
QP Позиция (О, О), (2, О), (О, 2), (2, 2) Позиция (ї, ї), (ї, З), (З, ї), (З, З) В остальных случаях
0 10 16 13
1 11 18 14
2 13 20 16
3 14 23 18
4 16 25 20
5 18 29 23
получаем ЫР = 32768x0.25/1 = 8192.
Первые 6 значений ЫР, в зависимости от (Р и позиции коэффициента в блоке, могут быть рассчитаны по таблице 2.
Для значений (Р > 5 коэффициенты умножения ЫР будут повторяться в соответствии с таблицей 2, а делитель 2<1Ь1В будет увеличиваться в два раза для каждого приращения ((Р на 6. Например, qbits = 16 для 6<(Р<11; qbits = 17 для 6<(Р<17; и так далее. Обратное квантование Базовая операция обратного квантования определяется соотношением:
'llll' '1111'
і і x[WD]x I I
і і I I
1-і 1-і 1-1 1-1
Коэффициенты масштабирования для инверсного преобразования (матрица Е{, содержащая коэффициенты а2, аЬ и Ь2 в зависимости от позиции) включаются в эту операцию совместно с постоянным множителем 64, чтобы избежать ошибки округления:
Коэффициенты Щ являются результатом выполнения «ядра» обратного преобразования (С’Т'ШС-. см. (3, 4, 8)). Значения полученных коэффициентов делятся на 64, чтобы компенсировать предварительное масштабирование (это может быть осуществлено при помощи только операций суммирования и сдвига вправо).
Стандарт Н.264 непосредственно не определяет (Лер или РР. Вместо этого определяется параметр У = ((^ РР64) для 0<(<Р<5 и для каждого коэффициента в блоке производится пересчет по формуле:
Wj = Zx y..x2floor(QP,6). (14)
ij ij ij
Пример
• (Р = 3, следовательно,
С1Лер = 0.875 и 2Поог(ОР/6) = 1.
• (у) = (1,2), следовательно, РР = аЬ = 0.3162.
• У = (ер.РР.64) = 0.875x0.3162x6518,
• Щ = 2г;х 18x1.
Значение У для 0<(Р<5 определяется в рекомендации следующим образом (табл. 3):
Коэффициент 2Поог(ор/6) в (14) увеличивает результат в два раза при каждом приращении (Р на 6.
Преобразование и квантование яркостных ВС-коэффициентов блока размером 4x4
Если макроблок размером 16x16 обрабатывается в ШТИЛ-режиме, то каждый остаточный блок размером 4x4 сначала преобразуется «ядром» С^ХС^, описанным выше. Полученные яркостные БС-коэффициенты каждого блока размером 4x4 выделяются в отдельный блок и обрабатываются в соответствии с преобразованием Адаманта:
Матрица представляет собой блок БС-коэффициентов размером 4x4, а матрица У0 — это блок коэффициентов после преобразования. Полученные коэффициенты У0(і, і) делятся на два (с округлением).
После этого коэффициенты УГ)(і, і) квантуются по формуле:
^од) = (Уод)Мр +2Г) >> (ЧЪШ +1),
где МР, f и qbits определяются как обычно, при этом МР зависит от позиции (і,;) в пределах блока БС-коэффициентов размером 4x4, как было описано выше.
В декодере обратное преобразование выполняется следующим образом (обратите внимание, что порядок умножения не изменен):
%о-
Если QP больше или равно 12, то обратное квантование выполняется следующим образом:
'llll' 'llll'
I l X X 1 1
I I 1 1
1-1 1-1 1-1 1-1
Wb(jr
W x У +21-floor( QP/6)-2 WQD(ij)x v00+2 .
Если (Р меньше 12, то обратное квантование определяется как:
24
QP
ї8
Q
X Ядро прямого преобразования Прямое Обратное Ядро обратного преобразования X'
и сканирование и сканирование
1 г 1 г
Прямое преобразование ЭС-коэффициентов Обратное преобразование РС-коэффициентов
Рис. 14. Процесс прямого и обратного преобразования и квантования
^Щ) = ^адХУ00 + 2»“] »
» (2-Аоог(аР/6)).
Коэффициенты V определяется, как было описано выше. Полученная после процедуры обратного квантования матрица ШВ является блоком ВС-коэффициентов, которые вставляются в соответствующие блоки, и выполняется «ядро» обратного преобразования С Ш'С).
Так как в ШТИЛ-макроблоках большая часть энергии сконцентрирована в БС-коэф-фициентах, данное дополнительное преобразование БС-коэффициентов помогает де-коррелировать блок яркостных коэффициентов размером 4x4 (то есть использовать в своих интересах корреляцию между коэффициентами).
Преобразование и квантование блока цветоразностных коэффициентов размером 2x2
Каждый цветоразностный компонент в макроблоке состоит из четырех блоков размером 4x4. Каждый блок размером 4x4 преобразуется так, как это было описано в рвзделе «Формирование ЮТИЛ-прогноза». Коэффициенты ВС каждого блока размером 4x4 группируются в блок размера 2x2 (ШВ), а затем полученный блок преобразуется и квантуется:
'і і' 1 Г
ув = і -і хРГд]х 1 -1
Квантование блока УВ размером 2x2 выполняется следующим образом:
гт= (Ут-)Ш + 2/)» (#й +1),
где коэффициенты МР, /и фи$ определяются как было описано выше.
Затем проводится декодирование, обратная трансформация и обратное квантование:
'1 1' '1 1"
II к8 1 -1 х|7д]х 1 -1
Если (2Р больше или равен 6, обратное квантование выполняется следующим образом:
Ш' = Ш Х V +21-Поог(2Р/6)-1
00+2 .
Если 2Р меньше, чем 6, обратное квантование выполняется в соответствии с выражением:
ШЬ(у) = [ ^0] » 1
Коэффициенты, полученные после обратного квантования, размещаются в соответствующих цветоразностных блоках размером 4x4, которые затем обрабатываются, как это описано выше (С[Ш'С{). Как и в случае с кодированием яркостных БС-коэффициентов в ЮТИЛ-режиме, применяется дополнительное преобразование, помогающее декорре-лировать блок размера 2x2 цветоразностных БС-коэффициентов и, следовательно, увеличивающее степень сжатия.
На рис. 14 представлен описанный выше полный процесс прямого и обратного преобразования и квантования от момента поступления на вход обрабатываемого блока X до получения на выходе восстановленного блока X'.
Деблокирующий фильтр
Деблокирующая фильтрация осуществляется после обратного преобразования в кодере (при восстановлении и сохранении макроблока для формирования прогноза следующего кадра) и в декодере (при восстановлении и отображении макроблока). Фильтр имеет два преимущества:
• границы блока сглаживаются, улучшая зрительное восприятие декодированных изображений (особенно при больших коэффициентах сжатия);
• отфильтрованный макроблок используется в режиме компенсации движением в кодере, что значительно уменьшает величину остаточных коэффициентов.
Заметим, что в режиме ЮТИЛ макроблоки фильтруются, но для формирования прогноза не используются, кроме этого границы кадра не фильтруются в любом режиме.
Фильтрация применяется к вертикальным или горизонтальным границам блоков размером 4x4 в следующем порядке:
1. Фильтрация четырех вертикальных границ яркостного компонента (в порядке а, Ь, с, d на рис. 15);
2. Фильтрация четырех горизонтальных границ яркостного компонента (в порядке е, £, g, Ь на рис. 15);
3. Фильтрация двух вертикальных границ каждого цветоразностного компонента (1, ]);
4. Фильтрация двух горизонтальных границ каждого цветоразностного компонента (к, 1). Каждая операция фильтрации использует
до четырех пикселей с обеих сторон границы (рис. 16). В зависимости от величины текущего шага квантования, режима кодиро-
е f к I
1 1 1 і і 1 і і 1 і і 1 І I І I
1 І І 1 Я І I
I і і і
1 1_ 1 |_ 1 1 1 І_ і I і і 1 і і і И Цветоразностная составляющая 8x8
а Ь с с! Яркостная составляющая 16x16
Рис. 15. Порядок фильтрации границ макроблока
і Горизонтальная граница
Вертикальная граница
Рис. 16. Выбор смежных пикселей для вертикальных и горизонтальных границ
Исходный кадр Восстановленный кадр Восстановленный кадр
без фильтрации с фильтрацией
Рис. 17. Пример применения деблокирующего фильтра
вания соседних блоков и градиента выборок изображения поперек границы возможны несколько вариантов фильтрации.
На рис. 17 показан пример применения деблокирующей фильтрации. В данном примере деблокирующий фильтр увеличивает эффективность сжатия незначительно: скорость выходного битового потока уменьшается примерно на 1,5%, а PSNR увеличивается примерно на 1%. Однако субъективное качество восстановленной видеопоследовательности с деблокирующей фильтрацией значительно выше. Увеличение эффективности кодирования, обеспечиваемое деблокирующим фильтром, зависит от содержания последовательности и требуемой выходной скорости закодированного потока.
Энтропийное кодирование
В рекомендации определено несколько алгоритмов кодирования, которые применяются к различным элементам синтаксиса. Так, элементы синтаксиса, относящиеся к кодированию кадра в целом, кодируются кодами фиксированной или переменной длины, а элементы, относящиеся непосредственно к кодированию остаточных коэффициентов, кодируются кодом переменной длины, или арифметическим кодом.
Кодирование переменной длины В рекомендации определены два вида кодирования с переменной длиной кодового слова:
• экспоненциальное кодирование (Exp-Golomb coding);
• кодирование переменной длины с адаптацией на основе контекста (CAVLC). Экспоненциальные коды, применяемые
в кодеке H.264, — это коды переменной длины с регулярной структурой. Используются для служебных элементов синтаксиса, таких как информация о коэффициенте квантования, режиме кодирования, данные о векторах движения и т. д. Кодовое слово для данного кода имеет следующую структуру:
[М] [1] [INFO],
где INFO — информационное поле, состоящее из M-bit, М — последовательность «0», также состоящая из M-bit.
Создать кодовое слово кодером можно в соответствии с формулами:
M = log2(code_пит +1), INFO = code_пит + 1 - 2M,
где code_num — кодируемое значение.
Декодирование происходит по следующему алгоритму:
1. Считать М начальных нулей, заканчивающихся 1.
2. Считать М разрядное поля INFO.
3. Определить кодируемое значение по формуле:
code_пит = 2M + INFO - 1.
Заметим, что для кодируемого значения «0», поля INFO и М имеют нулевую длину.
Кодируемое значение не является непосредственно тем параметром, который получен в результате обработки кадра. В рекомендации определены три способа замены параметра v, полученного в результате обработки кадра, кодируемым значением code_num, которое является входным для алгоритма экспоненциального кодирования:
1. ue(v) — прямое соответствие без знака, code_num = v.
2. se(v) — знаковое соответствие:
code_пит = 2lvl, где v < 0, code_пит = 2lvl - 1, где v> 0.
3. me(v) — символьное соответствие; параметр v соответствует code_num согласно таблице, определенной в рекомендации. Каждый способ (ue, se и me) разработан так,
чтобы формировать короткие кодовые слова для часто встречающихся значений параметров и более длинные кодовые слова для менее частых.
Кодирование переменной длины с адаптацией на основе контекста используется для кодирования остаточных коэффициентов. CAVLC разработан с учетом следующих особенностей:
1. После прогнозирования, преобразования и квантования, блоки обычно разрежены (содержат главным образом нули). CAVLC
использует кодирование run-level, чтобы сжато представить последовательности нулей (вместо последовательности нулей передается одно число, определяющее их количество).
2. Самые большие ненулевые коэффициенты после зигзагообразного сканирования часто завершаются последовательностью ±1. CAVLC позволяет компактно представить последовательность замыкающих высоких частот, равных ±1.
3. Число ненулевых коэффициентов в соседних блоках коррелированно. Поэтому число ненулевых коэффициентов кодируется на основе таблицы поиска, которая выбирается из нескольких, в зависимости от числа ненулевых коэффициентов в соседних блоках.
4. Величина ненулевых коэффициентов обычно выше в начале переупорядоченного массива (около DC-коэффициента) и ниже в конце. CAVLC использует эти свойства, обеспечивая для кодирования уровня остаточного коэффициента несколько таблиц для кодирования, причем выбор той или иной таблицы происходит в зависимости от уровня предыдущего закодированного коэффициента.
Код CAVLC включает следующие поля:
• coeff_token — определяет общее количество ненулевых коэффициентов в кодируемом блоке остаточных коэффициентов (TotalCoeffs), а также количество коэффициентов в конце блока, равных единице (T1s);
• T1 — знак единичного коэффициента в конце блока (таких полей может быть три или меньше);
• Level— значение ненулевых коэффициентов в блоке (количество полей определяется количеством ненулевых значений коэффициентов кодируемого блока);
• TotalZeros — количество нулевых коэффициентов на промежутке от начала блока до последнего ненулевого коэффициента;
• run_before — количество нулей перед ненулевым коэффициентом.
Рассмотрим небольшой пример. Имеется
блок остаточных коэффициентов размером
4x4:
0 -1 0
0 -1 0
0 0 0
0 0 0 0
Вначале необходимо произвести сканирование данного блока (переупорядочить остаточные коэффициенты). В результате получим одномерный массив:
0,3,0,1,-1,-1,0,1,0,0,0,0,0,0,0,0 Этот массив подвергается кодированию, и в результате получается битовый поток: 000010001110010111101101 Значения его полей приведены в таблице 4. Обратите внимание, что фактически в конце блока четыре единичных коэффициента,
Таблица 4. Пример кодирования остаточных коэффициентов кодом CAVLC
Поле кода Значение Код
coeff_token TotalCoeffs = 5, T1s = 3 0000100
T1 знак (4) + 0
T1 знак (3) - 1
T1 знак (2) - 1
Level (1) +1 1
Level (0) +3 0010
TotalZeros 3 111
run_before (4) 1 10
run_before (3) 0 1
run_before (2) 0 1
run_before (1) 1 01
run_before (0) 1 -
но только три из них могут быть закодированы своим знаком. Кроме этого, количество нулей перед первым ненулевым коэффициентом не передается, так как может быть вычислено на приемной стороне из уже полученной информации.
Адаптивное двоичное арифметическое кодирование на основе контекста Применяемый в кодере Н.264 алгоритм арифметического кодирования на основе кон-
текста (СЛВЛС) обеспечивает хорошую степень сжатия вследствие следующих причин:
• выбор вероятностной модели для каждого элемента синтаксиса;
• адаптивная оценка вероятности, основанная на локальной статистике;
• использование арифметического кодирования.
Кодирование символа данных включает
следующие стадии:
1. Бинаризация исходного параметра. Этот процесс подобен процессу преобразования символа данных в код переменной длины.
2. Выбор контекстной модели для каждого бита (или «дискрета») бинаризированно-го символа. Контекстная модель является моделью вероятности для одного или более дискретов. Эта модель может быть выбрана из ряда доступных моделей в зависимости от статистики только что закодированных символов.
3. Непосредственно само арифметическое кодирование. Кодер шифрует каждый дискрет согласно выбранной вероятностной модели.
4. Обновление вероятностной модели. Выбранная модель контекста обновляется на осно-
вании фактически закодированных данных (например, если был закодирован дискрет, равный «1», тогда частота повторения «1» увеличивается).
Контекстные модели и схемы бинаризации каждого элемента синтаксиса определены в рекомендации. Существует 267 контекстных моделей, от 0 до 266, для различных элементов синтаксиса. Некоторые модели имеют различное использование в зависимости от типа кодируемого значения. Первоначальный выбор контекстной модели производится в начале кодирования каждой независимой секции видеоизображения (обычно это кадр) в зависимости от коэффициента квантования QP.
В целом, СЛВЛС обеспечивает гораздо более высокую эффективность кодирования по сравнению с УЬС за счет большей вычислительной сложности.
На этом краткий обзор рекомендации Н.264 закончен. Он подготовлен на основании материалов сайта http://www.vcodex.com/, поэтому вы можете обратиться по указанному адресу для получения более полной информации. ■