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.
Итак, имеется явное различие выходных коэффициентов, которые зависят от и . В контексте кодека Н.264 приближенное преобразование имеет почти такую же степень сжатия, что и DCT. Однако при этом имеется ряд существенных достоинств. «Базовую» часть преобразования можно совершить целочисленной арифметикой с использованием только сложений, вычитаний и поразрядных сдвигов. Область операций преобразований такова, что в ней можно применять целые 16 разрядные переменные (за исключением некоторых аномальных блоков), поскольку входные данные находятся в пределах ±255. Масштабирующий оператор тратит по одному умножению на каждый коэффициент. Эту функцию можно встроить в модуль квантователя (см. далее). Обратное преобразование задается формулой (6.4). Стандарт Н.264 [1] определяет это преобразование явно в виде последовательности арифметических операций: (6.4) В этой формуле каждый коэффициент блока умножается на соответствующий весовой множитель матрицы . Отметим, что умножение на числа ±1/2 можно реализовать в виде сдвигов разрядов вправо на один шаг без существенной потери точности, так как коэффициенты уже были перемасштабированы. Прямое и обратное преобразования удовлетворяют тождеству . Квантование. Стандарт Н.264 использует скалярное квантование (см. гл. 3). Механизм прямого и обратного квантования усложняется следующими требованиями: избегать деления и/или арифметические операции с плавающей запятой и встроить в него операции масштабирования и обратного масштабирования с использованием матриц и , описанных выше. Основная операция квантователя [3] имеет вид где коэффициенты заданного выше преобразования, шаг квантования и квантованные коэффициенты. Функция round (здесь и далее) не обязательно должна совпадать с округлением до ближайшего целого. Например, операция взятия целой части (округление до ближайшего целого, не превосходящего данного числа) может дать ощутимое улучшение качества. Стандарт задает 52 возможных значения шага , которые проиндексированы параметром квантователя (см. табл. 6.5). Шаг удваивается при изменении в шесть раз. Широкие пределы шага квантователя дают возможность гибко контролировать соотношение битовой скорости и качества. Значения могут быть различными для компонент яркости и хроматичности. Оба параметра находятся в пределах 0 - 51, и по умолчанию для параметра хроматичности установлено значение , которое выводится из так, что меньше при . Устанавливаемое пользователем соотношение между и отображается во множестве параметров снимка. Таблица 6.5. Размеры шага квантователя кодека Н.264.
Множители обратного квантования , или (см. уравнение (6.3)) встроены в прямой квантователь. Сначала входной блок , преобразуется, и получается блок . Затем каждый коэффициент квантуется и масштабируется за одну операцию (6.5) где переменная - это , или в зависимости от значения индексов (см. уравнение (6.3)):
В целях упрощения вычислений множитель реализован в справочной модели программного обеспечения [4] в виде умножения на MF и правого сдвига без использования операции деления: где и (6.6) В целочисленной арифметике уравнение (6.6) реализуется в следующем виде: (6.7) где >> обозначает сдвиг двоичных разрядов вправо. В справочной программе равно для блоков в моде intra и в моде inter.
Первые шесть значений коэффициента MF (для всех пар координат ), применяемых кодером справочной программы Н.264, приведены в табл. 6.6. Второй и третий столбец этой таблицы (множители и ) были слегка модифицированы с учетом уравнения (6.6). При множитель MF не изменяется, но делитель увеличивается в два раза при каждом шестикратном увеличении . Например, величина при , при и т.д. Таблица 6.6. Множители MF.
Обратное квантование. Базовая операция масштабирования (обратного квантования) имеет вид . (6.8) Масштабирующие множители обратного преобразования (из матрицы , содержащей числа , и в зависимости от значений индексов ) встроены в эту операцию вместе с постоянным множителем масштаба 64 для избежания ошибок округления: . (6.9) Коэффициенты преобразуются базовым обратным преобразованием , (уравнение (6.4)). Выход обратного преобразования делится на 64 для сокращения множителя масштаба (эта процедура реализуется только сложением и правым сдвигом). Стандарт Н.264 не специфицирует явно числа и . Вместо этого определяется параметр при для каждой пары координат , так что операция масштабирования принимает вид: . (6.10)
Величины определяются стандартным образом при . Они приведены в табл. 6.7. Таблица 6.7. Множители .
В уравнении (6.10) стоит множитель по причине увеличения вдвое выхода масштабирования при каждом шестикратном возрастании параметра QP.
|