Computer Vision: Eine menschliche Hand maskieren

9

Ich möchte meine Hand aus einem Live-Video-Stream erkennen und eine Maske meiner Hand erstellen. Allerdings erreiche ich ein ziemlich schlechtes Ergebnis, wie man auf dem Bild sehen kann.

Mein Ziel ist es, die Handbewegung zu verfolgen, also habe ich den Videostream vom BGR in den HSV-Farbraum konvertiert, dann habe ich das Bild durchsucht, um die Farbe meiner Hand zu isolieren, dann habe ich versucht, die Konturen zu finden meine Hand, obwohl das Endergebnis nicht ganz das ist, was ich erreichen wollte.

Wie kann ich das Endergebnis verbessern?

%Vor%

Hier der Link zu den Bildern: Ссылка . Neuer Link mit Bild plus Konturen, Maske und Original. Ссылка

Und hier ist ein Beispielbild von oben:

    
wind85 07.02.2013, 13:14
quelle

2 Antworten

11

Es gibt viele Möglichkeiten, pixelweise Schwellwerte zu verwenden, um "Skin-Pixel" von "Nicht-Skin-Pixeln" zu trennen, und es gibt Papiere, die auf praktisch jedem Farbraum basieren (sogar mit RGB). Also basiert meine Antwort einfach auf der Papier-Gesichtssegmentierung mit Skin-Colour-Map in Bildtelefon-Anwendungen von Chai und Ngan. Sie haben mit dem YCbCr-Farbraum gearbeitet und sehr schöne Ergebnisse erzielt, der Artikel erwähnt auch eine Schwelle, die für sie gut funktionierte:

%Vor%

Die Schwellenwerte für den Y -Kanal sind nicht angegeben, aber es gibt Dokumente, die Y > 80 erwähnen. Für Ihr einzelnes Bild ist Y im gesamten Bereich in Ordnung, d. H. Es spielt keine Rolle, Haut tatsächlich zu unterscheiden.

Hier ist die Eingabe, das binäre Bild gemäß den genannten Schwellenwerten und das resultierende Bild nach dem Verwerfen kleiner Komponenten.

%Vor%

Zu guter Letzt gibt es eine ziemlich gute Menge an Beiträgen, die sich nicht auf eine individuelle pixelweise Klassifizierung für diese Aufgabe verlassen. Stattdessen beginnen sie mit einer Basis von beschrifteten Bildern, von denen bekannt ist, dass sie entweder Hautpixel oder Nicht-Hautpixel enthalten. Daraus trainieren sie beispielsweise eine SVM und unterscheiden dann anhand dieses Klassifikators andere Eingaben.

    
mmgp 07.02.2013, 16:44
quelle
3

Eine einfache und leistungsstarke Option ist die Histogramm-Rückprojektion . Erstellen Sie beispielsweise ein 2D-Histogramm mit H und S (aus dem HSV-Farbraum) oder a * und b * (aus dem La * b * -Farbraum), indem Sie Pixel aus verschiedenen Trainings -Bildern Ihrer Hand verwenden. Verwenden Sie dann [cv2.calcBackProject] [1], um die Pixel in Ihrem Stream zu klassifizieren. Es ist sehr schnell und Sie sollten leicht 25 bis 30 fps bekommen, denke ich. Beachten Sie, dass dies eine Möglichkeit ist, die Farbverteilung Ihres Objekts von Interesse zu erlernen. Die gleiche Methode kann in anderen Situationen verwendet werden.

    
TH. 08.02.2013 10:49
quelle

Tags und Links