Как стать автором
Обновить

Комментарии 20

Спасибо за пост! Не знал, что bioinspired можно использовать для выделения движущихся объектов (честно сказать, руки не дошли, чтобы разобраться с этим модулем). Хотелось бы, однако, увидеть больше примеров. Например, что будет при наличии в кадре слабого движения — покачивания деревьев, атмосферной турбулентности. Было бы неплохо увидеть сравнение качества работы этого подхода с другими классическими подходами: на основе оценки фона, ViBe, оптического потока. Каковы требования алгоритма к качеству исходного видеопотока? Как он реагирует на наличие артефактов сжатия?
Также интересна оценка вычислительной сложности по сравнению с другими подходами.
Слабое движение будет хорошо заметно, вот использовал в программе самонаведения на цель, идущего человека издалека видит хорошо.
видео

. Соответственно, помехи, как покачивание деревьев или движение воздуха детектор тоже будет обнаруживать.
Тут-то как раз проблема! Покачивание деревьев или колебания яркости точек изображения в силу атмосферной турбулентности приводят к ложным срабатываниям по движению, что плохо для охранных систем, или как в Вашем примере, для турели. Сейчас много работают над тем, чтобы разделить слабые колебания вызванные фоновым движением, от движения реальных объектов. Что Вы планируете делать, чтобы минимизировать количество ложных срабатываний? Увеличение порога, здесь, думается, не панацея, так как в этом случае увеличивается вероятность пропуска цели. Фильтровать объекты по размеру — тоже не всегда вариант. Все это как раз можно видеть на Вашем видеопримере. На первой его части система хорошо срабатывает даже по малоразмерным и медленно перемещающимся объектам, в то время как на второй половине, довольно крупные и достаточно подвижные объекты (люди на заднем плане) не обнаруживаются. Автомобиль наоборот при приближении начинает выделяться как несколько объектов, что тоже обычно нежелательно. Связано ли это как-то с настройками алгоритма? Т.е. две части сюжета обрабатывались с одними настройками или разными?
Сам алгоритм из opencv так работает, что если в кадре есть крупное движение, незначительные движения на выходе magno менее светлые, и после порогового преобразования их вовсе нет.
Да можно и стандартную сортировку использовать, код сортировки простой, оптимизировать дальше некуда.
оптимизировать дальше некуда.

Вообще-то (в общем случае) есть, иначе бы не придумывали бы всяких timsort. В стандартной библиотеке С++, правда, её нет.

Хотелось бы увидеть сравнение результата с тем, что дают opencv-шные методы обнаружения движения через накопление фона.
cv::bgsegm::BackgroundSubtractorMOG
cv::BackgroundSubtractorMOG2

Можете пояснить про сдвиг буфера?

Это для медианного фильтра нужно. Потом буфер сортируется, и элемент из середины массива и есть медиана.
Я думаю, тут скорее интересно, как используется медианный фильтр?
Идея такая, что резкие пики энтропии или средней яркости приходятся на моменты, когда в кадре есть движение. Тогда медиана будет соответствовать таким значениям, где движения в кадре нет. Если значения энтропии или средней яркости текущего кадра выходят за пределы медианных значений, то включается пороговое срабатывание и обнаруживаются движения. В остальных случаях алгоритм дальше не продолжается, так как он будет пытаться найти в кадре слишком слабые движения (т.е. начнет регистрировать шум).
Для детектирования движения в кадре очень хорошо себя показал перцептивный хеш.
После некоторой оптимизации время обработки кадра стало сравнимо с копированием этого кадра в памяти.
Очень интересно. Где можно подробнее узнать?
Я в свое время начал с этой статьи (перевода):
https://habrahabr.ru/post/120562/
Так же имеет смысл ознакомиться с оригиналом и комментариями к нему.
В итоге у нас на на Allwinner A13 (1GHz ARM v7) картинка с камеры (640х480) обрабатывалась за 4мс.
Алгоритм простой — каждую секунду делается кадр, вычисляется хеш и находится «дистанция» с предыдущим.
Когда в кадре ничего не происходит, дистанция обычно 0-1.
До этого использовали алгоритм основанный на подсчете количества пикселей, яркость которых изменилась более чем на N — он был медленный и ненадежный, сильно реагировал на цветовые/яркостные флуктуации.
Правильно я понимаю, Вы только сам факт движения фиксируете, но сами объекты не выделяете?
Да, нам нужен был только датчик движения.
Следующая задача была на определение наличия крупных посторонних объектов в кадре, но она была решена таким же образом (сравнением дистанции с накопленным фоном).
Главным критерием была скорость обработки.
Еще, но это скорее в качестве наблюдения. Выход magno канала напоминает текстуру, генерируемую по марковскому случайному полю, помеха явно пространственно корелирована. Как Вы считаете, могло бы улучшить результаты выделения объектов использование алгоритмов сегментации марковских полей?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории