10 Stimmen

Anpassen eines Kurvenmusters an die Kanten eines Bildes

Ich habe ein Zielbild, das nach einer Kurve entlang seiner Kanten durchsucht werden soll, und ein Vorlagenbild, das die Kurve enthält. Was ich erreichen muss, ist, die beste Übereinstimmung der Kurve im Vorlagenbild innerhalb des Zielbildes zu finden und auf der Grundlage des Ergebnisses herauszufinden, ob es eine Übereinstimmung gibt oder nicht. Dazu gehört auch die Drehung und Größenänderung der Kurve. Das Zielbild kann die Ausgabe eines Canny-Edge-Detektors sein, wenn das die Sache einfacher macht.

Ich erwäge, OpenCV (unter Verwendung von Python oder Processing/Java oder wenn diese nur begrenzten Zugang zu den erforderlichen Funktionen haben, dann unter Verwendung von C) zu verwenden, um die Dinge praktisch und effizient zu machen, konnte jedoch nicht herausfinden, ob ich irgendwelche Funktionen (oder eine Kombination von ihnen) in OpenCV verwenden kann, die für diese Aufgabe verwendbar sind. Ich habe durch die OpenCV-Dokumentation gelesen und dachte zunächst, dass Contours diese Aufgabe erledigen könnte, aber alle Beispiele zeigen geschlossene Formen im Gegensatz zu meinem Fall, wo ich eine offene Kurve zu einem Teil einer Kante anpassen müssen.

Also gibt es eine Möglichkeit, dies entweder mit OpenCV oder mit einem bekannten Code oder Algorithmus zu tun, die Sie vorschlagen würden?

Hier sind einige Bilder, die das Problem veranschaulichen:

Template image containing the curve to be searched for

Input image to be searched for the template curve and to be matched to its edges; this can also be an edge-image, the output of a Canny Edge detector rather than the unprocessed input image

Resulting match - includes rotation and resizing

2voto

HugoRune Punkte 12240

Mein erster Gedanke war Verallgemeinerte Hough-Transformation . Allerdings kenne ich keine gute Implementierung dafür.

Ich würde es zuerst mit SIFT oder SURF auf dem Bild mit den scharfen Kanten versuchen. Normalerweise werden damit 2d-Flächen und nicht 1d-Konturen gefunden, aber wenn Sie die minimale Bounding Box um Ihre Kontur nehmen und diese als Suchmuster verwenden, sollte es funktionieren.

OpenCV hat eine Implementierung dafür: Features2D + Homographie zum Auffinden eines bekannten Objekts

Ein Problem könnte sein, ein gutes Randbild zu bekommen, diese schwarzen Formen im Hintergrund könnten ablenken.

Siehe auch diese Stackoverflow-Antwort: Bildverarbeitung: Verbesserung des Algorithmus zur Erkennung von Coca-Cola-Dosen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X