Jump to content
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).
Но не понятно, в каком случае какой метод предпочтительнее. Так же не получается найти понятного, но не громоздкого описания каждого из реализованных методов. Ссылки на публикации с описанием методов как-то не очень помогают - про каждый написано, что он самый лучший и быстрый, при этом краткого описания сути метода нет.

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

 

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×