Опрос

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

Новички

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

Использование векторов смещений блоков

Простейший способ учитывать подобие соседних кадров - это вычитать каждый блок сжимаемого кадра из соотвйтствующего блока предыдущего. Однако более гибким является алгоритм поиска векторов, на которые сдвинулись блоки текущего кадра по отношению к предыдущему. Для каждого блока в изображении мы находим блок, близкий по некоторой метрике (на­пример, по сумме квадратов разности пикселов), в предыдущем кадре в не­которой окрестности текущего положения блока. Если минимальное рас­стояние по выбранной метрике с блоками в предыдущем кадре больше вы­бранного порога, блок сжимается независимо (рис. 1.2.).

Таким образом, вместе с каждым блоком в поток теперь сохраняются координаты смещения максимально похожего блока в предыдущем I- или Р-кадре, либо признак того, что данные сжаты независимо. Эти координаты задают вектор смещения блока (motion vector). В ситуациях, когда камера наезжает на объект или дает панораму, использование векторов смещений блоков позволяет значительно уменьшить амплитуду разности кадров и, как следствие, значительно поднять степень сжатия.

Если мы проанализируем реальные фильмы, то окажется, что часто блок сдвигается не на кратное число пикселов, а, например, на 10.4 пиксела (ка­мера быстро движется вправо, план съемки сдвигается равномерно и прохо­дит полный кадр размером 352x240 за 1.35 с). При этом оказывается, что для повышения степени сжатия выгодно строить 4 области поиска векторов смещений: исходную, сдвинутую на полпиксела по горизонтали, сдвинутую на полпиксела по вертикали и сдвинутую на полпиксела по горизонтали и по вертикали (по диагонали), которые строятся с помощью достаточно бы­стрых алгоритмов билинейной или кусочно-линейной аппроксимации. Этот прием также позволяет уменьшить разность между блоками и повысить степень сжатия при минимальной дополнительной информации, которую надо сохранять в файл (плюс 2 бита на каждый блок). Правда, строить ап­проксимированные блоки придется и при декомпрессии, однако это сравни­тельно дешевая по времени операция, которая весьма незначительно увели­чивает общее время декомпрессии.

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