OpenCV-Vorlagen im 2D-Punktdatensatz

8

Ich war am Wandern, was der beste Ansatz wäre, um 'Zahlen' in einer Anordnung von 2D Punkten zu entdecken.

In diesem Beispiel habe ich zwei "Vorlagen". Abbildung 1 ist eine Vorlage und Abbildung 2 ist eine Vorlage. Jede dieser Vorlagen existiert nur als Vektor von Punkten mit einer x, y-Koordinate.

Nehmen wir an, wir haben einen dritten Vektor mit Punkten mit x, y-Koordinate

Was wäre der beste Weg, um Punkte zu finden und zu isolieren, die mit einem der ersten zwei Arrays im dritten übereinstimmen? (einschließlich Skalierung, Rotation)?

Ich habe versucht, nächste Nachbarn (FlannBasedMatcehr) oder sogar SVM-Implementierung, aber es scheint nicht zu mir Ergebnis, Vorlage Matching scheint nicht der Weg zu gehen, entweder, denke ich. Ich arbeite nicht an Bildern, sondern nur an 2D-Punkten im Speicher ...

Insbesondere weil der Eingabevektor immer mehr Punkte hat als der ursprüngliche Datensatz, mit dem verglichen werden soll.

Sie müssen nur Punkte in einem Array finden, die mit einer Vorlage übereinstimmen.

Ich bin kein "Spezialist" für maschinelles Lernen oder opencv. Ich denke, ich übersehe etwas von Anfang an ...

Vielen Dank für Ihre Hilfe / Vorschläge.

    
Wim Vanhenden 17.12.2013, 19:10
quelle

1 Antwort

5

nur zum Spaß habe ich das versucht:

  1. Wählen Sie zwei Punkte des Punktdatensatzes und berechnen Sie die Transformation, indem Sie die ersten beiden Musterpunkte auf diese Punkte abbilden.
  2. Testen Sie, ob alle transformierten Musterpunkte im Datensatz gefunden werden können.

Dieser Ansatz ist sehr naiv und hat eine Komplexität von O(m*n²) mit n Datenpunkten und ein einzelnes Muster der Größe m (Punkte). Diese Komplexität könnte für Suchmethoden für den nächsten Nachbarn erhöht werden. Sie müssen also überlegen, ob es für Ihre Anwendung nicht effizient genug ist.

Einige Verbesserungen könnten eine Heuristik beinhalten, um nicht alle n² Kombinationen von Punkten zu wählen, aber Sie benötigen Hintergrundinformationen über die maximale Skalierung von Mustern oder ähnliches.

Zur Auswertung habe ich zuerst ein Muster erstellt:

Dann erstelle ich zufällige Punkte und füge das Muster irgendwo hinzu (skaliert, gedreht und übersetzt):

Nach einiger Berechnung erkennt diese Methode das Muster. Die rote Linie zeigt die gewählten Punkte für die Transformationsberechnung.

Hier ist der Code:

%Vor%     
Micka 07.01.2014, 15:28
quelle

Tags und Links