Межкадровый переход - это кадр в потоке сжатия видео, который выражается в термины одного или нескольких соседних кадров. «Межкадровая» часть термина относится к использованию межкадрового предсказания. Этот вид прогнозирования пытается использовать преимущества временной избыточности между соседними кадрами, обеспечивая более высокую степень сжатия.
Межкадровое кодирование кадра делится на блоки, известные как макроблоки. После этого вместо прямого кодирования необработанных значений пикселей для каждого блока кодер попытается найти блок, аналогичный тому, который он кодирует в ранее закодированном кадре, называемый опорным кадром . Этот процесс выполняется алгоритмом сопоставления блоков . Если кодер удается на ее поиск, блок может быть закодирован с помощью вектора, известный как вектора движения, который указывает на положение согласующего блока в опорном кадре. Процесс определения вектора движения называется оценкой движения.
. В большинстве случаев кодер будет успешным, но найденный блок, скорее всего, не точно соответствует блоку, который он кодирует. Вот почему кодировщик вычислит разницу между ними. Эти остаточные значения известны как ошибка предсказания, и их необходимо преобразовать и отправить в декодер.
Чтобы подвести итог, если кодер удается найти соответствующий блок на опорный кадре, то получит вектор движения, указывающий на согласованный блок и ошибку прогнозирования. Используя оба элемента, декодер сможет восстановить необработанные пиксели блока. На следующем изображении графически показан весь процесс:
Процесс межкадрового предсказания. В этом случае, имело место изменения освещенности между блоком на опорной раме и блоком, который кодируемый:. Эта разница будет ошибкой предсказания к этому блокуЭтого вида предсказания имеют некоторые достоинства и недостатки:
Из-за этих недостатков должен быть надежный и периодический по времени опорный кадр. использоваться для того, чтобы этот метод был эффективным и полезным. Этот опорный кадр известен как внутрикадровый, который строго внутренне кодирован, поэтому его всегда можно декодировать без дополнительной информации.
В большинстве проектов существует два типа промежуточных кадров: P-кадры и B-кадры. Эти два вида кадров и I-кадры (изображения с внутренним кодированием) обычно объединяются в GOP (группу изображений). I-кадр не требует дополнительной информации для декодирования, и его можно использовать в качестве надежного эталона. Эта структура также позволяет достичь периодичности I-кадров, которая необходима для синхронизации декодера.
Разница между P-кадрами и B-кадрами - это опорный кадр, который им разрешено использовать.
P-кадр - это термин, используемый для определения прогнозируемых изображений вперед. Прогнозирование производится на основе более раннего изображения, в основном I-кадра или P-кадра, поэтому требуется меньше данных кодирования (≈50% по сравнению с размером I-кадра).
Объем данных, необходимых для выполнения этого предсказания, состоит из векторов движения и коэффициентов преобразования, описывающих коррекцию предсказания. Он включает использование компенсации движения.
B-кадр - это термин для изображений с двунаправленным предсказанием. Этот вид метода прогнозирования обычно занимает меньше данных кодирования, чем P-кадры (≈25% по сравнению с размером I-кадра), потому что прогнозирование выполняется либо из более раннего кадра, либо из более позднего кадра, либо из обоих. (B-кадры также могут быть менее эффективными, чем P-кадры в определенных случаях, например: кодирование без потерь)
Подобно P-кадрам, B-кадры выражаются как векторы движения и коэффициенты преобразования. Чтобы избежать растущей ошибки распространения, B-кадры не используются в качестве эталона для дальнейшего прогнозирования в большинстве стандартов кодирования. Однако в более новых методах кодирования (таких как H.264 / MPEG-4 AVC и HEVC ) B-кадры могут использоваться в качестве эталона для лучшего использования временной избыточности.
Типичная Группа изображений Структура (GOP) - это IBBPBBP... I-кадр используется для прогнозирования первого P-кадра, и эти два кадра также используются для прогнозирования первого и второго B-кадров. Второй P-кадр прогнозируется также с использованием первого I-кадра. Оба P-кадра объединяются, чтобы предсказать третий и четвертый B-кадры. Схема показана на следующем рисунке:
Эта структура предполагает проблему, потому что четвертый кадр (P-кадр) необходим для прогнозирования второго и третьего (B-кадры). Таким образом, нам нужно передать P-кадр раньше, чем B-кадры, и это задержит передачу (необходимо будет сохранить P-кадр). Эта структура имеет сильные стороны:
Но это имеет слабые места:
Наиболее важными улучшениями этого метода по сравнению с предыдущим стандартом H.264 являются:
Разделение блоков яркости 16 × 16 (MPEG-2 ), 16 × 8, 8 × 16 и 8 × 8. Последний случай позволяет разделить блок на новые блоки 4 × 8, 8 × 4 или 4 × 4.
Кодируемый кадр делится на блоки равного размера, как показано на рисунке выше. Каждое предсказание блока будет блоками того же размера, что и опорные изображения, смещенными на небольшое смещение.
Пиксели в положении полупикселя получаются путем применения фильтра длиной 6.
H = [1 -5 20 20 -5 1]
Например:
b = A - 5B + 20C + 20D - 5E + F
Пиксели в положении четверти пикселя получаются посредством билинейной интерполяции.
В то время как MPEG-2 допускает разрешение ½ пикселя, межкадровое разрешение допускает до пикселя. Это означает, что можно искать блок в кадре, который будет закодирован в других опорных кадрах, или мы можем интерполировать несуществующие пиксели, чтобы найти блоки, которые даже лучше подходят для текущего блока. Если вектор движения представляет собой целое число единиц отсчетов, это означает, что можно найти в опорных изображениях скомпенсированный блок в движении. Если вектор движения не является целым числом, прогноз будет получен из интерполированных пикселей с помощью фильтра интерполяции в горизонтальном и вертикальном направлениях.
Множественные ссылки на оценку движения позволяют найти лучшую ссылку в 2 возможных буферах (Список 0 для прошлых изображений, Список 1 для будущих изображений), которые в общей сложности содержат до 16 кадров. Блок предсказания выполняется посредством взвешенной суммы блоков из опорного изображения. Это позволяет улучшить качество изображения в сценах, где есть изменения плоскости, масштабирования или при обнаружении новых объектов.
Режим пропуска и прямой переход очень часто используются, особенно с B-кадрами. Они значительно сокращают количество кодируемых битов. Эти режимы упоминаются, когда блок кодируется без отправки остаточной ошибки или векторов движения. Кодировщик запишет только то, что это макроблок пропуска. Декодер выведет вектор движения блока, закодированного в режиме прямого / пропуска, из других уже декодированных блоков.
Есть два способа вывести движение:
На рисунке выше розовые блоки являются блоками, закодированными в режиме прямого / пропуска. Как видим, они используются очень часто, в основном в B-кадрах.
Хотя термин «кадр» широко используется в неформальной обстановке, во многих случаях (например, в международных стандартах для кодирования видео по MPEG и VCEG ) применяется более общая концепция с использованием слова «изображение», а не «кадр», где изображение может быть либо полным кадром, либо одним с чересстрочной разверткой поле.
Видео кодеки, такие как MPEG-2, H.264 или Ogg Theora уменьшите объем данных в потоке, следуя ключевым кадрам одним или несколькими промежуточными кадрами. Эти кадры обычно можно кодировать с использованием более низкой скорости передачи, чем требуется для ключевых кадров, поскольку большая часть изображения обычно аналогична, поэтому необходимо кодировать только изменяющиеся части.