Обнаружение человеческого тела от источника Видео В C#
Я пытаюсь извлечь человека из источника видео, чтобы позже использовать его изображение. Мне нужно только извлечь человеческое тело, и игнорировать окружающую среду. Хорошо, что фон статичен. Я попытался использовать AForge и примененный фильтр CustomFrameDifferenceDetector, который сравнивает текущий кадр со статическим фоновым изображением и извлекает отличающиеся пиксели (разница>порог). Это хорошо работает, но есть проблема, когда кожа или часть одежды имеет подобный цвет на задний план. В этих случаях фильтр игнорирует эти части и в результате имеет различные отверстия в теле. Простое уменьшение порога не решает проблему, так как тени тела и другие шумы увеличиваются (даже при подавлении шума).
Известно ли вам какое-либо известное решение этой проблемы? Или это все еще нерешенная проблема?
1 ответ:
Это трудноразрешимая проблема (и одна из причин того, что Microsoft Kinect не использует только видимый свет, и почему синий/зеленый экран все еще так популярен). Я бы попытался удалить отверстия (вы должны быть в состоянии предсказать, где должно быть тело). Если у вас есть вычислительная мощность, используйте различные пороговые значения и объединяйте результаты. Вы также можете попытаться отфильтровать новые разделенные изображения (например, добавить текущий кадр к последнему кадру и нормализовать результат). Таким образом, вы могли бы отслеживать формы, которые вы теряете для один кадр гораздо более последователен.
Другой подход: используйте обнаруженную форму / область только для определения положения тела. То есть игнорировать его конкретную форму и использовать заранее заготовленную форму выше/вокруг предполагаемого положения тела. Это, скорее всего, не будет работать, если вы хотите сделать какой-то синий экран, как поведение, но это может также помочь закрыть отверстия.