отслеживание одного человека из видео последовательности - PullRequest
5 голосов
/ 02 февраля 2012

В рамках моей дипломной работы мне нужно создать программу для отслеживания человека из видео или последовательности изображений, например, набор данных KTH или IXMAS с предположениями :

  • Подсветка остается неизменной
  • На сцене появляется только один человек

Программу нужно выполнять в режиме реального времени

Я много искал, но все еще не могу найти хорошее решение.

Пожалуйста, предложите мне подходящий метод или существующую подходящую программу.

Ответы [ 4 ]

11 голосов
/ 02 февраля 2012

Случай 1 - Если камера статическая

Если камера статическая, очень просто отследить одного человека.

Вы можете применить метод, который называется вычитанием фона,

  1. Здесь, для получения лучших результатов, вам нужно изображение с камеры без людей.Это фон.(Это также можно сделать, даже если у вас нет этого фонового изображения. Но если оно у вас есть, лучше. В конце я скажу, что делать, если фонового изображения нет)

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

  3. Вычтите фоновое изображение из кадра.

  4. Если рамка не имеет изменений по сравнению с фоновым изображением (т.е. без человека), вы получите черное изображение (конечно, будет некоторый шум, мы можем его удалить).Если есть изменения, то есть человек вошел в кадр, вы получите изображение с человеком и фоном как черный.

  5. Теперь пороговое значение для изображения для подходящего значения.

  6. Применить некоторую эрозию, чтобы удалить мелкий зернистый шум.После этого примените расширение.

  7. Теперь найдите контуры.Скорее всего, будет один контур, т.е. человек.

  8. Найдите центроида или все, что вы хотите, чтобы этот человек отслеживал.

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

Вот реализация вышеописанного метода с использованием cvRunningAvg.

Случай 2- Камера не статична

Здесь вычитание фона не даст хорошего результата, поскольку вы не можете получить фиксированный фон.

Затем OpenCV поставляется с образцом для образца обнаружения людей.Используйте его.

Это файл: peopledetect.cpp

Я также рекомендую вам посетить этот SOF, который имеет дело почти с той же проблемой: Как я могуобнаруживать и отслеживать людей, использующих OpenCV?

3 голосов
/ 10 февраля 2012

Приведенный выше метод: сработает простая разность кадров с последующим расширением и эрозией, в случае простой чистой сцены с движением человека, идущего без каких-либо других изменений движения или освещения.Также вы делаете обнаружение каждого кадра, в отличие от отслеживания.В этом конкретном сценарии отслеживать его может быть не намного сложнее.Направление движения и скорость: вы можете просто запустить Lucas Kanade на разностных изображениях.

По сути, вам нужен детектор людей, за которым следует трекер.Трекер может быть либо на основе точек (Lucas Kanade или Horn and Schunck), либо с использованием фильтра Калмана, либо любого из этих видов трекинга для ограничивающих рамок или блобов.

Многие проблемы со зрением некорректны, некоторое количество структур / ограничений помогает решить их значительно быстрее.Вот несколько вопросов, которые можно задать:

  1. Камера движется: не совсем легко, да: гораздо сложнее, именно то, что работает, зависит от других условий.
  2. Является ли сцена постоянной, за исключением человека
  3. Является ли человек лицом к лицу / лицом к лицу большую часть времени: обнаружение с использованием альта-джона или тренировка одного (adaboost с Haar или аналогичными функциями) длялицо лицом
  4. Насколько пространственно точным он должен быть, будет ли ограничивающий прямоугольник или вам нужен контур: ограничивающий прямоугольник: просто ищите (разумно :)) в окрестности с SAD (сумма разностей Abs),Контур: более жесткий, используйте контурные трекеры.
  5. Вам нужен «треклет» или только просто положение человека в каждом кадре, временная точность?
  6. О каком разрешении мы говорим здесь, поскольку вам нужно реальное время:
  7. Сцена редка, как последовательности, или она будет загромождена?
  8. Есть ли другие движенияв последовательности?
  9. Оффлайн или онлайн?
3 голосов
/ 02 февраля 2012

Одним из возможных решений является использование алгоритма отслеживания характерных точек. Посмотрите на эту книгу: Лаганер Роберт - Руководство по программированию приложений OpenCV 2 Computer Vision - 2011 п. 266

Полный алгоритм уже реализован в этой книге с использованием opencv.

2 голосов
/ 02 февраля 2012

Если вы разрабатываете в .NET, вы можете использовать платформу Aforge.NET.

http://www.aforgenet.com/

Я был постоянным посетителем форумов и, похоже, помню, что многие люди используют его для отслеживания людей.

Я также использовал фреймворк для других не связанных с этим целей и могу сказать, что очень рекомендую его для простоты использования и мощных функций.

...