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.