Улучшение отношения сигнал/шум при микшировании видео изображения, сжатого по стандарту MPEG2, страница 15

Обратное ДКП

После инверсного квантования вычисляется обратное ДКП. Вычисленные значения приводятся к диапазону -256…255. Если макроблок пропущен или если блок в макроблоке не кодировался, то соответствующие отсчеты будут равны нулю.

Компенсация движения

Компенсация движения основана на объединении предсказания пикселов по предыдущим кадрам с использованием вычисленных для данного кадра отсчетов на выходе ОДКП. Упрощенная схема этого процесса показана на рис.1.6.3.

Рис.1.6.3. Упрощенная блок-схема процесса компенсации движения

В общем случае для каждого блока формируется до 4 предсказаний, объединяющиеся вместе для получения результирующего предсказания блока p[y][x]. Показанный на рис.1.1.2.14 режим насыщения нужен для предотвращения получения отрицательных значений. В случае интра блоков предсказание не выполняется и p[y][x]=0. Хотя и в интра макроблоках могут быть вектора компенсации движения, которые могут использоваться в случае ошибок битового потока, приводимых к невозможности извлечения информации и коэффициентах. Как должен декодер действовать в этом случае в стандарте не описано. Далее будут приведены некоторые соображения.

В случае если блок не кодировался, в том числе и по причине пропуска макроблока, то f[y][x]=0 и декодер оперирует только с p[y][x].

Существует два основных режима предсказания: предсказание на уровне поля и на уровне кадра. Поля и кадры на основе которых делается предсказание могут быть как КК, так и ПК типа. В ПК кадрах используется только предсказание на уровне поля, а в КК кадрах – оба режима. Кроме двух основных режимов предсказания существует еще две разновидности подрежимов предсказания.

  1. Предсказание 16х8. В этом подрежиме для каждого макроблока используется два вектора, один для верхней части размером 16х8, другой – для нижней. В случае двустороннего предсказания получается уже 4 вектора: по 2 для прямого и обратного предсказания. Данный подрежим применяется только для ПК кадров. 
  2. Предсказание, в котором используется один базовый вектор и один разностный вектор. В случае ПК-кадров из этих векторов получаются два вектора компенсации движения. Они используются для предсказания на основе двух опорных полей, которые усредняются. В случае КК этот процесс повторяется для двух полей, так что всего выполняется 4 предсказания на основе поля. Этот режим может использоваться только в Р-кадрах, когда между опорным и предсказываемым полем или кадром нет В-кадра.

Для уменьшения требуемого числа бит, отводимых на вектора компенсации движения, они кодируются разностно по отношению к предыдущим векторам. Для восстановления векторов декодер должен управлять 4 предсказателями (для горизонтальной и для вертикальной компоненты), обозначаемыми PMV[r][s][t]. Для каждого предсказания вначале вычисляется вектор движения vector’[r][s][t]. Потом он масштабируется в зависимости от формата цвета (4:2:0, 4:2:2 или 4:4:4), и получаются вектора для каждой цветовой компоненты vector[r][s][t]. Индексы r, s, t  описаны в табл.П.2.42.

Вектора компенсации движения vector’[r][s][t] могут быть вычислены следующим образом:

r_size = f_code[s][t] - 1

f = 1 << r_size

high = ( 16 * f ) -  1;

low = ( (-16) * f );

range = ( 32 * f );

if ( (f  == 1) || (motion_code[r][s][t] == 0) )

delta = motion_code[r][s][t] ;

else {

delta = ( ( Abs(motion_code[r][s][t]) - 1 ) * f ) + motion_residual[r][s][t] + 1;

if (motion_code[r][s][t] < 0)

delta = - delta;

}

prediction = PMV[r][s][t];

if ( (mv_format == “field”) && (t==1) && (picture_structure == “Frame picture”) )

prediction = PMV[r][s][t] DIV 2;

vector’[r][s][t]= prediction + delta;

if (vector’[r][s][t] < low )

vector’[r][s][t] = vector’[r][s][t] + range;

if (vector’[r][s][t] > high)

vector’[r][s][t] = vector’[r][s][t] - range;

if ( (mv_format == “field”) && (t==1) && (picture_structure == “Frame picture”) )

PMV[r][s][t] = vector’[r][s][t] * 2;

else

PMV[r][s][t] = vector’[r][s][t];