roboforum.ru

Технический форум по робототехнике.

Слежение за людьми на фоне

Слежение за людьми на фоне

hr0nix » 09 июл 2008, 19:46

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

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

человека.jpg
Без человека
человека.jpg (12.05 КиБ) Просмотров: 2680

Re: Слежение за людьми на фоне

Digit » 10 июл 2008, 08:21

сразу скажу, я - дилетант в этом вопросе. но может мнение дилетанта поможет? :) в общем, а если следить - как только человек "типа исчез" из кадра, берем предыдущий кадр (где чел "еще был") и вычитаем из него новый, на котором чела уже вроде как нет... т.к. камера не двигается, фон уберется, останутся шумы и человек, если он ушел, или чисто шумы, если он остановился. А что с этим дальше делать - Х.З. :D Тут уж шарящим товарищам карты в руки.

Re: Слежение за людьми на фоне

=DeaD= » 10 июл 2008, 08:24

Естественно надо разницу с предыдущим кадром ловить. А лучше со средненакопленным за какое-то время.

Re: Слежение за людьми на фоне

MiBBiM » 10 июл 2008, 19:27

Быть может тогда вычитать фон? Он ведь статичен, а все что осталось - по определению человек или их скопление.
P.S. Или я неправ?

Re: Слежение за людьми на фоне

hr0nix » 10 июл 2008, 23:15

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

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

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

Re: Слежение за людьми на фоне

=DeaD= » 11 июл 2008, 08:02

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

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

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

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

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

Re: Слежение за людьми на фоне

MiBBiM » 11 июл 2008, 10:34

=DeaD=, у меня есть предположение, что hr0nix считает количество посетителей. В этом случае нужно отследить в какую область человек уходит (т.е. если его фигура скрылась за верхним краем изображения, то он вошел, если за нижним - вышел). Проблема заключается в том, что когда человек выходит, видимой от него остается все меньшая и меньшая часть и начиная с какого-то момента она будет неотличима от шума. Чтобы отследить человека, ушедшего за кромку и нужен контур. Кроме того, он позволяет отличить двух людей в случае их столкновения (фактически в момент сталкивания мы видим лишь одного человека на изображении вместо двух).
А вот как это сделать - вопрос.

Re: Слежение за людьми на фоне

hr0nix » 11 июл 2008, 20:01

MiBBiM, да, примерно так.

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

Re: Слежение за людьми на фоне

=DeaD= » 11 июл 2008, 23:15

hr0nix писал(а):MiBBiM, да, примерно так.

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

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

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


cron
Rambler\'s Top100 Mail.ru counter