Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


3.5. Энтропийный кодер

Энтропийный кодер преобразовывает последовательности символов, представляющих элементы видеопоследовательности, в сжатый поток битов, который можно сохранять в файле или передавать по сетям связи. Входные символы могут включать квантованные коэффициенты преобразования («серия значение» или нулевое дерево, закодированное методом, изложенным в § 3.4.4), векторы движения (координаты  и  векторов перемещения всех блоков с компенсацией движения с целым или дробным пиксельным разрешением), маркеры (коды, обозначающие точки синхронизации в видеопоследовательности), хедеры (заголовки макроблоков, изображений, последовательностей и т.п.) и дополнительную информацию («посторонние» данные, несущественные для корректного декодирования). В этом параграфе мы рассмотрим методы кодирования с предсказанием (использующие корреляцию близких областей кодируемых кадров), после чего обсудим две широко используемые техники энтропийного кодирования: модифицированные коды Хаффмана переменной длины и арифметическое кодирование.

3.5.1. Коды с предсказанием

Многие близко расположенные точки изображений являются сильно коррелированными. Например, DC-коэффициенты соседних блоков пикселов, закодированных в моде intra, бывают очень похожими; близкие векторы движений могут иметь близкие значения координат  ии т.д. Можно повысить эффективность кодирования с помощью предсказания элементов текущего блока или макроблока по ранее декодированным данным, кодируя разность между предсказанным и фактическим значением этого элемента.

Рис. 3.44. Кандидаты для предсказания вектора движения.

Вектор движения блока или макроблока обозначает смещение на предсказанную ссылку ранее декодированного кадра. Векторы соседних блоков или макроблоков часто зависимы, так как движение объекта в кадре может захватывать большие участки изображения. Это особенно актуально для блоков малых размеров (например, для блоков 4x4, см. рис. 3.22) и/или для перемещения больших объектов. Степень сжатия векторов движения можно улучшить, предсказывая каждый вектор с помощью ранее кодированного вектора. Простейшим предсказанием для вектора текущего макроблока X может служить макроблок А, примыкающий к нему слева по горизонтали (рис. 3.44). Три и более ранее закодированных вектора могут также участвовать в предсказании вектора для макроблока X (например, А, В и С на рис. 3.44). При этом кодируется разность между предсказанным и действительным вектором движения MDV (Motion Difference Vector).

Параметр квантования или шаг квантователя контролирует соотношение между эффективностью сжатия и качеством декодированного изображения. В видеокодеке, работающем в масштабе реального времени, может потребоваться модифицировать квантование в процессе кодирования кадра (например, чтобы изменить степень сжатия в целях подгонки битовой скорости кодированного потока к пропускной способности данного канала). Для этого часто бывает достаточно изменить этот параметр лишь для малой доли последовательных макроблоков. Модифицированные параметры квантования необходимо сообщить декодеру, но вместо передачи новой величины предпочтительнее передать величину разности между новым и старым параметрами (например, ±1, ±2), которую декодер добавит к старому значению. Для кодирования разности можно использовать меньше бит, чем для кодирования полного параметра квантования.

 



<< ПредыдущаяОглавлениеСледующая >>