Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Алгоритм распознавания направления движения


Автор: MoebiusCat 14.6.2011, 22:06
Я недавно занимаюсь обработкой видео (алгоритмы на Матлабе), и в качестве упражнения я решила написать алгоритм, который убирает дрожание камеры/следит за каким-то движущимся объектом.

Я написала функцию, которая получает последовательность кадров и координаты "неподвижной" области, а потом распознаёт её в каждом кадре (регистрация) и сдвигает всё на нужное расстояние. Это работает, но есть существенные недостатки:
  •  Справляется только с движением вправо-влево и вверх-вниз, но не в глубину (зум)
  •  Не справляется с поворотами
  •  "Неподвижные" координаты надо указывать вручную
  •  Тяжёлый - нужно обходить всю картинку с регистрацией
Кроме того, мне сказали, что есть быстрый и полностью автоматический алгоритм, указывающий вектор движения для каждого блока, скажем, 8 на 8. Я могу придумать только такую реализацию: разделить на блоки и отслеживать каждый из них, как я сделала в своеё функции, но это о-очень медленно... Полагаю, что надо вычесть n-ный кадр из n+1-го, а потом сделать что-то умное, но мне самой не догадаться...   smile 

Автор: VictorTsaregorodtsev 14.6.2011, 23:44
>"Неподвижные" координаты надо указывать вручную

Если мне не изменяет память (всё же по текущему проекту обработки видео найдено-прочитано полторы сотни статей), от этого не избавиться никак. Комп не может сам отделить фон от объекта интереса и может вместо отслеживания объекта отслеживать фон, вернее, изменение границ фоновой области при движении объекта.

>в глубину (зум)
>с поворотами

Дофига подобных работ (алгоритмов). Из известных уже десяток лет см., например, статью Comaniciu, Ramesh, Meer "Real-time tracking of non-rigid objects using mean shift". Из недавних - статьи by Zdenek Kalal (у него и проги были как раз на матлабе, см. http://info.ee.surrey.ac.uk/Personal/Z.Kalal/tld.html).

Автор: MoebiusCat 17.6.2011, 23:50
Цитата

Дофига подобных работ (алгоритмов). Из известных уже десяток лет см., например, статью Comaniciu, Ramesh, Meer "Real-time tracking of non-rigid objects using mean shift". Из недавних - статьи by Zdenek Kalal (у него и проги были как раз на матлабе, см. тут).

Большое спасибо, читаю. Да, я знаю, что дофига, но я пока не нашла правильные места в интернете, где надо искать статьи.


Цитата

Если мне не изменяет память (всё же по текущему проекту обработки видео найдено-прочитано полторы сотни статей), от этого не избавиться никак. Комп не может сам отделить фон от объекта интереса и может вместо отслеживания объекта отслеживать фон, вернее, изменение границ фоновой области при движении объекта.

Мне на днях рассказали про один метод, который называется optical flow. Он позволяет увидеть направление движения для каждого блока. Я слышада об этом методе раньше, но только понаслышке (только то, что он делает, но не как он это делает) , кроме того, я не знала, как он называется. 

Этот метод работает так: просто-напросто вычисляем производные "трёхмерной функции" право-лево - верх-низ - время. И всё! Как я не догадалась! Я думала о чём-то подобном, правда, относительно http://forum.vingrad.ru/forum/topic-331856/kw-%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-frame-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D0%BE%D0%BB%D1%8F%D1%86.html: я хотела интерполировать отсутствующие кадры, но не очень знала, как это сделать.

Кстати, если подумать, этот метод также может дать ответ на вопрос, что фон и что объект: можно посмотреть на множества блоков, "едущих" в одинаковых направлениях, а потом в каждом из таких множеств выделить компоненты связности, они и будут объектами (я беру очень упрощённую модель: двухмерные объекты, нет поворотов, объекты не "шевелятся", то есть все точки каждого объекта едут в одном направлении). Точнее, это, конечно, не сможет указать, какой именно из "объектов" есть фон (например, кто является фоном в фильме, где камера следит за едущим автомобилем, занимающим почти весь кадр?), но в некоторых случаях, по моему, это можно понять (с помощь всяких дополнительных признаков). 

Автор: x128 18.6.2011, 09:49
возможно будет полезно:
http://ru.wikipedia.org/wiki/Компенсация_движения
http://cgm.computergraphics.ru/content/view/76

Автор: VictorTsaregorodtsev 19.6.2011, 21:19
Цитата(MoebiusCat @  17.6.2011,  23:50 Найти цитируемый пост)
может дать ответ на вопрос, что фон и что объект

Ну, простые задачи решаются без проблем. Вернее, можно ставить решать задачу выделения из картинки фона и объектов на нём без предварительной съемки собственно эталонного фона. Если камера неподвижна и с постоянным фокусом, и если скорость изменения собственно фона (из-за изменения освещенности и т.д.) гораздо меньше, чем скорость движения объектов по нему - то фон можно поймать без проблем на всём кадре (естественно, требуется время, за которое объекты сдвинутся на новые позиции, т.е. "раскроют" ранее закрытые области фона). 
См, например, статьи Mickael Pic, Luc Berthouze and Takio Kurita "Adaptive background estimation", Fatih Porikli "Multiplicative Background-Foreground Estimation Under Uncontrolled Illumination using Intrinsic Images".

А вот если камера поворотная/зумирующая и картинка сложная (как пример - слежение за игроком в амерофутбол в указанной статье Comaniciu, Ramesh, Meer "Real-time tracking of non-rigid objects..." - то тут без явного указания координат куска, за которым надо следить, не обойтись. Ведь силуэт игрока может быть первоначально "склеен" с силуэтом другого - и как делить этот суммарный силуэт при "разбегании" игроков? Размножать отслеживаемые объекты? А если ещё и фон существенно переменный во времени и/или пространстве (а не однородный, как зелёное футбольное поле) - то вообще швах с автоделением на объекты и фон.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)