Обнаружение человека с использованием обнаружения края
Я пытаюсь определить точный силуэт человеческого тела в этом наборе данных, используя вычитание фона. После некоторых пороговых значений у меня были раздельные капли, поэтому я посмотрел этот урок от Стива, но теперь я получаю капли, отличные от человеческого тела, как показано ниже.
Так вот оригинал
После вычитания его из фона, фон рассматривался как первый кадр видео, поэтому после вычитания его из оригинального изображения я получаю следующее изображение
поэтому я выполнил базовое определение порога и получаю следующее изображение, которое отделено от других областей
и используя метод Стива, я получаю это
Но это содержит много области, которая не является частью человеческого тела, любое предположение, если так или иначе, используя края, я могу получить хороший кусок человеческого тела.
РЕДАКТИРОВАТЬ
Как @lennon310 попросил меня загрузить цветное изображение, так что вот оно
и как @NKN попросил меня загрузить информацию о крае того же изображения, так что вот оно
2 ответа
Вместо того, чтобы буквально вычитать фон, попробуйте использовать vision.ForegroundDetector
объект, который является частью панели инструментов системы компьютерного зрения. Он реализует адаптивное фоновое моделирование смеси Гаусса и может дать вам более четкую сегментацию.
Сказав это, очень маловероятно, что вы получите "точный" силуэт. Некоторая ошибка неизбежна.
В полученном изображении у вас есть два типа черных областей. один движется, а другой неподвижен. Поэтому, когда вы хотите заполнить человеческое тело, вам нужно выбрать только движущуюся область, для этой цели я предлагаю сегментировать ваше изображение, добавив метод оптического потока, чтобы узнать, где находятся движущиеся области. Это интересное руководство, которое делает то, что вам нужно: http://docs.opencv.org/trunk/doc/py_tutorials/py_video/py_lucas_kanade/py_lucas_kanade.html