5.4.1.1. Бинарное кодирование формыДля каждого макроблока передается код bab_type. Этот код сигнализирует о том, является ли данный макроблок прозрачным (т.е. он не входит в VOP, и, значит, его не надо кодировать), непрозрачным (он является внутренним для текущего VOP, поэтому движение и текстура кодируются по обычной схеме) или граничным (часть его прозрачна, а часть — нет). На рис. 5.30 показан объект VOP, а на рис. 5.31 приведена его бинарная маска, которая информирует что белые пикселы являются частью данного VOP, а черные пикселы лежат вне его. Для граничных макроблоков (см., например, рис. 5.32) необходимо закодировать бинарную альфа-маску для обозначения прозрачных и непрозрачных пикселов (рис. 5.33). Рис. 5.30. VOP. Рис. 5.31. Бинарная альфа-маска (всего VOP) Рис. 5.32. Граничный макроблок. Рис. 5.33. Бинарная альфа-маска (граничный макроблок). Бинарная альфа-маска (ВАВ) каждого граничного макроблока кодируется с помощью контекстно-зависимого арифметического кодера (CAE). Необходимо закодировать значение X пиксела BAD, где X — это 0 или 1. Сначала для текущего пиксела вычисляется контекст. Контекстным шаблоном называется области из n ранее закодированных соседних пикселов (пространственные соседи для ВАВ, кодируемых в моде intra или пространственные и временные соседи для альфа-блоков, кодируемых в моде inter). Эти и значений пикселов образуют слово из n бит, которое называется контекстом данного пиксела X. Имеется всего различных контекстов. Пусть число Р(0) — вероятность того, что X ранен 0 при условии данного контекста. Это число хранится кодером и декодером для каждого возможного n-битного контекста. Каждый пиксел маски X кодируется следующим образом. 1. Вычислить контекст X. 2. Найти соответствующее число Р(0) в таблице вероятностей. 3. Закодировать пиксел X арифметическим кодером (см. обзор арифметического кодирования в гл. 3). Соответствующий подинтервал совпадает с , если X = 0 (черный), и он равен , если X = 1 (белый). Кодирование блоков ВАВ в моде intra. В моде intra контекстный шаблон текущего пиксела маски формируется по его 10 пространственным соседям, которые были ранее закодированы (на рис. 5.34 это пикселы с по ). Контекстом пиксела служит 10-битное слово . Каждая из 1024 контекстных вероятностей занесена в таблицу стандарта MPEG-4 Visual в виде целого числа от 0 до 65 535, и соответствующая вероятность Р(0) получается делением этого числа на 65 535.
Рис. 5.34. Контекстный шаблон для ВАВ в моде intra. Примеры.
Контекстный шаблон (рис. 5.34) простирается на два пиксела по горизонтали и вертикали от позиции пиксела X. Если какой-то из этих пикселов не определен (например, , и могут быть частью еще не закодированного блока ВАВ или некоторые из них принадлежат прозрачному ВАВ), то их значение полагается равным ближайшему соседу текущего ВАВ. В зависимости от формы бинарной маски можно получить более эффективное кодирование, если сканировать ВАВ по вертикали, а не по горизонтали (по растру). В этом случае контекстный шаблон ставится «на бок». Выбор порядка сканирования для каждого ВАВ передается специальным сигналом в выходном битовом потоке. Рис. 5.35. Контекстный шаблон для ВАВ в моде inter. Кодирование блоков ВАВ в моде inter. Контекстный шаблон (рис. 5.35) состоит из 9 пикселов, из которых 4 принадлежат текущему VOP (пикселы с по ), а еще 5 — ссылочному VOP (пикселы с по ). Позиция центрального контекстного пиксела на ссылочном VOP () может быть смещена по отношению к позиции X на некоторый целый вектор, что дает возможность кодировать ВАВ в моде inter с помощью компенсации движения. Этот вектор «формы» MVs можно выбрать независимо от «текстурного» вектора движения. Всего имеется 9 контекстных пикселов, и, следовательно, необходимо хранить таблицу, состоящую из 29 = 512 вероятностей Р(0). Примеры.
Эти примеры указывают на то, что прозрачность текущего пиксела X сильнее зависит от (та же позиция на предыдущем ВАВ с компенсацией движения), чем от (предыдущий пиксел при растровом сканировании). Как и в моде intra, порядок сканирования текущего (и предыдущего) ВАВ может быть горизонтальным или вертикальным. Для каждого граничного ВАВ в моде inter необходимо закодировать один вектор MVs. Для объектов P-VOP ссылочные VOP - это предыдущие объекты I-VOP или P-VOP, а для B-VOP это "ближайшие по времени» объекты I-VOP или P-VOP.
|