Im Grunde möchte ich die Pixelposition eines kleinen Bildes innerhalb eines großen Bildes finden. Ich habe nach etwas Ähnlichem gesucht, aber kein Glück gehabt.
Antworten
Zu viele Anzeigen?Es hängt davon ab, wie ähnlich das Ergebnis Ihrem Suchbild sein soll. Wenn Sie versuchen, entsprechende Teile verschiedener fotorealistischer Bilder abzugleichen, werfen Sie einen Blick auf die Erkennung von Merkmalen Wikipedia-Seite. Was Sie verwenden möchten, hängt von der Umwandlung ab, die Sie von einem Bild in das andere erwarten.
Wenn Sie jedoch nach einer exakten Pixel-für-Pixel-Übereinstimmung suchen, ist eine Brute-Force-Suche wahrscheinlich schlecht. Das kann sein O(m^2*n^2)
für eine m*m
Bild, das für die Suche innerhalb einer n*n
Bild. Mit Hilfe besserer Algorithmen kann sie verbessert werden auf O(n^2)
linear mit der Anzahl der Pixel. Ein Downsampling beider Bilder und eine hierarchische Suche könnten ein guter Ansatz sein.
Sie können wahrscheinlich die AForge Rahmenwerk um so etwas zu tun. Es bietet eine Vielzahl von Bildverarbeitungswerkzeugen. Möglicherweise können Sie deren Blob-Extraktion verwenden, um Blobs zu extrahieren und diese Blobs dann mit einem gespeicherten Bild zu vergleichen und zu sehen, ob sie übereinstimmen.
Wenn die Bilder Pixel für Pixel gleich sind, können Sie damit beginnen, nach einem Pixel zu suchen, das die gleiche Farbe hat wie Pixel (0,0) im kleinen Bild. Wenn Sie ihn gefunden haben, vergleichen Sie jedes Pixel in dem Bereich, der von dem kleinen Bild abgedeckt wird. Wenn es keine Unterschiede gibt, haben Sie Ihre Position gefunden. Andernfalls beginnen Sie mit der Suche nach dem nächsten Pixel, das (0,0) entspricht.
Booyer-Moore Suche klingt hier wie eine Lösung, wenn Sie Ihre Pixel als Zeichen behandeln und nach einer genauen Übereinstimmung suchen. Es geht auch viel schneller als die Suche pro Pixel.