Перейти к содержимому
Compvision.ru
erly

Сравнение методов Bg/Fg Segmentation

Recommended Posts

Коллеги, поделитесь информацией плиз, если имеется.

Встречалась ли кому статья, или может быть тема на форуме, с исследованием отличий OpenCV-методов сегментации фона (Background-Foreground Segmentation Methods)? Или может быть кто-то сам исследовал и сохранил результаты?

Готовых методов сегментации в opencv несколько (https://docs.opencv.org/4.1.0/d2/d55/group__bgsegm.html).
Но не понятно, в каком случае какой метод предпочтительнее. Так же не получается найти понятного, но не громоздкого описания каждого из реализованных методов. Ссылки на публикации с описанием методов как-то не очень помогают - про каждый написано, что он самый лучший и быстрый, при этом краткого описания сути метода нет.

Не хочется изобретать велосипед и городить свой метод, не разобравшись до конца в существующих.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, здесь есть реализация и статья-обзор нескольких десятков методов вычитания фона. Там намного больше всего, чем есть в OpenCV и лучше структурированы. И не надо забывать про базовый videoio - там тоже кое-что есть проверенное временем.

А чего хочется от вычитания фона? Может, просто написать тестовое окружение и посмотреть на результаты, выдаваемые каждым алгоритмом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за ответ, почитаю.

Хочется, чтобы:

  1. Учитывался цвет, а не только яркость. Может быть даже, чтобы учитывались контуры и характерные точки, а не только цвет и яркость. Фактура фона и объектов на глаз сильно отличается. При этом, если смотреть только на яркость, то отличие Fg/Bg может быть слабым.
  2. Была защита от длительного присутствия объекта. У меня фиксированная установка камеры, фиксированный бекграунд, на котором появляются объекты (их и надо обнаруживать). Объекты могут появиться и задержаться на длительное время. Оконный буфер усреднения фона через какое-то время приводит к восприятию этих объектов, как Bg. Надо, чтобы эти долго неподвижные объекты продолжали детектироваться, как Fg.
  3. Была адаптация к изменению освещения, в том числе резкому (выключили половину света).
  4. Была защита от краткосрочного изменения яркости (фото вспышка).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1.  Цвет учитывается в большинстве методов. Есть только нюанс: почти везде работа ведётся с цветными изображениями так, как будто они состоят из равноправных цветовых каналов. Например, для MOG2 из opencv_video нет разницы, подашь ему RGB, BGR или HSV. Хоть там и есть возможность детектирования теней (detectShadowGMM), но оно совсем не будет работать, если подать неправильную картинку. А некоторые методы изначально ориентированы на то же детектирование теней, что очень востребовано, если надо считать автомобили или людей, а не просто их детектировать. Про текстуры и контуры я не в курсе, не слышал.

2. Длительное присутствие или детекция оставленных объектов, как мне кажется, требует самостоятельной модификации метода и принципиально не может быть реализовано силами алгоритма вычитания фона. Если он может адаптироваться к изменению фона, то рано или поздно адаптируется к любому изменению. Если не может адаптироваться, то со временем накопится такое количество ложных пикселей заднего плана, что всё станет белым.

Когда я занимался этой проблемой, то сделал что-то типа самопального MOG, у которого не было возможности самостоятельной адаптации. После вычитания фона отрабатывал трекер объектов и их распознавание. Если объект был маленький (а надо было детектировать только большие) и неподвижный, то включалась адаптация внутри этого объекта. Если объект был большой и неподвижный, то адаптация не включалась. Также она не включалась, если объект был распознан, как пешеход или автомобиль. Далее был интервал в несколько минут, в течение которого неподвижный объект считался оставленным. Объект неподвижен, скажем, минуту - адаптируем фон под него и выдаём оператору, что обнаружен оставленный предмет. Если долго был неподвижен автомобиль, то просто адаптируем фон под него. Если же распознавание не использовалось, то просто адаптируем фон для всех объектов после истечения некоторого интервала. Вот как это примерно выглядело для видео с PETS 2006: сумка из зелёной сначала становится красной, а потом сиреневой.

3-4. Это тоже делалось вручную, но с внешними наворотами. Для всех систем видеонаблюдения полезно иметь алгоритм саботажа или порчи камеры: засветка, расфокусировка, закрытие объектива и т.п. То есть такой детектор работает независимо от детектора движения и в случае обнаружения неполадок отдаёт команду детектору движения, по которой он переинициализируется. Кажется, что силами алгоритма вычитания фона это тоже не так просто сделать.

 

Одно время появился закрытый и запатентованый алгоритм vibe, который был и очень быстрым и точным. Через некоторое время патент кончился и его автор бельгийский профессор открыл исходники. Кажется, они уже есть в bgslibrary. Можно начать с него.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Отличное видео! Сейчас в основном пытаюсь бороться с проблемой, как на прикрепленном участке. Человека глазами хорошо видно, а детектор выполняет это не надежно.

На тот момент, когда сумка стала сереневой, в алгоритме она уже считается фоном?

А в общем, спасибо, экспериментирую с bgslibrary. Есть там очень неплохие варианты.

Screenshot from 2019-04-22 15-09-30.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, косяков там достаточно, это старый мой код, которому уже больше 10 лет: люди "распадаются" на части и т.д. Но она на тот момент предназначалась для детекции движения и определения оставленных предметов и с этим справлялась.

Сумка становится сиреневой - это как раз момент, когда вышел заданный таймаут (там он установлен секунд в 15 для наглядности) и объект считается фоном. Даже если сумку унесут, рамка какое-то время будет на этом месте, чтобы сотрудник безопасности обратил на это внимание.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, есть там Vibe в библиотеке. Очень быстрый. При этом качество детектирования, как мне показалось, примерно такое же, как у почти всех остальных алгоритмов, работающих с большим накоплением. Но производительность очень высокая.

Все алгоритмы попробовал. Особенно понравился MultiCue. Лучше других справляется с "распаданием" объектов. Скорость работы при этом выше среднего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У MultiCue тоже проблема с производительностью... похоже, он однопоточный.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×