6.4.8.1. Преобразование и квантование остаточных блоков 4х4 (0-15, 18-25)
Это
преобразование оперирует с блоками 4x4
остаточных данных (они помечены 0 - 15 и 18 - 25 на рис. 6.37) после прогноза компенсации
движения или прогноза intra. Преобразование в стандарте H.264 [3] основано
на DCT, но имеет ряд
фундаментальных отличий.
Рис. 6.37. Порядок сканирования блоков макроблока.
1. Оно является
целочисленным (все операции могут быть выполнены с помощью целочисленной
арифметики без потери точности при декодировании).
2. Оно
гарантирует идентичность результатов обратных преобразований, выполняемых
кодером и декодером (при использовании целочисленной арифметики).
3. Ядро алгоритма
преобразования можно реализовать, используя только операцию сложения и сдвига.
4.
Масштабирование (одна из функций преобразования) интегрировано в квантователь,
что сокращает общее число операций умножения.
Процедуры
обратного квантования и обратного преобразования могут быть выполнены с помощью
арифметики над целыми 16 битными числами (за исключением некоторых аномальных
остаточных данных), причем с использованием всего одного умножения на один
коэффициент без потери точности.
Приближенное DCT блоков 4x4. Напомним (см.
гл. 3), что преобразование DCT матриц 4x4 задается формулой:
(6.1)
где
Это произведение
матриц можно представить в следующей удобной форме [3]:
(6.2)
Здесь
«базовое»
двухмерное преобразование. Матрица
состоит из масштабных множителей, а
символ
обозначает
поэлементное умножение матрицы
на масштабные множители матрицы
с теми же
координатами (это умножение скаляров, а не матриц). Константы
и
определены выше, a
равно
(примерно
0,414).
Для
упрощения реализации преобразования величину
приближают
числом 0,5. Чтобы соблюсти ортогональность преобразования, необходимо
подправить число
:
Вторую и
четвертую строки матрицы
, а также второй и четвертый столбец
матрицы
необходимо
увеличить в два раза, а матрицу
для компенсации, наоборот,
перемасштабировать вдвое. При этом сокращается наполовину число умножений при
«базовом» преобразовании
, которые могли бы привести к потере
точности при использовании целочисленной арифметики. Окончательное прямое
преобразование примет следующий вид:
(6.3)
Это
преобразование является приближением настоящего преобразования DCT матриц 4x4, поскольку в нем изменены коэффициенты
и
.
Его
результат не тождествен применению DCT.
Пример
Сравните
выход построенного приближенного преобразования матрицы 4 х 4 с результатом
«истинного» DCT применительно к
входному блоку X:
Выход
DCT:
Выход
приближенного преобразования:
Их
разность:
|
Итак,
имеется явное различие выходных коэффициентов, которые зависят от
и
.
В
контексте кодека Н.264 приближенное преобразование имеет почти такую же
степень сжатия, что и DCT. Однако при этом имеется ряд существенных
достоинств. «Базовую» часть преобразования
можно совершить целочисленной
арифметикой с использованием только сложений, вычитаний и поразрядных сдвигов.
Область операций преобразований такова, что в ней можно применять целые 16
разрядные переменные (за исключением некоторых аномальных блоков), поскольку
входные данные находятся в пределах ±255. Масштабирующий оператор
тратит по одному
умножению на каждый коэффициент. Эту функцию можно встроить в модуль
квантователя (см. далее).
Обратное
преобразование задается формулой (6.4). Стандарт Н.264 [1] определяет это
преобразование явно в виде последовательности арифметических операций:
(6.4)
В
этой формуле каждый коэффициент блока
умножается на соответствующий весовой
множитель матрицы
.
Отметим, что умножение на числа ±1/2 можно реализовать в виде сдвигов разрядов
вправо на один шаг без существенной потери точности, так как коэффициенты
уже были
перемасштабированы.
Прямое
и обратное преобразования удовлетворяют тождеству
.
Квантование. Стандарт Н.264
использует скалярное квантование (см. гл. 3). Механизм прямого и обратного
квантования усложняется следующими требованиями: избегать деления и/или арифметические
операции с плавающей запятой и встроить в него операции масштабирования и
обратного масштабирования с использованием матриц
и
, описанных выше.
Основная
операция квантователя [3] имеет вид
где
коэффициенты
заданного выше преобразования,
шаг
квантования и
квантованные
коэффициенты. Функция round (здесь и далее)
не обязательно должна совпадать с округлением до ближайшего целого. Например,
операция взятия целой части (округление до ближайшего целого, не
превосходящего данного числа) может дать ощутимое улучшение качества.
Стандарт
задает 52 возможных значения шага
, которые
проиндексированы параметром квантователя
(см. табл. 6.5). Шаг
удваивается при
изменении
в шесть раз.
Широкие пределы шага квантователя дают возможность гибко контролировать
соотношение битовой скорости и качества. Значения
могут быть
различными для компонент яркости и хроматичности. Оба параметра находятся в
пределах 0 - 51, и по умолчанию для параметра хроматичности установлено
значение
, которое
выводится из
так, что
меньше
при
. Устанавливаемое
пользователем соотношение между
и
отображается во множестве параметров
снимка.
Таблица
6.5. Размеры шага квантователя кодека Н.264.
|
0
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
...
|
|
0,625
|
0,6875
|
0,8125
|
0,875
|
1
|
1,125
|
1,25
|
1,375
|
1,625
|
1,75
|
2
|
2,25
|
2,5
|
|
|
...
|
18
|
...
|
24
|
...
|
30
|
...
|
36
|
...
|
42
|
...
|
48
|
...
|
51
|
|
|
5
|
|
10
|
|
20
|
|
40
|
|
80
|
|
160
|
|
224
|
Множители
обратного квантования
,
или
(см. уравнение (6.3)) встроены в
прямой квантователь. Сначала входной блок
, преобразуется, и получается блок
. Затем каждый
коэффициент
квантуется и
масштабируется за одну операцию
(6.5)
где переменная
- это
,
или
в зависимости от
значения индексов
(см. уравнение (6.3)):
Индексы
|
|
|
(0,0),
(2,0), (0,2)
|
или (2,2)
|
|
(1,1), (1,3),
(3,1)
|
или (3,3)
|
|
Все остальные
|
|
|
В
целях упрощения вычислений множитель
реализован в справочной модели
программного обеспечения [4] в виде умножения на MF и правого сдвига
без использования операции деления:
где
и
(6.6)
В целочисленной
арифметике уравнение (6.6) реализуется в следующем виде:
(6.7)
где >>
обозначает сдвиг двоичных разрядов вправо. В справочной программе
равно
для блоков в
моде intra и
в моде inter.
Первые шесть
значений коэффициента MF (для всех пар
координат
),
применяемых
кодером справочной программы Н.264, приведены в табл. 6.6. Второй и третий
столбец этой таблицы (множители
и
) были слегка модифицированы с учетом
уравнения (6.6).
При
множитель
MF не изменяется,
но делитель
увеличивается в два раза при
каждом шестикратном увеличении
. Например,
величина
при
,
при
и т.д.
Таблица
6.6. Множители MF.
|
Индексы
|
Индексы
|
|
QP
|
(0, 0), (2,
0), (0, 2), (2, 2)
|
(1,1), (1,3),
(3,1), (3,3)
|
Все остальные
|
0
|
13 107
|
5 243
|
8 066
|
1
|
11 916
|
4 660
|
7 490
|
2
|
10 082
|
4 194
|
6 554
|
3
|
9 362
|
3 647
|
5 825
|
4
|
8 192
|
3 355
|
5 243
|
5
|
7 282
|
2 893
|
4 559
|
Обратное
квантование.
Базовая операция масштабирования (обратного квантования) имеет вид
. (6.8)
Масштабирующие
множители обратного преобразования (из матрицы
, содержащей числа
,
и
в
зависимости от значений индексов
)
встроены
в эту операцию вместе с постоянным множителем масштаба 64 для избежания ошибок
округления:
. (6.9)
Коэффициенты
преобразуются
базовым обратным преобразованием
, (уравнение (6.4)). Выход обратного
преобразования делится на 64 для сокращения множителя масштаба (эта процедура
реализуется только сложением и правым сдвигом). Стандарт Н.264 не специфицирует
явно числа
и
.
Вместо
этого определяется параметр
при
для каждой пары
координат
, так что операция
масштабирования принимает вид:
. (6.10)
Величины
определяются
стандартным образом при
. Они приведены в табл. 6.7.
Таблица
6.7. Множители
.
|
Индексы
|
Индексы
|
|
QP
|
(0, 0), (2,
0), (0, 2), (2,
2)
|
(1, 1), (1,
3), (3, 1), (3, 3)
|
Все остальные
|
0
|
10
|
16
|
13
|
1
|
11
|
18
|
14
|
2
|
13
|
20
|
16
|
3
|
14
|
23
|
18
|
4
|
16
|
25
|
20
|
5
|
18
|
29
|
23
|
В
уравнении (6.10) стоит множитель
по причине увеличения вдвое выхода
масштабирования при каждом шестикратном возрастании параметра QP.