20. Основы видеокодированияСжатие видео основано на двух важных принципах. Первый – это пространственная избыточность, присущая каждому кадру видеоряда. А второй принцип основан на том факте, что большую часть времени каждый кадр похож на своего предшественника. Это называется временной избыточностью. Таким образом, типичный метод сжатия видео начинается с кодирования первого кадра с помощью стандартного алгоритма сжатия изображения, а затем выполняет кодирование последующего кадра в виде разности между ним и предшествующим и полученное разностное изображение сжимает методом сжатия изображений. Сжатие видео это почти всегда сжатие с потерей информации, иначе объем видео становится слишком большим для его хранения. Поэтому первый кадр кодируется как изображение алгоритмом сжатия с потерями, например, JPEG. Такой закодированный кадр называют I кадром. Следующий, второй кадр уже можно закодировать как разность между ним и первым. Такой кадр называют P кадр, и который сжимается, как правило, лучше, чем исходный кадр (не разностный). Это наводит на мысль, что все видео можно представить в виде следующих типов кадров: IPPPPPPPP…, что называется временной моделью. Однако на практике, при передаче видео по каналам связи или при ошибках в записи данных или по каким-либо другим причинам возможны потери информации в закодированном видеоряде. Значит, при указанной временной модели ошибка в каком-либо из кадров будет приводить к нарастанию ошибок в последующих кадрах и она будет уже сохраняться на протяжении всего видео. Чтобы устранить этот недостаток временную модель можно представить, например, в виде IPPPIPPPIPPP… В этом случае ошибка в каком-либо кадре устранится когда появится кадр I типа. В первых видеокодеках, например MPEG-1, временная модель и выглядела примерно в таком виде. Но при развитии компьютерной техники появилась возможность создавать более сложные временные модели. Для них ввели новый тип кадра, в котором разности вычисляются не только на основе предыдущего, но и на основе последующего кадров и такой тип кадра назвали B кадр. Очевидно, что компенсация B кадра будет, как правило, лучше по сравнению с компенсацией кадра P типа, а значит и будут достигаться более высокие степени сжатия видео. Однако чтобы осуществить компенсацию по предыдущему и последующем кадрам они должны быть известны как кодеру, так и декодеру. Это значит, что они должны быть сжаты кодером и переданы декодеру до кодирования кадров B типа. Одной из самой распространенной временной моделью такого типа является следующая последовательность кадров этих трех типов: I B B B P B B B P B B B P B B B I… Такая временная модель предполагает, что кодер сначала закодирует первый кадр, как кадр I типа. Затем, закодирует 5-й кадр, как кадр P типа. После этого выполнит кодирование B кадров 2,3 и 4 на основе кадров I и P. В результате на выходе кодера будет формироваться последовательность: I P B B B P B B B P B B B I B B B… Для корректного воспроизведения видеоряда декодеру будет необходимо в буфере сформировать как минимум 5 кадров до их отображения, т.к. они идут не по порядку. Это требует соответствующую скорость работы декодера. Рассмотрим подробнее процесс компенсации кадров на примере кадров P типа. В самом простом случае можно взять просто разность между текущим и предыдущим кадрами. Но этот результат можно улучшить, если учесть, что при движении объектов на сцене некоторые группы пикселов на соседних кадрах могут быть немного сдвинуты относительно друг друга. Следовательно, если найти такую группу пикселей и знать искомое их смещение, то можно более точно осуществить прогноз следующего кадра и получить лучшее сжатие. В принципе эта перемещающаяся часть может иметь любую форму. Однако на практике ограничиваются квадратами и прямоугольниками заранее выбранных размеров. При этом предыдущий кадр разбивают на непересекающиеся блоки, например, квадратов и для каждого квадрата на текущем кадре находят область наиболее близко совпадающую с соответствующим квадратом предыдущего блока в соответствии с выбранной мерой. После того как эта область найдена, кодер формирует смещение соответствующего блока, которое называют вектором движения. В результате для каждого кадра P типа декодеру передается скомпенсированный кадр и набор векторов движения блоков. При этом размер блоков обычно выбирают 8 или 16. В результате получается следующая схема видеокодера (рис. 1).
|