Среда, 18.10.2017, 05:07
Мой сайт ГлавнаяРегистрацияВход
Приветствую Вас Гость | RSS
Меню сайта
Мини-чат
Наш опрос
Оцените мой сайт
Всего ответов: 0
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
  
Главная » 2014 » Январь » 17 » Оценка движения видеокадра
14:06
 

Оценка движения видеокадра

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

Как известно, видео представляет собой не что иное, как последовательность кадров (изображений). В хорошем качестве и высоком разрешении каждый такой кадр может содержать несколько мегабайт информации. Представьте, тысяча кадров содержит несколько гигабайт информации! И это всего лишь 30-40 секунд видео. Никакого жесткого диска не хватит, чтобы уместить двух часовой фильм в high definition разрешении.

Но как же устранить этот недостаток?

Вспомним, что за секунду перед глазом человека проносятся 25-30 кадров. Насколько идентичная информация содержится в них? Максимально идентичная. Если за это время не происходит полная смена сцены, не имеет смысла кодировать каждый кадр по отдельности. Именно здесь возникает понятие временной избыточности.

Устранение временной избыточности – один из типов алгоритмов оценки движения. В последовательных видеокадрах, в случае движения, довольно много одинаковой информации. И для того, что минимизировать количество передаваемой информации по каналам связи, блочные стандарты видеокодирования (MPEG2, VC1, H264) кодируют разницу между блоками вместо оригинального блока.

Алгоритм оценки движения формирует ядро любого видео кодека. Как правило, оценка движения используется во всех современных стандартах видеокодирования, для нахождения наилучшего совпадения блока пикселей в сжимаемом кадре с блоком пикселей на опорном (референсном) кадре. Это позволяет не кодировать весь блок целиком, а закодировать лишь остаточную разницу между этим блоком и наилучшим совпадением с ним на опорном кадре. Движение представляется в виде вектора с координатами x, y (смещение пикселя или блока пикселей с текущей позиции). Вектор движения кодируется вместе с остаточной разницей так, чтобы декодер в будущем мог восстановить кадр. Оценку движения также используют в приложениях видео стабилизации и определения движения.



На рисунке 1 изображена структура MPEG-1 и MPEG-2 енкодеров. Существуют два основных компонента в видео кодировании. Первое это дискретно-косинусное преобразование (DCT), позволяющее избавиться от пространственной избыточности статической картинки. Второе – оценка движения, которая, как было уже описано, сокращает временную избыточность следующих друг за другом видеокадров. Когда енкодер получает на вход видео, оценка движения и компенсация движения уменьшают объём одинаковой информации между соседними кадрами. Затем DCT и квантайзер минимизируют одинаковую информацию на текстуре. Квантовочные коэффициенты, трансформированные и квантованные коэффициенты и вектора движения поступают на энтропийный енкодер для финального сжатия. Чем лучше была произведена оценка движения, тем меньше работы достанется DCT. То есть лучшая оценка движения способствует лучшей компрессии видео.

Существуют различные методы оценки движения. Так называемые пиксельно-рекурсивные методы, позволяют вычислять вектор движения для каждого пиксела по отдельности. Отметим технику phase plane correlation, которая генерирует вектора движения исходя из корреляции между текущим фреймом и ссылочным. Однако, наиболее популярными являются алгоритмы блочного совпадения (Block Matching Algorithm - BMA).

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

иллюстрация BMA алгоритма

BMA алгоритм иллюстрирован на рисунке 2. Текущий кадр разбит на блоки пикселей и оценка движения производится для каждого блока отдельно. Результатом работы алгоритма для данного блока пикселей является нахождения наиболее похожего на него блока пикселей на ссылочном кадре и вычисление вектора движения или смещения текущего блока относительно найденного.

Таким образом, вектор движения представляет собой горизонтальное и вертикальное смещение на координаты x, y текущего блока пикселей:



где I это интенсивность пикселя в позиции вектора x в кадре n и d это смещение (вектор движения) относительно первоначальной позиции на n+1 кадре.

Существуют различные критерии определения совпадения блоков пикселей (Displaced Frame Difference - DFD), минимизирующие данную функцию:



Наиболее популярные:

· суммарная квадратичная ошибка (Sum of Square Error - SSE)



· и суммарная абсолютная разница (Sum of Absolute Difference - SAD)



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

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

Алгоритм полного поиска (Full Search – FS) относится к алгоритмам типа BMA. Алгоритм работает с каждым возможным блоком пикселей внутри области поиска. Именно поэтому результатом работы является наилучший вектор движения. Метод дает наилучшую возможную остаточную разность для видео компресии, но обладает высокой вычислительной трудностью. Это лучший из возможных алгоритмов для поиска совпадения блоков, который, к тому же отлично ложится на архитектуру многопоточности GPU. Именно по этой причине я остановил свой выбор на нем.

В следующих заметках мы рассмотрим параллелизацию алгоритма на CPU и GPU, а также введем понятие «реального движения».

Просмотров: 93 | Добавил: sewity | Рейтинг: 0.0/0
Всего комментариев: 0
Поиск
Календарь
«  Январь 2014  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2017Бесплатный конструктор сайтов - uCoz