Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

(по цифровому вещанию) Dvorkovich_V_Cifrovye_videoinformacionnye_sistemy

.pdf
Скачиваний:
258
Добавлен:
15.03.2016
Размер:
23.26 Mб
Скачать

Глава14. Стандарты кодирования динамических изображений

ПЭП-пакеты программного потока организованы в пачки. Пачка начинается с заголовка, за которым может следовать один или несколько пакетов (пачка может состоять из одного заголовка).

Заголовок пачки может содержать информацию о синхронизации и битовой скорости.

Программный поток начинается с системного заголовка, который может повторяться. Системный заголовок несет информацию о системных параметрах потока.

Структура и параметры кодирования транспортного потока

Слой кодирования транспортного потока позволяет одну или более групп одного или более элементарных потоков объединять в единый поток. Группа элементарных потоков с общей временной базой называется программой. Данные всех элементарных потоков мультиплексируются и кодируются вместе с информацией, которая позволяет синхронно воспроизводить элементарные потоки программы.

Транспортный поток MPEG-2 состоит из одной или более программ, каждая из которых содержит один или несколько мультиплексированных элементарных потоков.

Каждый элементарный поток состоит из единиц доступа, которые являются кодированным представлением единиц воспроизведения (например, кадра изображения). Соответствующая единица доступа содержит все кодированные данные для изображения.

Единица воспроизведения элементарного потока звука — набор дискретных отсчетов, соответствующий отсчетам звукового «кадра».

Данные элементарных потоков сохраняются в ПЭП-пакетах. ПЭП-пакет состоит из заголовка, за которым следуют данные. ПЭП-пакеты сохраняются в транспортных пакетах. Начало каждого ПЭП-пакета совпадает с началом полезной информации в транспортном пакете.

Заголовок ПЭП-пакета начинается со стартового кода, который также идентифицирует, к какому потоку принадлежит пакет. Заголовок пакета может содержать метки времени декодирования и/или воспроизведения, которые относятся к первой единице доступа, входящей в пакет. Заголовок ПЭП-пакета также содержит ряд флагов, устанавливающих значения ряда полей. Данные пакета содержат переменное количество байтов одного элементарного потока.

Транспортный пакет начинается с 4-байтного префикса, который содержит идентификатор пакета и с помощью таблицы специальной информации программы определяет содержание ПЭП-пакета, передаваемого в транспортном потоке.

Транспортный поток содержит сегмент разметки программ, карту потока программ и таблицу, которая находится в специальных транспортных пакетах. Эта карта и таблица содержат необходимую и достаточную информацию для демультиплексирования и воспроизведения программ. Таблица специальной информации программ определяет, наряду с другой информацией, какие идентификаторы пакетов, а следовательно, и какие элементарные потоки связаны с каждой из программ.

14.4. MPEG-2. Кодирование динамических изображений

14.4.6. Видеопоток стандарта MPEG-2

Поток видеоданных MPEG представляет собой структурированный битовый поток кодов постоянной и переменной длины, синтаксис которого определяется набором стандартов MPEG [5.39–5.37, 5.44–5.47].

В целом поток видеоданных MPEG-2 представляется последовательностью структурных элементов, общая организация потока показана на рис. 14.15. Синтаксис кодированного битового потока видеоданных содержит шесть уровней.

Уровень видеопоследовательности (video sequence layer), состоящий из заголовка видеопоследовательности, его расширения, одной или более групп изображений и завершающего кода конца видеопоследовательности.

Если заголовок видеопоследовательности повторяется, то он должен содержать одинаковую информацию за исключением матриц квантования (как внутрикадрового, так и межкадрового). Это необходимо для обеспечения произвольного доступа.

Уровень группы кадров (group of pictures layer), состоящий из заголовка группы кадров и одного или нескольких кадров. Группа кадров — это серия, состоящая из одного или более последовательных изображений. В кодированном потоке первое кодированное изображение — это обычно I-кадр.

Порядок следования кадров в группе соответствует порядку поступления кадров в декодер. Если кадры расположить в порядке воспроизведения, то последний кадр группы — обычно I-кадр или P-кадр. Первый кадр группы — это или I-кадр, или первый B-кадр из серии B-кадров, за которой сразу следует первый I-кадр.

Например, предположим, что на входе кодера имеется последовательность кадров (знак | означает границу группы):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

I

B B P B B P B B P

B B I B B P B B P B B P

B B I

В этом случае на входе декодера должны поступать кадры в такой последовательности:

1

4

2

3

7

5

6

10

8

9

13

11

12

16

14

15

19

17

18

22

20

21

25

23

24

I

P B B P B B P B B

I B B P B B P B B P B B

I B B

В группе должен содержаться один I-кадр или более. Если приложению необходим произвольный доступ, обратное воспроизведение и т. д., то группы изображений должны быть относительно короткими. Группы могут начинаться в момент смены сюжета и в других местах, где неэффективна компенсация движения.

Уровень кадра (pictures layer), состоящий из заголовка кадра, расширения заголовка кадра и данных кадра, разбитых на слайсы.

Стандарт включает обработку изображений как с прогрессивной, так и с чересстрочной разверткой. Пары полей могут кодироваться как раздельно, так и вместе как единый кадр. Возможно динамическое переключение кодирования полей и кадров. При прогрессивной развертке возможно только кодирование кадров.

В режиме кодирования полей каждое поле кодируется как отдельное изображение (полукадр). Полукадры передаются в том же порядке, в каком они должны воспроизводиться.

Глава14. Стандарты кодирования динамических изображений

Рис. 14.15. Общая организация битового потока, формируемого в соответствии со стандартом MPEG-2

14.4. MPEG-2. Кодирование динамических изображений

Два полукадра, составляющие один кадр, всегда следуют один за другим в битовом потоке. Если первый из них является P- или B-кадром, то и второй полукадр также является P- или B-кадром соответственно. Если же первый полукадр является I-кадром, то второй полукадр может быть I-кадром или P-кадром.

При кодировании кадрами чересстрочных изображений каждый кадр набирается из двух полукадров (через строку) и кодируется как единое изображение.

Уровень слайса (slice layer), состоящий из заголовка слайса и макроблоков

Весь кадр подразделяется на области размером 16 × 16 пикселов (макроблоки). Макроблоки объединяются в слайсы. Слайс состоит из последовательности макроблоков, причем порядок следования макроблоков — слева направо. Первый и последний макроблоки слайса не должны быть пропущенными (отсутствовать в потоке данных кадра). Они должны находиться в одном и том же горизонтальном ряду макроблоков. Каждый слайс должен содержать по крайней мере один макроблок. Слайсы не должны перекрываться, но, вообще говоря, могут иметь интервалы между собой. Стандарт не специфицирует, какие действия декодер должен выполнять для восстановления информации, содержащейся в пропущенных местах в промежутках между слайсами.

Уровень макроблоков (macroblock layer)

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

Уровень блоков (block layer)

Термин «блок» может относиться или к источнику и восстановленным данным, или к соответствующим коэффициентам ДКП. Если термин «блок» относится к источнику или к восстановленным данным, то он представляет собой прямоугольную область яркостных или цветностных компонент с одинаковым количеством строк и столбцов (8×8). Если блок обозначает коэффициенты ДКП, то это должно быть 64 коэффициента.

Изображение формируется из трех прямоугольных матриц, содержащих восьмибитовые величины: матрица яркости YD и две матрицы цветности — CR и CB .

Если в стандарте MPEG-1 матрицы YD, CR и CB связаны с первичными значениями красного, зеленого и синего согласно рекомендации ITU-R ВТ.709 [5.61], то в стандарте MPEG-2 могут быть использованы и другие соотношения между YD, CR , CB и R, G, B (ITU-R ВТ.624 [5.62], SMPTE 170M [5.63], SMPTE 240M [5.64] и др.).

Стандарт предусматривает три формата передачи цветности.

Формат 4 : 2 : 0 — матрицы CR и CB в два раза меньше как по горизонтали, так и по вертикали, чем матрица YD. Матрица YD должна иметь четное число строк и столбцов (если изображение передается полями, то количество строк в

Глава14. Стандарты кодирования динамических изображений

Рис. 14.16. Расположение отсчетов в матрицах YD , CR , CB в форматах цветности

4 : 2 : 0 (а), 4 : 2 : 2 (б) и 4 : 4 : 4 (в)

изображении должно быть кратно четырем). Каждой паре отсчетов цветности CR и CB соответствует матрица из четырех отсчетов яркости (два по вертикали, два по горизонтали, рис. 14.16а).

Формат 4 : 2 : 2 — матрицы CR и CB в два раза меньше матрицы YD по горизонтали и равны по вертикали. Матрица YD должна иметь четное число строк и столбцов (если изображение передается полями, то количество строк в изображении должно быть кратно двум). Каждой паре отсчетов яркости по горизонтали соответствует по одному отсчету из матриц цветности (рис. 14.16б).

Формат 4 : 4 : 4 — матрицы CR и CB равны по размеру матрице YD . Если изображение передается полями (с чересстрочной разверткой), то количество строк в изображении должно быть кратно двум. Каждому отсчету яркости соответствует по одному отсчету из матриц цветности (рис. 14.16в).

Отметим ряд возможностей, заложенных в потоке данных стандарта MPEG-2. В заголовке видеопоследовательности, в частности, определяются следующие параметры:

ширина и высота изображения;

скорость воспроизведения кадров;

размер буфера, необходимого для декодирования битового потока;

переопределение матриц квантования (при необходимости).

Заголовок кадра содержит, в частности:

temporal_reference — 10-битовое целое число, оно ставится в соответствие каждому кадру и увеличивается на единицу с каждым кадром; для первого кадра в хронологическом порядке temporal_reference равен нулю; если кадр кодируется как два поля, то temporal_reference одинаково для обоих полей;

picture_coding_type — определяет, является ли кадр I-кадром (внутрикадровое кодирование), P-кадром (предсказанным на основе предыдущего I- или P-кадра) или B-кадром (кодированным с двунаправленным предсказанием).

Порядок следования блоков в макроблоке различен для разных цветовых форматов.

14.4. MPEG-2. Кодирование динамических изображений

Вформате 4 : 2 : 0 макроблок состоит из шести блоков. Он содержит четыре блока яркости YD, и два блока цветности CR и CB в порядке, указанном на рис. 14.17а.

Вформате 4 : 2 : 2 макроблок состоит из восьми блоков. Он содержит четыре YD, два CR и два CB блока в порядке, указанном на рис. 14.17б.

Вформате 4 : 4 : 4 макроблок состоит из двенадцати блоков. Он содержит четыре YD, четыре CR и четыре CB блока в порядке, указанном на рис. 14.17в.

Внутренняя организация макроблоков различна при кодировании кадров построчно или по полям, как показано на рис. 14.18. При кодировании полей блоки яркости группируются по полям: верхние — из первого поля, а нижние — из второго. Блоки цветности располагаются в порядке следования кадров для обоих типов кодирования (для кодирования 4 : 2 : 2 и 4 : 4 : 4 данные цветности также могут расщепляться по полям).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 14.17. Порядок следования

Рис. 14.18. Формирование макроблоков при

блоков в макроблоках при формате

построчном кодировании кадра (а) и при

4 : 2 : 0 (а), при формате 4 : 2 : 2 (б)

независимом кодировании по полям (б)

и при формате 4 : 4 : 4 (в)

 

 

 

 

 

 

 

Взависимости от типа кадра используются различные типы макроблоков.

ВI-кадрах все макроблоки внутрикодированные. В P-кадрах макроблоки могут быть пропущенными, внутрикодированными, кодированными с предсказанием вперед. В В-кадрах кроме типов макроблоков, встречающихся в Р-кадрах, передаются макроблоки, кодированные с двунаправленным предсказанием и кодированные с предсказанием назад.

Макроблоки 16 × 16 разбиваются на блоки 8 × 8. Стандарт использует блочное дискретное косинусное преобразование. После преобразования осуществляется поэлементное квантование коэффициентов ДКП. В формате 4 : 2 : 0 по умолчанию используется две матрицы квантования: для внутрикодированных макроблоков и для всех остальных (рис. 14.19).

В иных форматах используется до четырех матриц — для яркости и для цветности матрицы могут быть различными. Матрицы имеют значения по умолчанию, если не загружены иные.

Глава14. Стандарты кодирования динамических изображений

Рис. 14.19. Матрицы квантования по умолчанию для I-блоков (а) и для P- и B-блоков (б)

Рис. 14.20. Таблицы переупорядочивания коэффициентов ДКП блоков: а — стандартная таблица, б — альтернативная таблица

После квантования блок преобразуется в линейный массив с помощью стандартной или альтернативной таблицы Z-упорядочивания, которые приведены на рис. 14.20.

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

Используется гибридный метод кодирования — длина кода коэффициента определяется предшествующим ему кодом переменной длины с уникальным префиксом, а этот код интерпретируется по одной из стандартных таблиц.

Встандарте заложена возможность использования нескольких типов предсказания и компенсации движения как раздельно, так и в различных комбинациях.

Вто время как в MPEG-1 вводится только один тип предсказания движения для макроблока в целом, в стандарте MPEG-2 предусмотрены четыре варианта:

14.4. MPEG-2. Кодирование динамических изображений

кадровая компенсация движения (frame motion compensation): вычисляется один вектор движения (в P-кадре) или два векторы движения (в B-кадре) для макроблока в целом;

компенсация движения по полям (field motion compensation): вычисляются векторы движения как для верхнего, так и для нижнего полей макроблока, причем для каждого из полей выбирается свое поле сравнения в базовом кадре;

компенсация движения типа 16×8 с двумя векторами движения (16 × 8 motion compensation): вычисляются векторы движения для каждой из двух половин (верхней и нижней) макроблока (используется только для полей);

двухстадийная компенсация движения с уточнением вектора движения (dual prime motion compensation): процедура уточнения вектора движения только для P-макроблока, в которой вектор движения находится для первого поля, предсказание ведется от двух полей базового макроблока, результаты усредняются, и для второго поля вместо полного вектора движения передается малая поправка к вектору движения для первого поля.

Для внутриблочно кодированных макроблоков предсказание не формируется, однако и с этими блоками возможна передача скрытых векторов движения (concealment motion vectors), которые могут быть использованы для маскирования нарушений изображения при появлении ошибки при передаче потока. Конкретный способ использования скрытых векторов движения стандартом не предусмотрен.

ВP- и B-кадрах предсказание производится различным образом. Пропущеный макроблок в P-кадрах при восстановлении копируется из опорного кадра. Предсказанием макроблока в P-кадре, для которого передается информация о векторах движения (macroblock_motion_forward=1), является область 16 × 16 из опорного кадра, смещенная по вектору движения от положения предсказываемого макроблока. В том случае, если компоненты векторов движения нецелые (стандарт определяет векторы с точностью до 1/2 пиксела), производится вычисление промежуточных точек линейной интерполяцией.

ВВ-кадрах пропущенные макроблоки имеют такие же тип, метод предсказания и вектора движения, что и последний не пропущенный, поэтому стандарт не допускает пропуск макроблоков в В-кадрах, следующих сразу за INTRA-макро- блоком. Предсказание вперед или назад для В-кадров осуществляется аналогично предсказанию вперед в Р-кадрах. Для макроблоков с векторами движения

ивперед, и назад предсказание формируется как среднее между предсказанием вперед и предсказанием назад.

Векторы движения кодируются дифференциально по отношению к ранее переданному вектору движения с использованием кодов переменной длины.

Возможная максимальная длина вектора движения может меняться от кадра к кадру для того, чтобы удовлетворить требованиям различных приложений. Спецификация не определяет способа вычисления векторов движения. Стандарт MPEG-1 использует два вектора движения, в MPEG-2 используется до шести векторов на макроблок.

Глава14. Стандарты кодирования динамических изображений

Рис. 14.21. Структура декодирования видеопотока MPEG-2

Декодирование видеопотока MPEG-2

Стандарт MPEG специфицирует требования к так называемому совместимому стандартному декодеру. За исключением обратного косинусного преобразования (ОДКП), для которого стандарт задает лишь требования к точности преобразования, но не к его конкретной реализации, процесс декодирования определен так, чтобы все декодеры давали численно идентичные результаты.

Упрощенная структура декодирования представлена на рис. 14.21.

Процесс восстановления изображения из кодированного потока состоит из следующих основных этапов: восстановление блоков и макроблоков, формирование предсказания и суммирование с восстановленными «остатками», несколько контрольных процедур, ограничивающих получаемые значения.

При восстановлении блоков производится достраивание строки восстановленных коэффициентов косинусного преобразования до длины 64 нулевыми значениями, обратное переупорядочивание строки из 64 коэффициентов в матрицу размера 8 × 8.

14.4. MPEG-2. Кодирование динамических изображений

Полученная на предыдущем шаге матрица подвергается процедуре обратного квантования. Затем к матрице применяется процедура обратного дискретного косинусного преобразования. Окончательное восстановление макроблоков заключается в суммировании «остатков», полученных при декодировании блоков, с предсказанием. В случае внутрикодированных макроблоков предсказание не производится.

Кадры, поступающие на декодер, находятся не в хронологическом порядке, а в порядке, необходимом декодеру для последовательного восстановления кадров. Например, для восстановления В-кадра с двунаправленным предсказанием декодеру необходима информация как о предыдущем, так и о последующем кадре, и поэтому последующий опорный кадр должен быть получен декодером раньше. Процедура переупорядочивания стандартом не определяется. В памяти постоянно сохраняется до трех кадров: один — текущий и два для формирования предсказания.

Каждая группа кадров состоит из нескольких кадров. Она начинается и заканчивается опорными кадрами, между которыми находятся В-кадры (В-кадры хронологически могут находиться и перед первым опорным кадром). В группе первым на декодер поступает опорный кадр, открывающий группу. При декодировании в памяти сохраняются два последних опорных кадра, которые используются для предсказания В-кадров.

14.4.7.Структура битового потока видеопоследовательности стандарта MPEG-2

Уровень видеопоследовательности (video sequence layer) содержит заголовок и расширение заголовка видеопоследовательности. Синтаксис видеопотока MPEG-2 обязательно включает расширение заголовка видеопоследовательности, в противном случае видеопоток должен соответствовать стандарту MPEG-1.

Заголовок видеопоследовательности имеет следующую структуру:

заголовок_видеопоследовательности()

Количество битов

{

 

код_заголовка_видеопоследовательности

32

размер_по_горизонтали

12

размер_по_вертикали

12

код_отношения_размеров

4

код_частоты_кадров

4

битовый_поток

18

маркер

1

код_видеобуфера

10

флаг_ограничения_параметров

1

загружаемая_матрица_I

1

if (загружаемая_матрица_I)

 

матрица_I [64] 8 · 64

 

загружаемая_матрица_PB

1

if (загружаемая_матрица_PB)

 

матрица_PB[64] 8 · 64

 

следующий_стартовый_код()

 

}