8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 26 27 28 29 30 31 32 ... 122

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

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

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

Вектор движения блока или макроблока обозначает смещение на предсказанную ссылку ранее декодированного кадра. Векторы соседних блоков или макроблоков часто зависимы, так как движение объекта в кадре может захватывать большие участки изображения. Это особенно актуально для блоков малых размеров (например, для блоков 4x4, см. рис. 3.22) и/или для перемещения больших объектов. Степень сжатия векторов движения можно улучшить, пред-

в

с

А

X

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


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

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

3.5.2. Коды переменной длины

Метод кодирования переменной длины сопоставляет потоку входных символов определенную последовательность кодовых слов (коды переменной длины, VLC, Variable Length Codes). Каждый символ отображается в кодовое слово, которое может иметь переменную длину, но каждое из них имеет целое число бит. Символы, встречающиеся чаще, представляются более короткими словами VLC, а редко встречающиеся символы кодируются более длинными словами VLC. Эффект сжатия данных начинает проявляться после кодирования достаточно большого числа входных символов.

3.5.2.1. Коды Хаффмана

Метод кодирования Хаффмана присваивает каждому символу код VLC, исходя из вероятности появления этого символа. В соответствии со схемой, предложенной Хаффманом в 1952 году [7], следует предварительно вычислить вероятность появления каждого символа


Вектор

Вероятность р

-2

0,1

3,32

-1

0,2

2,32

0

0,4

1,32

+1

0.2

2,32

+2

0,1

3,32

Рис. 3.45. Построение дерева Хаффмана (последовательность №1).

1. Построение дерева Хаффмана. Чтобы построить таблицу кодов Хаффмана для этого множества элементов, следует совершить итеративную процедуру-

1. упорядочить элементы по возрастанию вероятностей;

и построить множество кодовых слов переменной длины. Этот процесс будет проиллюстрирован на двух примерах.

Пример-

Кодирование Хаффмана, последовательность Jft1 векторов перемещения. Необходимо закодировать данные, содержащие разности векторов движения для видеопоследовательности (последовательность №1). В табл. 3.2 перечислены вероятности р наиболее часто встречающихся векторов перемещения в кодируемой последовательности и их информационная емкость, которая равна log2(l/p). Для достижения оптимального сжатия необходимо представить каждое значение вектора числом бит, в точности равным log2(l/p). Чаще всего встречается значение векторов движения 0, а другие значения векторов перемещения появляются г меньшей вероятностью (это распределение является типичным для последовательностей, изображающих умеренное движение).

Таблица 3.2. Вероятности векторов движения в последовательности № 1.



0 ... 26 27 28 29 30 31 32 ... 122