Опрос

Какой архиватор наиболее эффективный?:

Новички

Виктор Васильев
Юрий Антонов
Сергей Андреевич
Генадий
Avanasy

Описание алгоритма компрессии

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

Для того чтобы удовлетворить противоречивым требованиям и увели­чить гибкость алгоритма, рассматривается 4 типа кадров:

■ 1-кадры - кадры, сжатые независимо от других кадров (I-Intra pictures);

■ Р-кадры- сжатые с использованием ссылки на одно изображение (Р-Predicted);

■ В-кадры- сжатые с использованием ссылки на два изображения (В-Bidirection);

■ DC-кадры - независимо сжатые с большой потерей качества (использу­ются только при быстром поиске).

1-кадры обеспечивают возможность произвольного доступа к любому кадру, являясь своеобразными входными точками в поток данных для деко­дера. Р-кадры используют при архивации ссылку на один I- или Р-кадр, по­вышая тем самым степень сжатия фильма в целом. В-кадры, используя ссылки на два кадра, находящиеся впереди и позади, обеспечивают наи­высшую степень сжатия. Сами в качестве ссылки использоваться не могут. Последовательность кадров в фильме может быть, например, такой: IBBPBBPBBPBBIBBPBB... Или, если мы не экономим на степени сжатия, такой, как на рис. 1.1

Рис. 1.1.1-кадры - независимо сжатые (I-Intrapictures); Р-кадры - сжатые

с использованием ссылки на одно изображение (Р-Predicted); В-кадры - сжатые

с использованием ссылки на два изображения (B-Bidirection)

Частота I-кадров выбирается в зависимости от требований на время про­извольного доступа и надежности потока при передаче через канал с ошиб­ками. Соотношение Р- и В-кадров подбирается, исходя из требований к ве­личине компрессии и ограничений декодеру. Как правило, декодирование В-кадров требует больше вычислительных мощностей, однако позволяет повысить степень сжатия. Именно варьирование частоты кадров разных ти­пов обеспечивает алгоритму необходимую гибкость и возможность расши­рения. Понятно, что для того, чтобы распаковать В-кадр, мы должны уже распаковать те кадры, на которые он ссылается. Поэтому для последова­тельности IBBPBBPBBPBBIBBPBB кадры в фильме будут записаны так: 0**312645..., где цифры- номера кадров, а звездочкам соответствуют либо В-кадры с номерами -1 и -2, если мы находимся в середине потока, либо пустые кадры (ничего), если мы в начале фильма. Подобный формат обла­дает достаточно большой гибкостью и способен удовлетворять самым раз­личным наборам требований.

Одним из основных понятий при сжатии нескольких изображений явля­ется понятие макроблока. При сжатии кадр из цветового пространства RGB переводится в цветовое пространство YUV. Каждая из плоскостей сжимае­мого изображения (Y, U, V) разделяется на блоки 8x8, с которыми работает ДКП. Причем плоскости U и V, соответствующие компоненте цветности, берутся с разрешением в 2 раза меньшим (по вертикали и горизонтали), чем исходное изображение. Таким образом, мы сразу получаем сжатие в 2 раза, пользуясь тем, что глаз человека хуже различает цвет отдельной точки изо­бражения, чем ее яркость (подробнее об этих преобразованиях смотрите в описании алгоритма JPEG). Блоки 8x8 группируются в макроблоки. Макро­блок - это группа из четырех соседних блоков в плоскости яркостной ком­поненты Y (матрица пикселов 16x16 элементов) и два соответствующих им по расположению блока из плоскостей цветности U и V. Таким образом, кадр разбивается на независимые единицы, несущие полную информацию о части изображения. При этом размер изображения должен быть кратен 16.

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

Алгоритм сжатия отдельных кадров в MPEG похож на соответствующий алгоритм для статических изображений - JPEG. Если говорить коротко, то сам алгоритм сжатия представляет собой конвейер преобразований. Это дискретное косинусное преобразование исходной матрицы 8x8, квантование матрицы и вытягивание ее в вектор vll,vl2,v21,v31,v22, ..., v88 (зигзаг-сканирование), сжатие вектора групповым кодированием и, наконец, сжатие по алгоритму Хаффмана.