Как устранить пространственную или временную избыточность: нецелочисленные вектора движения, двунаправленное предсказание, aдаптивный выбор формы, размера и положения блоков изображения, предсказание векторов движения.
Одним из основных этапов обработки цифровых видеоданных в блочных гибридных системах видеокодирования является этап устранения пространственной или временной избыточности. Для каждого текущего кодируемого участка (блока) изображения система кодирования старается найти наиболее похожий блок на ранее закодированных видеоизображениях. Отсчеты найденного блока (пиксели) используются в качестве приближенной оценки (предсказания) значений отсчетов кодируемого блока. «Предсказанные» отсчеты вычитаются из отсчетов кодируемого блока, в результате чего формируется разностный сигнал (Residual). Очевидно, что разностный сигнал содержит информацию только об отличии изображения в кодируемом блоке от изображения в блоке, использованном в качестве предсказания. При «удачном предсказании» количество информации в разностном сигнале оказывается существенно меньше, чем в кодируемом блоке, что во многом и определяет степень сжатия видеоданных при кодировании. Именно информация о разностном сигнале (после некоторой дополнительной обработки) помещается в закодированный поток, т.е. представляет результат кодирования.
Кроме того, в поток помещается информация, позволяющая декодирующей системе выполнить предсказание. Что это за информация? Это, прежде всего, должен быть некоторый идентификатор ранее закодированного видеоизображения (его называют Reference), на котором найден блок, используемый в качестве предсказания. Идентификатор должен быть дополнен информацией о координатах блока-предсказания внутри reference-изображения. Эти координаты обычно задают относительно положения текущего кодируемого блока, то есть в виде смещения кодируемого блока относительно блока-предсказания. Как следствие, совокупность смещений в горизонтальном и вертикальном направлениях называют векторами движения (по сути, они и показывают то, насколько кодируемый блок сдвинулся относительно блока, используемого для предсказания).
Процедура декодирования заключается в том, чтобы по идентификатору найти среди ранее декодированных изображений Reference-изображение. По известным координатам «взять» с этого изображения отсчеты блока-предсказания и добавить к ним значения разностного сигнала из закодированного потока. В результате получится декодированное изображение. Все очень просто! Эта простая идея первоначально была реализована при разработке стандарта H.261 еще в 1988 году. За последующие 25 лет к этой идее было добавлено еще несколько, что позволило существенно снизить как количество информации, требуемое для описания разностного сигнала, так и количество информации, необходимое для идентификации блока на референсном изображении, используемого для предсказания. Кратко рассмотрим эти нововведения.
Нецелочисленные вектора движения
Очевидно, что в реальных видеопоследовательностях смещение изображения в одном кадре относительно изображения в другом (референсном) кадре часто не составляет целое число дискретных отсчетов. В этой ситуации введение нецелочисленных векторов движения позволяет существенно повысить «качество» предсказания. При нецелочисленном смещении для предсказания используются интерполированные (сдвинутые относительно целочисленной позиции) отсчеты референсного блока. Величина и направление сдвига задаются дробными частями горизонтальной и вертикальной составляющих вектора движения.
Двунаправленное предсказание
При двунаправленном предсказании кодируемого блока, в качестве референсных используются два блока, каждый из которых может находиться на своем референсном кадре. В качестве предсказания используется полусумма значений отсчетов из одного и другого блока. Наиболее часто один из референсных кадров находится в видеопоследовательности до кадра, содержащего кодируемый блок. Второй референсный кадр находится после текущего кадра. Так как в качестве референсных могут использоваться только уже закодированные кадры, введение двунаправленного предсказания приводит к необходимости кодировать видеокадры не в той последовательности, в которой они находятся в видео (рис. 1). А в чем идея? За счет чего такое двунаправленное предсказание (его называют bi-prediction, блоки, кодируемые с таким предсказанием называют B-блоками, а закодированные кадры, содержащие B-блоки, называют B-кадрами) дает выигрыш в степени сжатия видеоданных, то есть в «качестве» предсказания? Рассмотрим несколько ситуаций, в которых такой выигрыш не вызывает сомнений.