CABAC: что скрывается за этими пятью буквами, часть четвертая
Ознакомьтесь с предыдущими главами: часть 1, часть 2, часть 3.
Продолжаем разбираться со словом Binary. На вход энтропийного кодера подается информация, о всех решениях, принятых при кодировании в каждом блоке, присутствующем на схеме. Большая часть этой информации представлена целыми числами, а не бинами, принимающими значения 0 или 1. Да, конечно, любое целое число можно представить в двоичном виде и получить, таким образом, поток бинов на входе энтропийного кодера. Однако, при таком подходе вероятности появления нулей и единиц в двоичном сообщении будут практически равны. В таких условиях степень сжатия данных в арифметическом кодере будет практически равна нулю. Т.е. в результате арифметического кодирования количество битов в закодированном сообщении будет не меньше, чем количество бинов на входе кодера. В связи с этим в HEVC предусмотрена специальная процедура, которой подвергается вся числовая информация, поступающая на вход арифметического кодера. Эта процедура называется бинаризацей. Именно благодаря ей все числовые значения, описывающие процесс кодирования того или иного блока изображения, переводятся в набор двоичных бинов. Рассмотрим детально процедуру бинаризации в частном случае, когда кодирование выполняется только в режиме Intra-предсказания.
Вспомним, что кодирование видеокадра в HEVC осуществляется поблочно в порядке слева-направо и сверху-вниз. Блоки кодирования, называемые LCU, представляют собой квадратные неперекрывающиеся области, равномерно покрывающие всю площадь видеоизображения. Каждый блок при кодировании может быть разбит на 4 квадратных подблока, называемых CU. Каждый из блоков CU, в свою очередь, может быть разбит на 4 квадратных CU меньшего размера. В результате таких разбиений исходный блок LCU размера 2M представляется в виде квадродерева, называемого CTU. Максимальная глубина квадродерева является параметром кодирующей системы. Кроме того, в стандарте задан минимально возможный размер CU, равный 8.
На следующем этапе кодирования для всех CU, являющихся «листьями» квадродерева, выполняется пространственное предсказание. Область, для которой выполняется предсказание, называют блоком предсказания или PU. Здесь возможны два варианта. CU может содержать один блок PU, так что размеры областей CU и PU совпадают, или CU может содержать 4 квадратных PU вдвое меньшего размера. Последний вариант возможен только в том случае, если данный блок CU находится на максимально возможной глубине квадродерева. Само предсказание для каждой области PU может выполняться одним из 35 заданных в стандарте способов. Предсказание для значений яркостной и цветоразностных компонент, представляющих каждый пиксел изображения в предсказываемой области, выполняется по отдельности. Способ предсказания цветоразностных компонент может отличаться от способа предсказания яркостной компоненты. Предсказанные значения вычитаются из значений компонент отсчетов кодируемого изображения, в результате чего формируется двумерный разностный сигнал.
Отсчеты разностного сигнала, сформированного на этапе пространственного предсказания для всего CU, на следующем этапе кодирования поблочно подвергаются двумерному спектральному преобразованию. Блоки разностного сигнала, подвергаемые спектральному преобразованию, называют TU. TU верхнего уровня совпадают по размеру с содержащим его CU. При кодировании TU могут разбиваться на 4 квадратных подблока вдвое меньшего размера. Каждый из таких подблоков, в свою очередь, может быть также разбит. В результате образуется квадродерево, «листья» которого и являются блоками разностного сигнала для спектрального преобразования. Минимальный размер TU задан в стандарте равным 4, максимальный — 32. Полученные в результате спектрального преобразования спектральные отсчеты подвергаются процедуре квантования. Шаг квантования Δ определяется значением параметра квантования Qp: Δ=(2Qp−4)/6.
Все значения, описывающие выбранный при кодировании вариант разбиения LCU на CU, PU, TU, выбранный способ предсказания для каждого блока PU, значения, полученные в результате квантования спектральных отсчетов разностного сигнала, и т.д. называют синтаксическими элементами. Совокупность синтаксических элементов, относящихся к текущему CU, полностью описывает результат выбранного варианта кодирования изображения в этом блоке. Именно этот набор проходит перед энтропийным кодированием через процедуру бинаризации, отображающей значение каждого синтаксического элемента в набор двоичных символов — бинов. Ниже приведен краткий перечень типов синтаксических элементов, используемых при описании кодируемого изображения в HEVC при пространственном предсказании, а также алгоритмы их бинаризации. В перечне мы использовали те же названия синтаксических элементов, что и в спецификации стандарта H.265/HEVC.
Разбиение LCU на блоки CU меньшего размера, т.е. структура квадродерева CU, индицируется в потоке синтаксическим элементом split_cu_flag. Этот синтаксический элемент может принимать два значения: 0 — в том случае, если текущая CU не разбивается на меньшие блоки; 1 — в обратном случае. Двоичное значение split_cu_flag непосредственно поступает на вход энтропийного кодера минуя процедуру бинаризации.
Следующий синтаксический элемент — part_mode — присутствует в описании CU в том случае, если при построении квадродерева достигнута максимально возможная глубина разбиений. Элемент part_mode может принимать только два значения. Значение part_mode = 1 индицирует случай, когда размеры PU и CU совпадают. При part_mode = 0 блок CU содержит 4 квадратных блока PU вдвое меньшего размера. Процедура бинаризации для значений этого синтаксического элемента сводится к инверсии его двоичного значения.
Для определения способа пространственного предсказания яркостной компоненты пикселов блока PU (одного из 35) используются значения трех синтаксических элементов: prev_intra_luma_pred_flag, mpm_idx и rem_intra_luma_pred_mode. Бинарный синтаксический элемент prev_intra_luma_pred_flag=1, если номер режима предсказания должен вычисляться по номерам режимов предсказания соседних блоков PU (соседними блоками считаются два блока, примыкающие к текущему слева и сверху). В результате вычислений получаются три возможных значения. Выбор из полученных трех значений индицируется синтаксическим элементом mpm_idx = 0, 1, 2. При prev_intra_luma_pred_flag = 0 номер способа пространственного предсказания не является ни одним из трех рассчитанных значений. В этом случае выбор одного из оставшихся 32 способов предсказания осуществляется с помощью 5-разрядного синтаксического элемента rem_intra_luma_pred_mode.
Бинарное значение prev_intra_luma_pred_flag не подвергается бинаризации. При бинаризации значение mpm_idx=0 отображается в один нулевой бин. Значение mpm_idx=1 отображается в последовательность из двух бинов 10. Значение mpm_idx=2 — в последовательность из двух бинов 11.
Бинаризация rem_intra_luma_pred_mode отображает его значение в последовательность из 5 бинов, дающих двоичное представление значения синтаксического элемента.
Номер способа предсказания цветоразностных компонент блока PU индицируется в потоке синтаксическим элементом intra_chroma_pred_mode, который может принимать значения от 0 до 4. В случае, когда intra_chroma_pred_mode=4, способ предсказания цветоразностных компонент совпадает со способом предсказания яркостной компоненты. Для остальных четырех значений этого синтаксического элемента соответствующие номера способов предсказания заданы в стандарте HEVC таблично. При бинаризации значение intra_chroma_pred_mode=4 отображается в один бин со значением 0. Остальные значения intra_chroma_pred_mode процедура бинаризации отображает в последовательность из 3 бин, первый из которых всегда равен 1, а остальные два являются двоичным представлением значения intra_chroma_pred_mode.
Разбиение блока CU на квадратные блоки TU, т.е. структура квадродерева блоков TU, индицируется в потоке синтаксическим элементом split_transform_flag. Если этот синтаксический элемент равен 0, то размер блока разностного сигнала, подвергаемого спектральному преобразованию, совпадает с размером блока CU. В противном случае блок TU разбивается на 4 квадратных блока вдвое меньшего размера. Двоичное значение split_transform_flag не подвергается бинаризации.
Три синтаксических элемента cbf_cb, cbf_cr и cbf_luma показывают, содержит ли блок TU ненулевые значения спектральных отсчетов для цветоразностных и яркостной компонент разностного сигнала. Значения этих трех синтаксических элементов не требуют бинаризации.
При отличии от 0 флагов cbf_cb, cbf_cr и cbf_luma в потоке присутствует описание соответствующего блока спектральных отсчетов. Это описание выполняется с помощью восьми различных синтаксических элементов: last_sig_coeff_x, last_sig_coeff_y, coded_sub_block_flag, sig_coeff_flag, coeff_abs_level_greater1_flag, coeff_abs_level_greater2_flag, coeff_sign_flag, coeff_abs_level_remaining. Описание блока TU начинается с двух синтаксических элементов last_sig_coeff_x и last_sig_coeff_y. Значения этих элементов определяются координатами (x, y) последнего ненулевого спектрального отсчета в блоке TU при заданном порядке обхода спектральных отсчетов. При обходе блок TU разбивается на подблоки размером 4×4. Порядок обхода подблоков внутри блока TU и коэффициентов внутри каждого подблока совпадают. Для TU с размерами 4×4 и 8×8 возможны три варианта обхода: диагональный, горизонтальный и вертикальный. Тот или иной вариант определяется номером режима предсказания. Для блоков TU больших размеров возможен только диагональный порядок обхода. Три варианта обхода для блока TU размером 8×8 иллюстрируются на рис. 1.