2013-04-08 2 views
9

Я нахожусь на отслеживании людей в компьютерном зрении. У меня есть наблюдения (blob как результат обнаружения blob после вычитания фона), и я хочу сделать вывод об объектах, которые произвели эти наблюдения.Фильтр частиц для отслеживания нескольких объектов

У меня проблема с некоторыми фильтрами фильтра Калмана. И это совершенно ясно для меня, но моя проблема - отслеживание нескольких объектов: моя проблема в том, что иногда наблюдения неполные/шумные. Позвольте мне объяснить лучше. В тесте с ясными наблюдениями у меня есть 1 blob для каждого человека. Фильтр Калмана может помочь мне сгладить шумный путь человека в сглаженную кривую. Но это не моя проблема; Проблема в том, что иногда обнаружение blob не идеально, и у меня есть 2 капли для 1 человека (например, если человек, которого я хочу отслеживать, одевает футболку того же цвета фона), или иногда у меня есть 1 blob для 2 лиц (например, если 2 человека обнимаются или находятся слишком близко друг от друга).

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

В любом случае, я до сих пор не понимаю, как фильтр частиц может помочь мне в обнаружении случаев, когда 2 капли соответствуют 1 объекту или 1 блоку соответствуют 2 объектам.

Может кто-нибудь помочь в понимании этой проблемы?

ответ

-2

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

В конце концов, я повторно применил фильтр частиц на основе гистограммы, активированный обнаружением объекта.

Если кому-то это интересно, просто спросите как комментарий!

+0

Меня интересует, что –

+0

@nkint, как вы это сделали, не могли бы вы объяснить или поделиться им? – Arjun

+1

У меня больше нет кода, но его нетрудно реализовать в opencv .. есть некоторая реализация с opencv + python на github – nkint

7

Ну, во-первых, проект OpenCV VideoSurveillance - это хороший способ начать решать ваши вопросы.

Это ассоциация по обнаружению данных, как вы сказали, вы делаете. Кроме того, она обрабатывает ложные положительные эффекты (2 блоба до 1 объекта, как вы сказали) с помощью упрощенного механизма (инициализация основана на пороге кадра и удалении). Другая проблема, как вы упомянули, примерно 1 blob, соответствующая двум объектам, обычно называется окклюзией (используется термин «коллизия» в проекте VideoSurveillance, но в настоящее время он устарел). VideoSurveillance использует реализацию фильтра частиц, основанную на 3D-графическом гистограмме, чтобы решить эту ситуацию.

Просто объясните: Как вы можете различить две разные цели на основе их внешнего вида (их одежды)? Вы можете сохранить их цветовую гистограмму и использовать ее позже в будущих кадрах, не так ли? Но как вы выполняете поиск? Вы можете либо искать все возможные центроиды в следующем кадре, либо использовать позволяет сказать 200 случайных точек, разбросанных вокруг области, в которой вы считаете свой объект. Эти 200 точек - частицы. Как они работают? Они сравнивают площадь, в которой они сосредоточены, и создают вероятность того, что объект существует. Чем ближе они, тем больше вероятность. В конце вы суммируете все возможности и находите «средний» центр.

Простыми словами одежда каждой цели смоделирована внутри функции вероятности, а вычисления в реальном времени достигаются благодаря идее фильтрации частиц.

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

Редактировать: Как это может быть полезно для отслеживания с несколькими объектами? Предполагая, что у нас есть простой трекер с ассоциацией данных, предположим, что два объекта собираются «столкнуться». Трекер работает нормально до тех пор, пока объекты не будут объединены. Во время «слияния» трекер видит только один объект. Другая потеряна.Через некоторое время они разбиваются, и трекер обнаруживает старый объект как новый! Как мы можем это исправить? Начнем с моделирования частиц и моделирования внешнего вида на этот раз:

  • Перед слиянием у нас есть 2 объекта, движущихся друг к другу. Объекты независимы, и трекер может их четко видеть. За это время разработчик внешнего вида (механизм, который «запоминает», как выглядит объект), изучает, как выглядят эти два объекта. Конечно, по мере продвижения кадров оба объекта слегка меняют внешний вид. Вот почему модельер имеет «скорость обучения», которая позволяет ему адаптировать свою «память» по прошествии времени.

  • Во время слияния на этот раз мы поставили трекер более терпеливым и не убивали второй объект так легко, как раньше. Трекер позволяет обеим объектам быть активными. Незакрытый объект успешно отслеживается по-прежнему, а другой ограничивающий объект объекта снова пытается переместить его. Если нам повезет *, через короткое время окклюдированный (скрытый) объект снова появится (раскол), и рамка будет притягиваться туда благодаря частицам.

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

+0

Благодарим вас за ответ. я получил довольно хорошую концепцию фильтрации частиц, но я до сих пор не понимаю, как это может быть полезно для многоцелевого отслеживания или ассоциации данных. – nkint

+0

ok. гораздо более ясно о гистограмме и внешности. теперь у меня есть еще одно сомнение.я могу объяснить все в этом предложении: «фильтр частиц даст мне мультимодальное распределение, и каждый способ распределения является движущимся объектом», правильно? или: у меня есть частицы в изображении, если я их кластер, то полученные центроиды являются движущимся объектом. это правильно? – nkint

+0

@William Эта ссылка: http://opencv.willowgarage.com/wiki/VideoSurveillance больше не работает. –

2

Я думаю, что ключевым словом является «фрагментация». пример бумаги

http://people.csail.mit.edu/cielbleu/pubs/BoseEtalCVPR07Multiclass.pdf

+0

Я знаю эту бумагу, но это пакетная процедура. так или иначе, он не использует фильтр частиц. в любом случае, спасибо за ответ! – nkint

2

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

Что вам нужно, это объединенный фильтр ассоциативной ассоциации вероятностей (JPDAF), который будет связывать каждое обнаружение с дорожкой мягким способом (одно обнаружение относится к X% к первому треку, Y% - к второй дорожке ...).

Основным алгоритмом отслеживания может быть фильтр частиц или фильтр Калмана.

Взгляните на реализацию JPDAF на C#, реализованную для Kalman и фильтр частиц. В это время рабочие образцы предназначены для фильтра Калмана и частиц, JPDAF поступит позже, но он будет реализован и готов.

Accord.NET Расширения библиотеки: https://github.com/dajuric/accord-net-extensions

Смежные вопросы