
- •Лабораторная работа № 10
- •1 Основные понятия сжатия видео
- •Требования приложений к алгоритму
- •Определение требований
- •2 Обзор стандартов
- •3 Базовые технологии сжатия видео Описание алгоритма компрессии
- •Общая схема алгоритма
- •Использование векторов смещений блоков
- •Возможности по распараллеливанию
- •Другие пути повышения степени сжатия
- •Motion-jpeg
- •Сравнение стандартов
- •Изучив теорию и методические указания к проведению лр, сформулировать и письменно ответить на вопросы для защиты данной лабораторной работы.
- •Вопросы для защиты:
Общая схема алгоритма
В целом весь конвейер преобразований можно представить так:
Подготовка макроблоков. Для каждого макроблока определяется, каким образом он будет сжат. В I-кадрахвсе макроблоки сжимаются независимо. ВP-кадрахблок либо сжимается независимо, либо представляет собой разность с одном из макроблоков в предыдущем опорном кадре, на который ссылаетсяP-кадр.
Перевод макроблока в цветовое пространство YUV. Получение нужного количества матриц 8х8.
Для P-блоковиB-блоковпроизводится вычисление разности с соответствующим макроблоком в опорном кадре.
ДКП
Квантование.
Зигзаг-сканирование.
Групповое кодирование.
Кодирование Хаффмана.
При декодировании весь конвейер повторяется для обратных преобразований, начиная с конца.
Использование векторов смещений блоков
Простейший способ учитывать подобие соседних кадров - это вычитать каждый блок сжимаемого кадра из соответствующего блока предыдущего. Однако более гибким является алгоритм поиска векторов, на которые сдвинулись блоки текущего кадра по отношению к предыдущему. Для каждого блока в изображении мы находим блок близкий по некоторой метрике (например, по сумме квадратов разности пикселей) в предыдущем кадре в некоторой окрестности текущего положения блока. Если минимальное расстояние по выбранной метрике с блоками в предыдущем кадре больше выбранного порога - блок сжимается независимо (Рисунок 15.2).
Рисунок 15.2.
Таким образом, вместе с каждым блоком в поток теперь сохраняются координаты смещения максимально похожего блока в предыдущем I-илиP-кадре, либо признак того, что данные сжаты независимо. Эти координаты задают вектор смещения блока (motion vector). В ситуациях, когда камера наезжает на объект или дает панораму, использование векторов смещений блоков позволяет значительно уменьшить амплитуду разности кадров, и как следствие - значительно поднять степень сжатия.
Если мы проанализируем реальные фильмы, то окажется, что часто блок сдвигается не на кратное число пикселов, а, например, на 10.4 пиксела (камера быстро движется вправо, план съемки сдвигается равномерно и проходит полный кадр размером 352х240 за 1.35 секунды). При этом оказывается, что для повышения степени сжатия выгодно строить 4 области поиска векторов смещений: исходную, сдвинутую на полпиксела по горизонтали, сдвинутую на полпиксела по вертикали и сдвинутую на полпиксела по горизонтали и по вертикали (по диагонали), которые строятся с помощью достаточно быстрых алгоритмов билинейной или кусочно-линейной аппроксимации. Этот прием также позволяет уменьшить разность между блоками и повысить степень сжатия при минимальной дополнительной информации, которую надо сохранять в файл (плюс 2 бита на каждый блок). Правда строить аппроксимированные блоки придется и при декомпрессии, однако это сравнительно дешевая по времени операция, которая весьма незначительно увеличивает общее время декомпрессии.
Также надо понимать, что алгоритм поиска оптимальных векторов смещения заключается, вообще говоря, в переборе. Существуют различные методы уменьшения этого перебора, и настройки видео-кодеков, регулирующие скорость сжатия нередко варьируют именно параметры метода перебора.