12

gibt es zwei Bilderwie Hintergrundbild zu entfernen und Vorder Bild

alt text http://bbs.shoucangshidai.com/attachments/month_1001/1001211535bd7a644e95187acd.jpg alt text http://bbs.shoucangshidai.com/attachments/month_1001/10012115357cfe13c148d3d8da.jpg ist Hintergrundbild ein anderes mit dem gleichen Hintergrund, gleiche Größe, was ich das entfernen tun wollen ist, ist ein Foto einer Person erhalten Hintergrund des zweiten Bildes und destilliere nur das Profil der Person. Die gängige Methode ist, das erste Bild vom zweiten zu subtrahieren, aber mein Problem ist, wenn die Farbe der Abnutzung der Person dem Hintergrund ähnlich ist. Das Ergebnis der Subtraktion ist schrecklich. Ich kann nicht das ganze Profil der Leute bekommen. Wer hat eine gute Idee, den Hintergrund zu entfernen, geben Sie mir einen Rat. danke im voraus.

+0

Uh was? Kannst du das Bild auf Photobucket oder so platzieren, damit wir sehen können, worüber du redest? Sie haben zwei Fotos, die Pixel für Pixel zusammengesetzt sind? Sprechen Sie über Chroma Keying (http://en.wikipedia.org/wiki/Chroma_key)? – metal

+0

Nein, einfach gesagt, es ist eine Methode, Hintergrund von einer Person Fotografie zu entfernen. – carl

+0

können Sie wirklich mit der Umschreibung der Frage mit einem Bild Beispiel tun, ist es wirklich schwer zu verstehen, was Sie wollen – Alex

Antwort

15

Wenn Sie eine gute Schätzung des Bildhintergrunds haben, ist es ein guter erster Schritt, sie vom Bild mit der Person zu subtrahieren. Aber es ist nur der erste Schritt. Danach müssen Sie das Bild zu segmentieren, dh man das Bild in „Hintergrund“ zu partitionieren hat und „Vordergrund“ -Pixel, mit Einschränkungen, wie diese:

  1. in den Vordergrundbereichen, die durchschnittliche Differenz aus dem Hintergrundbild sollte hoch sein
  2. in den Hintergrundbereichen sollte der durchschnittliche Unterschied von dem Hintergrundbild niedrig sein
  3. die Bereiche sollten glatt sein. Umrisslänge und Krümmung sollten minimal sein.
  4. die Grenzen der Gebiete

Wenn Sie mathematisch geneigt sind, können diese Einschränkungen modelliert werden perfekt mit dem Mumford-Shah funktionellen einen hohen Kontrast im Quellbild haben sollte.See here for more information.

Aber Sie können wahrscheinlich andere Segmentierungsalgorithmen an das Problem anpassen.

Wenn Sie eine schnelle und einfache (aber nicht perfekt) Version möchten, können Sie dies versuchen:

  • subtrahieren die beiden Bilder
  • den größten in Folge „Blob“ von Pixeln finden mit einem Hintergrund-Vordergrund Differenz größer als ein Schwellenwert. Dies ist die erste grobe Schätzung für den "Personenbereich" im Vordergrundbild, aber die Segmentierung erfüllt nicht die obigen Kriterien 3 und 4.
  • Finden Sie den Umriss des größten Blobs (BEARBEITEN: Beachten Sie, dass Sie nicht am Umriss beginnen müssen. Sie können auch mit einem größeren Polygon beginnen, da die Schritte automatisch zur optimalen Position schrumpfen.)
  • jetzt gehen Sie durch jeden Punkt in der Gliederung und glätten Sie den Umriss. dh für jeden Punkt den Punkt finden, der die Formel minimiert: c1 * L - c2 * G, wobei L die Länge des Umrisspolygons ist, wenn der Punkt hier bewegt wurde und G der Gradient an der Stelle ist, an die der Punkt verschoben würde, c1/c2 sind Konstanten zur Steuerung des Prozesses. Bewegen Sie den Punkt an diese Position. Dies hat die Wirkung, das Konturpolygon in Bereichen mit geringem Gradienten in dem Quellenbild zu glätten, während es an hohe Gradienten in dem Quellenbild (d. H. Die sichtbaren Grenzen der Person) gebunden bleibt. Sie können verschiedene Ausdrücke für L und G ausprobieren, zum Beispiel könnte L die Länge und Krümmung berücksichtigen, und G könnte auch den Gradienten im Hintergrund und subtrahierte Bilder berücksichtigen.
  • müssen Sie wahrscheinlich das Umrisspolygon neu normalisieren, d. H. Sicherstellen, dass die Punkte auf dem Umriss regelmäßig beabstandet sind. Entweder das, oder stellen Sie sicher, dass die Abstände zwischen den Punkten im vorherigen Schritt gleich bleiben. („Geodätische Schlangen“)
  • wiederholen Sie die letzten beiden Schritte, bis Konvergenz

Sie haben nun einen Umriss Polygon, das die sichtbare Person-Hintergrund Grenze berührt und weiterhin reibungslos verläuft, wo die Grenze nicht sichtbar ist oder einen geringen Kontrast hat. Suchen Sie nach "Snakes" (e.g. here) für weitere Informationen.

+1

vielen Dank! Du bist sehr gut und professionell. – carl

+0

Haben Sie einen gültigen Zeiger für die Mumford-Shah-Hintergrundtrennung? Der obige Link ist nicht mehr gültig. Und ja - ich weiß, ich bin ein bisschen spät zum Spiel ... – nimrodm

+1

@nimrodm: Ich habe den Link aktualisiert. Aber das war nur der erste Erfolg bei Google Scholar. – Niki

-3

Posten Sie das Foto auf Craigslist und sagen Sie ihnen, dass Sie $ 5 für jemanden bezahlen werden, um es zu tun.

Garantiert werden Sie Treffer in Minuten bekommen.

+7

nie. Ich bin ein armer Mann. $ 5 können mich eine Woche füttern. – carl

-3

Anstelle einer geraden Subtraktion können Sie beide Bilder Pixel für Pixel durchlaufen und nur die Pixel "subtrahieren", die genau gleich sind. Das wird natürlich nicht für geringe Farbabweichungen verantwortlich sein.

+1

das kann Problem sein, wegen der Lichtbedingung ist nicht stabil – carl

+1

-1: Das ist genau die gleiche Sache wie Subtrahieren alles und dann einen Schwellenwert von 0 einstellen. Auch wenn Beleuchtung wäre statisch gibt es keine Garantie, dass die Pixel in zwei aufeinander folgenden Frames sind sehr ähnlich. –

+0

Dies ist eine sehr primitive Art, zwei Bilder zu vergleichen. Die Verwendung von Schwellen- und Nachbarschaftsinformationen liefert im wirklichen Leben bessere Ergebnisse. – Winfred

1

Eine Technik, die ich denke, ist üblich, eine mixture model zu verwenden. Nehmen Sie eine Reihe von Hintergrundbildern auf und erstellen Sie für jedes Pixel ein Mischmodell für seine Farbe.

Wenn Sie einen Rahmen mit der Person darin anwenden, erhalten Sie eine Wahrscheinlichkeit, dass die Farbe Vordergrund oder Hintergrund ist, angesichts der Wahrscheinlichkeitsdichten im Mischungsmodell für jedes Pixel.

Nachdem Sie P (Pixel ist Vordergrund) und P (Pixel ist Hintergrund) haben, könnten Sie nur die Wahrscheinlichkeit Bilder Schwellen.

Eine andere Möglichkeit besteht darin, die Wahrscheinlichkeiten als Eingaben in einem etwas schlaueren Segmentierungsalgorithmus zu verwenden. Ein Beispiel ist , das, wie ich bemerkt habe, recht gut funktioniert.

Wenn jedoch die Person Kleidung trägt, die visuell vom Hintergrund nicht zu unterscheiden ist, würde offensichtlich keine der oben beschriebenen Methoden funktionieren. Sie müssten entweder einen anderen Sensor (wie IR oder UV) bekommen oder ein ziemlich kompliziertes "Personenmodell" haben, das die Beine in der richtigen Position "hinzufügen" könnte, wenn es findet, was es für einen Torso und Kopf hält.

Viel Glück mit dem Projekt!

+0

Gute Lösung. Wenn ich hinzufügen kann, ein guter Algortithm könnte sein: – nav

4

Tiefpassfilter (Unschärfe) die Bilder, bevor Sie sie subtrahieren. Verwenden Sie dann dieses Differenzsignal als Maske, um die interessierenden Pixel auszuwählen. Ein Filter mit ausreichend großem Filter ignoriert die zu kleinen (hochfrequenten) Funktionen, die dazu führen, dass "schreckliche" Bereiche in Ihrem Objekt von Interesse entstehen. Es reduziert auch die Hervorhebung von Pixel-Level-Rauschen und Fehlausrichtung (die Information mit der höchsten Frequenz).

Wenn Sie mehr als zwei Frames haben, können Sie durch die Einführung einer gewissen Zeithysterese auch stabilere Regionen von Interesse bilden.

0

Hintergrund vs Vordergrunderkennung ist sehr subjektiv. Das Anwendungsszenario definiert Hintergrund oder Vordergrund. Aber in der Anwendung, die Sie detailliert beschreiben, schätze ich, dass Sie implizit sagen, dass die Person der Vordergrund ist. Unter Verwendung der obigen Annahme suchen Sie einen Personenerkennungsalgorithmus.Eine mögliche Lösung ist:

  1. Führen Sie ein Haar Merkmalsdetektor + Kaskade Schwachklassifizierer verstärkt (die opencv wiki für Details)
  2. Compute Inter-Frame-Bewegung (Unterschiede)
  3. Wenn a + ve Gesichtserkennung für einen Rahmen, cluster Bewegungspixel um das Gesicht (kNN algorithm)

voila ... du solltest einen einfachen Personendetektor haben.