roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 01:34

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Слежение за людьми на фоне
СообщениеДобавлено: 09 июл 2008, 19:46 
Не в сети

Зарегистрирован: 09 июл 2008, 19:26
Сообщения: 3
Добрый день. Возникла такая задача, подумал, может быть вы покажете пути решения. Я уже совсем замучался, но, кажется, не вижу чего-то совсем простого.

Есть камера, которая зафиксирована и смотрит вертикально вниз. Есть люди, которые там ходят или стоят. Задача - отслеживать людей в видеопотоке. Как следить за движущимися людьми - вполне понятно (считать разность интенсивности цвета каждого пикселя по нескольким кадрам, делать threshold и т.п. Проблемы начинаются тогда, когда объект останавливается. У меня было две идеи: следить за каждой областью, где есть движение, при помощи чего-то вроде camshift, либо стягивать вокруг этой области активный контур (snake), который будет отслеживать эту область даже тогда, когда она остановится. С обоими идеями возникли проблемы (гистограммы кадра с человеком и без очень похожи, а параметры активного контура не получилось нормально подобрать). Возможно есть решение проще и лучше. Может чего подскажете? Прилагаю примеры кадров с человеком и без оного:
Вложение:
Комментарий к файлу: С человеком
человеком.jpg
человеком.jpg [ 12.27 КиБ | Просмотров: 2771 ]

Вложение:
Комментарий к файлу: Без человека
человека.jpg
человека.jpg [ 12.05 КиБ | Просмотров: 2782 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Слежение за людьми на фоне
СообщениеДобавлено: 10 июл 2008, 08:21 
Не в сети
Аватара пользователя

Зарегистрирован: 27 ноя 2004, 00:42
Сообщения: 3339
Откуда: совсем Москва
ФИО: Григорий
сразу скажу, я - дилетант в этом вопросе. но может мнение дилетанта поможет? :) в общем, а если следить - как только человек "типа исчез" из кадра, берем предыдущий кадр (где чел "еще был") и вычитаем из него новый, на котором чела уже вроде как нет... т.к. камера не двигается, фон уберется, останутся шумы и человек, если он ушел, или чисто шумы, если он остановился. А что с этим дальше делать - Х.З. :D Тут уж шарящим товарищам карты в руки.

_________________
злой полицейский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Слежение за людьми на фоне
СообщениеДобавлено: 10 июл 2008, 08:24 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Естественно надо разницу с предыдущим кадром ловить. А лучше со средненакопленным за какое-то время.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Слежение за людьми на фоне
СообщениеДобавлено: 10 июл 2008, 19:27 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
Быть может тогда вычитать фон? Он ведь статичен, а все что осталось - по определению человек или их скопление.
P.S. Или я неправ?

_________________
Tomorrow will be. Better


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Слежение за людьми на фоне
СообщениеДобавлено: 10 июл 2008, 23:15 
Не в сети

Зарегистрирован: 09 июл 2008, 19:26
Сообщения: 3
Да, это и мне пришло в голову. Проблема была только в том, где взять фон и какой? Статичную картинку без людей? Так в течение дня меняется освещение, и, соответственно, яркость фона. Периодически обновлять его? А если внизу все время ходят люди?

Тут пришла в голову следующая идея. Даже если внизу ходят люди, для каждого пикселя изображения эмпирически верно, что почти всегда он имеет цвет фона, лишь иногда - цвет человека. Соответственно, я решил сделать следующим образом. Несколько раз в секунду делать пробу цвета в каждом пикселе, и помнить, скажем, последние сто проб. Соответственно, в некотором аккумуляторе для каждого пикселя вычисляется среднее арифметическое этих самых последних ста проб (среднее арифметическое хорошо тем, что пересчитать его для каждого пикселя можно за O(1)). Соответственно, текущий кадр вычитается из аккумулятора, и то, что больше порога - некий объект. Алгоритм хорош тем, что даже если фон резко изменится, он достаточно быстро стабилизируется и привыкнет к новому фону.

Все это делаоя сегодня реализовал и проверил, работает быстро и результаты дает хорошие. Единственная проблема - получившиеся путем вычетания области объектов частенько рвутся (если цвет человека где-то близок к цвету фона), что неприятно. Что с этим лучше всего делать? Пробовал морфологическое замыкание и расширение, но выглядит результат не очень приемлимо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Слежение за людьми на фоне
СообщениеДобавлено: 11 июл 2008, 08:02 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
hr0nix писал(а):
Да, это и мне пришло в голову. Проблема была только в том, где взять фон и какой? Статичную картинку без людей? Так в течение дня меняется освещение, и, соответственно, яркость фона. Периодически обновлять его? А если внизу все время ходят люди?

Тут пришла в голову следующая идея. Даже если внизу ходят люди, для каждого пикселя изображения эмпирически верно, что почти всегда он имеет цвет фона, лишь иногда - цвет человека. Соответственно, я решил сделать следующим образом. Несколько раз в секунду делать пробу цвета в каждом пикселе, и помнить, скажем, последние сто проб. Соответственно, в некотором аккумуляторе для каждого пикселя вычисляется среднее арифметическое этих самых последних ста проб (среднее арифметическое хорошо тем, что пересчитать его для каждого пикселя можно за O(1)). Соответственно, текущий кадр вычитается из аккумулятора, и то, что больше порога - некий объект. Алгоритм хорош тем, что даже если фон резко изменится, он достаточно быстро стабилизируется и привыкнет к новому фону.

Т.е. моё сообщение вы не читали :) ну да ладно :)

hr0nix писал(а):
Все это делаоя сегодня реализовал и проверил, работает быстро и результаты дает хорошие. Единственная проблема - получившиеся путем вычетания области объектов частенько рвутся (если цвет человека где-то близок к цвету фона), что неприятно. Что с этим лучше всего делать? Пробовал морфологическое замыкание и расширение, но выглядит результат не очень приемлимо.

А зачем вам четкий контур? Какую задачу вы решаете? Ведь для систем безопасности достаточно выделить область, где было движение. Зачем четкий контур?

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Слежение за людьми на фоне
СообщениеДобавлено: 11 июл 2008, 10:34 
Не в сети
Аватара пользователя

Зарегистрирован: 29 окт 2007, 18:11
Сообщения: 1866
Откуда: Пермь
прог. языки: Brainfuck/Basic/Delphi/C++/Lisp/x86asm/JavaScript
=DeaD=, у меня есть предположение, что hr0nix считает количество посетителей. В этом случае нужно отследить в какую область человек уходит (т.е. если его фигура скрылась за верхним краем изображения, то он вошел, если за нижним - вышел). Проблема заключается в том, что когда человек выходит, видимой от него остается все меньшая и меньшая часть и начиная с какого-то момента она будет неотличима от шума. Чтобы отследить человека, ушедшего за кромку и нужен контур. Кроме того, он позволяет отличить двух людей в случае их столкновения (фактически в момент сталкивания мы видим лишь одного человека на изображении вместо двух).
А вот как это сделать - вопрос.

_________________
Tomorrow will be. Better


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Слежение за людьми на фоне
СообщениеДобавлено: 11 июл 2008, 20:01 
Не в сети

Зарегистрирован: 09 июл 2008, 19:26
Сообщения: 3
MiBBiM, да, примерно так.

=DeaD=, ваше сообщение я прочитал уже после того, как придумал свое решение. Но в любом случае спасибо, если бы мне случайно не пришла в голову эта идея, вы бы мне очень помогли.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Слежение за людьми на фоне
СообщениеДобавлено: 11 июл 2008, 23:15 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
hr0nix писал(а):
MiBBiM, да, примерно так.

Т.е. надо людей считать? Если перекрытий между людьми не будет, тогда всё просто, если же будут - тогда надо как-то упрощать задачу, например, описывать вокруг каждой подозрительной области 1 или несколько кругов нужного радиуса, считая что габариты людей не отличаются на порядок :)

hr0nix писал(а):
=DeaD=, ваше сообщение я прочитал уже после того, как придумал свое решение. Но в любом случае спасибо, если бы мне случайно не пришла в голову эта идея, вы бы мне очень помогли.

Да как бы это и не моя идея - это во всех системах обнаруживающих движение вроде пользуют.

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO