Извлечение переднего плана

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

Мой фон как

Фон

и если я попытаюсь вычесть мой текущий кадр, как это

поэтому после вычитания я получаю изображение, как это

и после порога 0,15 или 38

Я получаю эту маску

Поэтому, если вы заметили эту маску, она разделяет этот передний план на две части из-за окклюзии лица и стула. Я не знаю, как решить эту проблему. Какие-либо предложения?

4 ответа

Это не идеальное решение, но, возможно, вам этого будет достаточно - по изображению маски найдите все контуры, соедините их (обычно контуры представлены в виде векторов точек, поэтому все контуры объедините в один вектор), а затем найдите выпуклую оболочку связанного контура (если вы используете opencv - используйте функцию convertxHull http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/hull/hull.html).

Это также не идеальное решение. Пожалуйста, уменьшите количество кадров для создания фонового изображения в методе вычитания фона, это может вам помочь. Или часто инициализируйте структуру вычитания фона.

Если я вас правильно понимаю, вы пытаетесь сделать вычитание фона, используя различия кадров, например mean filter как вы упомянули. Но имейте в виду, что он будет обнаруживать только движущиеся передние планы, и ручное задание порога затруднительно. Я предлагаю вам вместо этого попробовать Mixture of Gaussian метод, который является более эффективным и реализован в OpenCV.

Чтобы решить конкретную проблему соединения отдельных частей, используйте расширение http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=dilate