Сжимаем видео - прореживание, вычитание, компенсация движения, порог поиска
Для начала рассмотрим два интуитивных метода сжатия видео.
Прореживание. Кодер выбирает кадры через одного и записывает их в сжатый поток. Это приводит к фактору сжатия 2. Декодер принимает кадры и дублирует их подряд два раза. Вычитание. Кадр сравнивается со своим предшественником. Если разница между ними мала (всего в нескольких пикселах), то кодер кодирует только эти отличающиеся пикселы, то есть, записывает в выходной поток три числа для каждого из отличающихся пикселов: его координаты и разность пикселов двух кадров. Если различие между кадрами велико, то в файл пишется текущий кадр в «сыром» виде. Вариант с частичной потерей для метода вычитания анализирует величину расхождения пикселов. Если разность между двумя значениями меньше некоторого порога, то пикселы не считаются разными.
Вычитание по блокам. Этот метод является развитием метода вычитаний. Изображение делится на блоки пикселов и каждый блок В сравнивается с соответствующим блоком Р предыдущего кадра. Если число различающихся пикселов этих блоков не превосходит некоторую заданную величину, то блок В сжимается в виде записи координат отличных пикселов и значений их разностей. Преимущество такого подхода проявляется в том, что координаты в блоке являются малыми числами, и такие числа будут записаны всего один раз для всего блока. Недостаток такого решения состоит в том, что в противном случае приходится записывать в файл все пикселы, в том числе и не меняющиеся. Этот метод весьма чувствителен к размеру блока.
Компенсация движения. Просмотр любого фильма наводит на мысль, что разница между последовательными кадрами мала из-за движения на сцене, перемещения камеры или в силу обеих причин. Это свойство можно использовать для улучшения сжатия. Если кодер обнаружил, что часть Р предыдущего кадра, как одно целое, переместилась в новое положение на текущем кадре, то Р можно сжать, записав следующие три компонента: предыдущее местоположение, новое местоположение и информацию о границе области Р.
В принципе, эта перемещающаяся часть может иметь любую форму. На практике мы ограничены блоками с равными сторонами (обычно это квадраты или прямоугольники). Кодер сканирует текущий кадр блок за блоком. Для каждого блока В на предыдущем кадре делается поиск тождественного блока С (если сжатие без потерь) или близкого блока (если сжатие с потерями). Если такой блок найден, то кодер записывает разность между его прошлым и настоящим положением. Эта разность имеет вид (Сх-Вх,Су-Ву) = (Ьх,Ау), и она называется вектором перемещения.
Компенсация движения будет эффективной, если объекты просто перемещаются по сцене, но не удаляются, приближаются или поворачиваются. Существенное изменение освещения сцены от кадра к кадру также снижает эффективность этого метода. Обычно метод компенсации движения используется для сжатия с потерями. В следующих абзацах детально обсуждаются основные нюансы этого метода. Сегментация кадров. Текущий кадр разбивается на неперекрывающиеся равносторонние блоки. Блоки могут быть квадратными или прямоугольными. Во втором случае предполагается, что движение на экране происходит в основном по горизонтали, и тогда горизонтальные блоки уменьшают число векторов перемещения без ухудшения коэффициента сжатия. Размер блока очень важен, поскольку большие блоки уменьшают вероятность обнаружения совпадений, а маленькие блоки приводят к большому числу векторов перемещения. На практике применяются блоки, размеры которых являются степенями числа 2, например, 8 или 16; это упрощает программное обеспечение.
Порог поиска. Каждый блок В текущего кадра сначала сравнивается со своим двойником на предыдущем кадре. Если они совпадают или величина разности между ними меньше некоторого наперед заданного порога, то кодер считает, что данный блок не двигался. Поиск блока. Эта процедура обычно занимает много времени, поэтому ее следует тщательно оптимизировать. Если В - текущий блок текущего кадра, то необходимо сделать поиск совпадающего или близкого к нему блока на предыдущем кадре. Обычно этот поиск делается в небольшой области (называемой областью поиска) вокруг В, которая задается с помощью параметров максимального смещения dx и dy. Эти параметры определяют максимальное допустимое расстояние по горизонтали и вертикали в пикселах между В и его копией на предыдущем кадре. Если блок В - это квадрат со стороной 6, то область поиска состоит из (6 + 2dx)(b+2dy) пикселов (рис 5.3), по которым можно построить (2dx+ \)(2dy+\) различных, частично перекрывающихся квадратов размера b х b. Значит, число возможных блоков-кандидатов в этой области пропорционально dxdy.
- RSS
Наши услуги: