Обнаружение человека с использованием обнаружения края

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

Так вот оригинал

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

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

и используя метод Стива, я получаю это

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

РЕДАКТИРОВАТЬ

Как @lennon310 попросил меня загрузить цветное изображение, так что вот оно

и как @NKN попросил меня загрузить информацию о крае того же изображения, так что вот оно

2 ответа

Вместо того, чтобы буквально вычитать фон, попробуйте использовать vision.ForegroundDetector объект, который является частью панели инструментов системы компьютерного зрения. Он реализует адаптивное фоновое моделирование смеси Гаусса и может дать вам более четкую сегментацию.

Сказав это, очень маловероятно, что вы получите "точный" силуэт. Некоторая ошибка неизбежна.

В полученном изображении у вас есть два типа черных областей. один движется, а другой неподвижен. Поэтому, когда вы хотите заполнить человеческое тело, вам нужно выбрать только движущуюся область, для этой цели я предлагаю сегментировать ваше изображение, добавив метод оптического потока, чтобы узнать, где находятся движущиеся области. Это интересное руководство, которое делает то, что вам нужно: http://docs.opencv.org/trunk/doc/py_tutorials/py_video/py_lucas_kanade/py_lucas_kanade.html

Другие вопросы по тегам