2009-01-18 8 views
5

Ich suche nach dem besten Weg, ein Bild in einem anderen Bild zu erkennen. Ich habe ein kleines Bild und möchte den Ort finden, an dem es in einem größeren Bild erscheint - das sind tatsächlich Screenshots. Konzeptionell ist es wie ein "Wo ist Waldo?" Art der Suche im größeren Bild.Ein Bild in einem Bild finden

Gibt es effiziente/schnelle Möglichkeiten, dies zu erreichen? Geschwindigkeit ist wichtiger als Speicher.

Edit:

Der ‚innere‘ Bild kann nicht immer den gleichen Maßstab haben aber die gleiche Drehung haben.

Es ist nicht sicher anzunehmen, dass das Bild Pixel für Pixel perfekt in dem anderen enthalten ist.

+0

Ich bezweifle Sprache ist das Problem hier. Ob Sie die richtige Bildverarbeitungs-Toolbox haben, ist der Schlüssel. – PolyThinker

+0

Muss es "genau" Pixel für Pixel übereinstimmen? Was ist mit Rotations- und Skalierungsproblemen? – chakrit

+0

@PolyThinker: True, ich werde diesen spezifischen Qualifier für die Frage fallen lassen. – dmanxiii

Antwort

7

Wikipedia hat einen Artikel auf Template Matching, mit Beispielcode.

(Während diese Seite nicht geänderten Skalen umgehen kann, hat es Links zu anderen Arten der Anpassung, zum Beispiel Scale invariant feature transform)

+0

+1, den SIFT-Algorithmus habe ich viel in http://user.cs.tu-berlin.de/~nowozin/autopano-sift/ verwendet, und es ist sehr effektiv bei dem, was es tut, sogar manchmal Bildverzerrungen behandelt. –

+0

Es gibt eine Java-Implementierung von SIFT unter http://fly.mpi-cbg.de/~saalfeld/javasift.html –

0

Sie können dies als Teilstring-Problem behandeln, wobei Zeichen im Alphabet Pixel sind und Ihre Zeichenfolge das Bild ist. Sie müssten auch ein Sonderzeichen ähnlich einem Zeilenumbruch verwenden, um die Bildgrenze zu kennzeichnen.

Die Algorithmus Sie wollen, ist auf wikipedia: http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm

Update: Wenn Sie nicht, dass das Bild annehmen können perfekt in den anderen, Pixel für Pixel enthalten ist, dann wird dieser Ansatz nicht funktionieren.

Es gibt andere, kompliziertere Algorithmen, die auf dem gleichen dynamischen Programmierkonzept wie oben basieren, aber ich werde nicht auf sie eingehen, wenn es nicht notwendig ist.

+0

Wenn die Bilder JPEGs sind, werden Sie Kopfschmerzen haben :-) – PolyThinker

+0

Ja. Das ist ein sehr, sehr guter Punkt. Wenn Sie nicht von einer perfekten Übereinstimmung ausgehen können, dann wird der Begriff "beste", weil schwierig und "effizient/schnell" schwierig. Sie müssten etwas tun, das auf Energieminimierung/dynamischer Programmierung basiert. – Owen

+0

Abgestimmt, weil solche Methoden bei Bildern überhaupt nicht funktionieren. – endolith