Удаление фона с помощью Kinect: подавление шума вокруг фигуры - PullRequest
9 голосов
/ 05 сентября 2011

Цель состоит в том, чтобы отобразить человека на другом фоне (или удаление фона).

Я использую Kinect с Microsoft Beta Kinect SDK для этого. С помощью глубины фон фильтруется, и мы получаем только изображение человека.

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

Я применил детектор краев, чтобы посмотреть, был ли он полезен, и в настоящее время я получаю это:

Вот еще одно без определения края:

enter image description here

Мой вопрос: каким образом я могу избавиться от этих шумных белых пикселей вокруг человека?

Я пробовал морфологические операции, но некоторые части тела стираются и все еще оставляют белые пиксели позади.

Алгоритм не должен быть в режиме реального времени, я могу просто применить его, когда нажимаю кнопку «Сохранить изображение».

Редактировать 1:

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

Редактировать 2:

Проект завершен, и вот что мы сделали: ручная калибровка Kinect с помощью драйвера OpenNI, который обеспечивает прямое инфракрасное изображение. Результат действительно хороший, но каждая калибровка специфична для каждого Kinect.

Затем мы применили немного прозрачности к границам, и результат выглядит действительно хорошо! Однако я не могу предоставить фотографии.

Ответы [ 2 ]

5 голосов
/ 06 сентября 2011

Ваша проблема не только в шумных белых пикселях. Вам также не хватает значительных частей человека, например, часть его правой руки. Я бы порекомендовал быть более консервативным с вашим пороговым значением данных глубины (допускайте больше ложных срабатываний) Это даст вам больше шумных пикселей, но, по крайней мере, у вас будет человек в полном объеме.

Чтобы избавиться от шумных пикселей, я могу придумать пару вещей:

  • Обогните внешние пиксели (уменьшите их интенсивность / увеличьте их прозрачность, если вы используете альфа-канал)
  • Сгладьте изображение, выполните определение краев на сглаженном изображении, затем используйте эти края с исходным резким изображением.
  • Сделайте некоторое обнаружение области кожи, чтобы отметить части, которые определенно принадлежат человеку. См. Обнаружение кожи в цветовом пространстве YUV? и Обнаружение цвета кожи
  • Для одежды работайте с изображением оттенка и насыщенности. Если вы знаете цвет футболки (или, по крайней мере, это не нейтральный цвет), то это будет легко заметить. Если вы не знаете эту информацию, то, возможно, стоит создать модель человека, использующего другие кадры (если в вашем видео движется большая серая капля, скорее всего, ваш объект одет в серую рубашку)

Подходы не являются взаимоисключающими, поэтому, возможно, стоит попытаться сделать их в комбинации. Если я подумаю о чем-то еще, я отправлю сюда сюда.

2 голосов
/ 06 сентября 2011

Если нет другого способа устранения дрожания по краям, вы всегда можете попробовать сглаживание как постобработка.

...