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.
nur zum Spaß habe ich das versucht:
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%