Suppression de l'arrière en utilisant Kinect: la suppression du bruit autour de la forme du corps

StackOverflow https://stackoverflow.com/questions/7308170

  •  26-10-2019
  •  | 
  •  

Question

L'objectif est d'afficher la personne sur un autre arrière-plan (aka suppression d'arrière-plan).

J'utilise le Kinect avec Kinect SDK Beta de Microsoft pour le faire. Avec l'aide de la profondeur, l'arrière-plan est filtré et nous obtenons que l'image de la personne.

Ceci est assez simple à faire, et nous pouvons trouver le code qui fait que partout sur Internet. Cependant, le signal de profondeur est bruyant, et nous obtenons des pixels qui ne appartiennent à la personne qui sont affichés.

I a appliqué un détecteur de bord pour voir si elle était utile, et je reçois actuellement ceci:

Voici une autre sans détection de bord:

entrer image description ici

Ma question est: Quel chemin puis-je me débarrasser de ces pixels blancs bruyants autour de la personne?

J'ai essayé opérations morphologiques, mais certaines parties du corps sont effacés et laisse encore des pixels blancs derrière.

L'algorithme n'a pas besoin d'être en temps réel, je peux l'appliquer lorsque j'appuie sur un bouton « Enregistrer l'image ».

Edit 1:

Je viens d'essayer de faire soustractions de fond avec les cadres les plus proches sur la frontière de forme. Les pixels simples que vous voyez scintillent, ce qui signifie qu'il est le bruit et je peux obtenir facilement se débarrasser d'eux.

Edit 2:

Le projet est maintenant terminé, et voici ce que nous avons fait: le calibrage manuel du Kinect en utilisant le pilote OpenNI, qui fournit directement l'image infrarouge. Le résultat est vraiment bon, mais chaque étalonnage est spécifique à chaque Kinect.

Ensuite, nous avons appliqué un peu de transparence sur les frontières, et le résultat ressemble vraiment agréable! Je ne peux pas fournir des images, cependant.

Était-ce utile?

La solution

Votre problème est pas seulement les pixels blancs bruyants. Vous êtes absent des parties importantes de la personne ainsi, par exemple une partie de sa main droite. Je recommande d'être plus prudent avec votre seuillage des données de profondeur (permettent plus de faux positifs). Cela vous donne plus de pixels bruyants, mais au moins vous auriez la personne dans leur intégralité.

Pour se débarrasser des pixels bruyants, je peux penser à deux choses:

  • Feather les pixels extérieurs (les réduire en intensité / augmenter leur transparence si vous utilisez un canal alpha)
  • Lisser l'image, effectuer la détection de bord sur l'image lissée, puis utilisez ces bords avec votre image nette d'origine.
  • Faites une détection de zones de la peau à des pièces de marque qui appartiennent certainement à une personne. Voir détection peau dans l'espace colorimétrique YUV et Skin Détection de couleur
  • Pour les vêtements, le travail avec l'image de la teinte et la saturation. Si vous connaissez la couleur du t-shirt (ou au moins que ce n'est pas une couleur neutre), alors cela se démarquer facilement. Si vous ne connaissez pas cette information, il peut être utile de construire un modèle de la personne à l'aide des autres cadres (s'il y a un gros blob gris qui bouge autour de votre vidéo, il est probable que votre sujet porte une chemise grise)

Les approches ne sont pas mutuellement exclusives il peut être intéressant d'essayer de les faire en combinaison. Si je pense à autre chose, je posterai ici.

Autres conseils

S'il n'y a pas d'autre moyen de résoudre la gigue sur les bords, vous pouvez toujours essayer d'anti-alias comme post-traitement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top