Comments 31
Вы под дельтой пороговое значение подразумеваете, я так понял?
И да: уберите стрелочки, а то кажется, что алгоритм определяет направление движения, а не наличие или отсутствие.
да, «дельта» другими словами — пороговое значение. Для каждой маски подбирается свое.
Можете тогда этот «подбор» пояснить? Почему написано, что отнимается 2, но при этом просто убраны двойки из маски, и почему именно 2?
Я убираю «на глаз». Смотрю все значения по изображению и определяю, при какой «дельте» (каком пороге) маска будет иметь необходимый вид (чтобы различные шумы на нее почти не влияли). А в шагах 6 и 7 — смотрим, чтобы и блики убирались нормально, и реальный объект не сильно «съедало».
Может есть и математический метод какой. Но я такой не искал. На глаз настроил и работает.
На второй вопрос — 2 это и есть порог. То что равно или меньше обнуляем, все что больше — оставляем.
Есть ощущение, что в реальном видео с камеры будет работать лучше, ибо 2 соседних кадра не могут очень сильно отличаться. Итого — порогом будут порезаны незначительные движения деревьев и смена освещённости (далеко они за 1/20 секунды на простой веб-камере не переедут), а если ещё и подключить предыдущий кадр, и вычитать его движения, то всё вообще должно быть чистенько. Кажется мне…
зачастую такие алгоритмы требуется использовать с камерами наблюдения, которые сильно шумят, дают мало fps и т.д.
На практике, в режиме слежения не обязательно «колбасить» со скоростью 1/20 сек. У меня работает сейчас слежение с паузой 0.3 сек. При записи — 0.1 сек.
Так вот за 0.3 секунды освещение может сильно меняться, пришлось улучшать алгоритм.
А так вы правы. В статье я привел экстремальный пример.
Как насчет воспользоваться Гаусс-размытием?
Сила размытия будет определять границу между подавлением шумов и чувствительностью определения движения. Определить силу размытия можно на этапе калибрации: включить камеру на неподвижную сцену и снять первые десяток-два кадров для проведения сравнения и выделения шумов.

После того, как с шумами разобрались, остается проблема автоподстройки камеры под изменение светового заполнения сцены. Эту проблему можно как игнорировать (в случае, если камера профессиональная и подобная автоподстройка может быть выключена), так и обработать далее:
— выбросить «мигающий» кадр
— определить, не произошло ли полное перестроение источников света (включили/выключили свет в помещении)

Слишком большое количество дельт можно убрать, разбив алгоритм на три стадии: грубый анализ, уточнение, определение границ движущегося объекта.

Грубый анализ можно реализовать через вычитание двух соседних (а может и не соседних) размытых гауссом кадров — Вы получите перемещение контрастных точек. После этого проведение уточнения следует делать в окрестностях этих точек, не тратя процессорное время на неизменную часть кадра. Определение границ объекта может проходить как с помощью готовых алгоритмов (заливка, повышение контрастности), так и прикидочным образом с помощью попиксельного/поблочного вычитания.
Я как-то занимался похожей задачей. Поэтому вопрос: почему нельзя просто оценить арифметическую разность двух кадров, и не заморачиваться вообще ни с чем?
Представляем изображение в HSV, используем только H, шумы фильтруем элементарным гауссом (медианный фильтр, конечно, лучше, но он слишком медлителен для realtime). В итоге разность двух изображений даст нам надежную оценку, чего там новенького появилось.

Медианный фильтр, если его грамотно написать, вполне подходит для обработки реального видео (у меня, например, медианный фильтр 3х3 занимает менее 1 мс для 1 мегапиксельного серого изображения на одном ядре).
А вы прочитали на что это был ответ? Там был вопрос, почему бы, не заморачиваясь ни с чем, просто не подсчитать арифметическую разность кадров. Я ответил почему нельзя. На что вы отвечаете мне непонятно.
я думаю, количество шума на двух фотографиях, снятых с разностью 5 секунд, будет одинаковым. Этот уровень и сделать пороговым.

Зачем избавляться от шума, если он присутствует на обоих изображениях в одинаковом количестве.
В любом случае, если в кадре появляется человек, то это будет значительное изменение, точно не шум.
Количество будет примерно равным, расположение шумовых элементов, очевидно, будет разным. Вот это вам и помешает просто вычесть один кадр из другого.
если уровень шума будет одинаковым, то можно просто не обращать на него внимания.
т.е. порог срабатывания сделаем в два раза больше, чем количество шума.
Что значит «количество шума»? Все равно вам после вычитания кадров придется сделать медианную либо другую сглаживающую фильтрацию, иначе шум вида «соль-перец» будет давать множество ложных срабатываний. Ну, а после сглаживания нужно будет бинаризовать результат и выделить связанные области, которые и будут масками, позволяющими выделить новые объекты на кадре.
Just For Fun и для самообучения — сойдёт и интересно… Спасибо. Хотя я в подобных случаях просто настраиваю Motion :)
UFO landed and left these words here
UFO landed and left these words here
Для этих целей принято использовать алгоритм Lucasa-Kanade: Лучший мануал от Jean-Yves Bouguet.
Вот тут картинки Лекция про оптический поток.
Ваш подход мне показался наивным. Как по вашему алгоритму определить параметры проективных (или афинных в упрощении) искажений?
Это конечно интересно, но почему для видео наблюдения, не использовать обычные датчики объема, на подобие этих www.gsm-alert.ru/media/catalog/product/cache/1/image/70e4f3cdda829922f4301d3770cbe283/5/5/55.jpg, точность срабатывания будет выше, да и реализовать такую систему гораздо проще, а если скомбинировать эти 2 метода, вообще хорошо будет.
Only those users with full accounts are able to leave comments. Log in, please.