Я убираю «на глаз». Смотрю все значения по изображению и определяю, при какой «дельте» (каком пороге) маска будет иметь необходимый вид (чтобы различные шумы на нее почти не влияли). А в шагах 6 и 7 — смотрим, чтобы и блики убирались нормально, и реальный объект не сильно «съедало».
Может есть и математический метод какой. Но я такой не искал. На глаз настроил и работает.
На второй вопрос — 2 это и есть порог. То что равно или меньше обнуляем, все что больше — оставляем.
Есть ощущение, что в реальном видео с камеры будет работать лучше, ибо 2 соседних кадра не могут очень сильно отличаться. Итого — порогом будут порезаны незначительные движения деревьев и смена освещённости (далеко они за 1/20 секунды на простой веб-камере не переедут), а если ещё и подключить предыдущий кадр, и вычитать его движения, то всё вообще должно быть чистенько. Кажется мне…
На практике, в режиме слежения не обязательно «колбасить» со скоростью 1/20 сек. У меня работает сейчас слежение с паузой 0.3 сек. При записи — 0.1 сек.
Так вот за 0.3 секунды освещение может сильно меняться, пришлось улучшать алгоритм.
А так вы правы. В статье я привел экстремальный пример.
Как насчет воспользоваться Гаусс-размытием?
Сила размытия будет определять границу между подавлением шумов и чувствительностью определения движения. Определить силу размытия можно на этапе калибрации: включить камеру на неподвижную сцену и снять первые десяток-два кадров для проведения сравнения и выделения шумов.
После того, как с шумами разобрались, остается проблема автоподстройки камеры под изменение светового заполнения сцены. Эту проблему можно как игнорировать (в случае, если камера профессиональная и подобная автоподстройка может быть выключена), так и обработать далее:
— выбросить «мигающий» кадр
— определить, не произошло ли полное перестроение источников света (включили/выключили свет в помещении)
Слишком большое количество дельт можно убрать, разбив алгоритм на три стадии: грубый анализ, уточнение, определение границ движущегося объекта.
Грубый анализ можно реализовать через вычитание двух соседних (а может и не соседних) размытых гауссом кадров — Вы получите перемещение контрастных точек. После этого проведение уточнения следует делать в окрестностях этих точек, не тратя процессорное время на неизменную часть кадра. Определение границ объекта может проходить как с помощью готовых алгоритмов (заливка, повышение контрастности), так и прикидочным образом с помощью попиксельного/поблочного вычитания.
Я как-то занимался похожей задачей. Поэтому вопрос: почему нельзя просто оценить арифметическую разность двух кадров, и не заморачиваться вообще ни с чем?
Представляем изображение в HSV, используем только H, шумы фильтруем элементарным гауссом (медианный фильтр, конечно, лучше, но он слишком медлителен для realtime). В итоге разность двух изображений даст нам надежную оценку, чего там новенького появилось.
Медианный фильтр, если его грамотно написать, вполне подходит для обработки реального видео (у меня, например, медианный фильтр 3х3 занимает менее 1 мс для 1 мегапиксельного серого изображения на одном ядре).
А вы прочитали на что это был ответ? Там был вопрос, почему бы, не заморачиваясь ни с чем, просто не подсчитать арифметическую разность кадров. Я ответил почему нельзя. На что вы отвечаете мне непонятно.
я думаю, количество шума на двух фотографиях, снятых с разностью 5 секунд, будет одинаковым. Этот уровень и сделать пороговым.
Зачем избавляться от шума, если он присутствует на обоих изображениях в одинаковом количестве.
В любом случае, если в кадре появляется человек, то это будет значительное изменение, точно не шум.
Что значит «количество шума»? Все равно вам после вычитания кадров придется сделать медианную либо другую сглаживающую фильтрацию, иначе шум вида «соль-перец» будет давать множество ложных срабатываний. Ну, а после сглаживания нужно будет бинаризовать результат и выделить связанные области, которые и будут масками, позволяющими выделить новые объекты на кадре.
Для этих целей принято использовать алгоритм Lucasa-Kanade: Лучший мануал от Jean-Yves Bouguet.
Вот тут картинки Лекция про оптический поток.
Ваш подход мне показался наивным. Как по вашему алгоритму определить параметры проективных (или афинных в упрощении) искажений?
Алгоритм определения движения через сравнение двух кадров