Ein Problem, das ich ursprünglich hier besprochen hatte, hat sich entwickelt und könnte ein wenig einfacher geworden sein, als ich es in einigen weiteren Studien untersucht und neue Informationen erhalten habe.
Unterm Strich möchte ich in der Lage sein, dieses hier gezeigte Muster mithilfe von Computer-Vision- / Bildverarbeitungstechniken zu erkennen. Wie Sie sehen, besteht das ideale Muster aus vier "Pings". Die Objekterkennung sollte sein:
- Invariante verschieben
- Horizontal ist das Bild zyklisch. (dh nach rechts drücken, kommt links heraus und umgekehrt).
- (Zum Glück) Vertikal ist es nicht zyklisch. (dh entweder nach oben oder unten drücken und es stoppt).
- Skaleninvariante (Die Pings können, wie Sie sehen, in der Dicke variieren.)
Ich könnte weiter und weiter darüber reden, aber ich habe Bilder angehängt, die beschreiben, was ich meine, siehe unten:
Natürlich können sie auch einen anderen Maßstab haben, wie aus dieser Familie hervorgeht:
Und schließlich sind hier einige "realistische" Szenarien, die zeigen, was ich tatsächlich erhalte, wo es zu Rauschen kommt, die Zeilen nach unten "verblassen" können und das Bild natürlich viele unechte Linien und Artefakte aufweist , etc.
Und natürlich gibt es als großes Finale die eindeutige Möglichkeit dieses "extremen" Szenarios:
Deshalb möchte ich noch einmal um eine Anleitung bitten, welche Computer-Machine-Vision-Techniken ich hier verwenden sollte, um das Auftreten meines Musters am besten zu erkennen , bei dem ich, wie Sie sehen können, verschiebungs- und skalierungsinvariant sein muss, und auch in der Lage sein, angemessene Ergebnisse für die realistischen Szenarien zu erhalten. (Gute Nachricht ist, dass ich es NICHT brauche, um rotatorisch invariant zu sein). Die einzige Idee, die ich bisher hatte, ist eine 2-D-Korrelation.
Ich sollte hinzufügen, dass ich in Wirklichkeit KEINE farbigen Bilder habe - ich werde nur einen Martix von Zahlen erhalten, also denke ich, dass wir über "Graustufen" sprechen.
Danke im Voraus!
PS: Für was es sich lohnt, werde ich wahrscheinlich open C V verwenden.
EDIT # 1:
Aufgrund der Kommentare habe ich die von Ihnen angeforderten Details hier hinzugefügt:
Für Merkmale, die die Daten definieren, können wir Folgendes annehmen:
Die horizontale Länge jedes Pings kann variieren, aber ich kenne die oberen und unteren Grenzen. JA für alles innerhalb dieser Schranke, NEIN für alles außerhalb. (Beispiel: Ich weiß, dass die Länge der Pings zum Beispiel zwischen 1 und 3 Sekunden liegen kann.)
Alle Pings müssen für YES 'sichtbar' sein, die letzte Zeile kann jedoch fehlen und möchte weiterhin 'YES' sagen. Sonst NEIN.
Die vertikale Länge (die "Dicke") jedes Pings kann variieren, aber auch hier kennen Sie die obere und untere Grenze. (Ähnlich wie in diesen Bildern). JA für alles innerhalb dieser Schranke. NEIN für irgendetwas draußen.
Die Höhe zwischen den einzelnen Pings sollte bei YES immer gleich sein. Wenn nicht, dann NEIN. (Beispiel: Sie können sehen, wie alle Pings die gleiche Höhe haben, ~ 110 auf der vertikalen Achse). 110 +/- 5 kann also ein JA sein, alles andere muss NEIN sein.
Ich denke, das ist alles - aber lassen Sie mich wissen, was ich noch hinzufügen kann ... (Außerdem sollte sich alles, was hier gezeigt wird, als JA registrieren, übrigens).
detect this pattern shown here
? Sind Sie nur daran interessiert, rote / gelbe Linien zu isolieren, oder möchten Sie einen Ausdruck, der die Beziehung zwischen solchen Linien berechnet? Nur Linien zu finden, kann nur eine gewisse Schwellwertbildung oder Segmentierung erfordern. Was möchtest du wirklich?Antworten:
Allgemein gesprochen gibt es zwei Hauptansätze zur Lösung dieses Problems:
ein. Template Matching oder
b. Matching mit einem parametrisierten Modell.
Ich persönlich würde angesichts der Einfachheit des Modells den zweiten Ansatz für dieses Problem vorziehen.
Schritt 1: Identifizieren Sie die Ping-Blobs
Als ersten Schritt extrahieren Sie die "Kästchen" - im Wesentlichen die gelb / blauen Quadrate. Eine einfachste Methode könnte hier darin bestehen, das Bild nur auf eine Schwelle zu setzen. Der Hintergrund scheint nicht sehr unterschiedlich zu sein, außer dass er mit zunehmendem Rauschen den Pings sehr ähnlich ist. Daher kann der Schwellenwert über das gesamte Bild hinweg global sein - und ich denke, Sie werden in der Lage sein, einen angemessenen Schwellenwert zu erhalten, der über alle Bilder hinweg funktioniert. Die Schwelle sollte jedoch intelligent sein, damit Sie so etwas wie Otsus Methode verwenden können. Siehe dies und das für mehr Referenz.
Verbesserung der Blöcke
Dies ist eine gute Möglichkeit, um störende Punkte zu entfernen, die dem Ping-Vordergrund ähneln, bei dem einige Pixel in den Pings ebenfalls blau sind. Sie benötigen hier eine morphologische Operation namens "Öffnen". Hier ist eine der Referenzen von HIPR . Für diese Art von Operationen ist eine intelligente Form erforderlich, mit deren Hilfe ähnliche Formen beibehalten und andere entfernt werden können. In Ihrem Fall können Sie horizontale Linien wählen. Am Ende haben Sie Hintergrund- und Vordergrundpixel, die die Pings sauber trennen, ohne sich zu berühren.
Schritt 2: Blöcke markieren / registrieren
Nachdem Sie die saubersten Blobs erhalten haben, können Sie diese mit 1,2,3,4 oder A, B, C, D usw. markieren. Dies wird normalerweise durch einen so genannten einfachen Algorithmus erreicht. Durchlaufen Sie jedes Pixel und erstellen Sie ein neues, wenn es einen markierten Bereich berührt und sich auch im Vordergrund befindet. Ordnen Sie es diesem Segment zu. Wenn Sie mehr als 4 wichtige Segmente finden, müssen Sie die relevantesten auswählen. Wenden Sie hier eher eine Heuristik als einen theoretischen Algorithmus an.
Schritt 3: Modellierung von Parametern
Sobald wir die wahrscheinlich besten 4 Kandidaten der 4 entsprechenden Pings erhalten haben, können Sie die Begrenzungsrahmen identifizieren - im Wesentlichen die oberen linken und unteren rechten Ecken (oder die linken und rechten Pixel sowie die oberen und unteren Reihen des Blobs). . Finden Sie den Begrenzungsrahmen, können Sie den Schwerpunkt jedes Ping-Rahmens mit einer Geldstrafe versehen.
Daher können jetzt die Abstände zwischen den Schwerpunkten berechnet werden:
Grundsätzlich haben Sie 8 Parameter Vecoter:
Schritt 4: Klassifizierung
Im letzten Schritt müssen wir nun klassifizieren, ob es ein Ping-Muster gibt, ja oder nein.
Für so etwas kann man ein schönes Bayesianisches Klassifikator-Framework haben.
Sie haben zwei Hypothesen
Zunächst studieren Sie viele Bilder, von denen Sie wissen, dass sie zum Bild gehören. Jetzt können Sie verschiedene Histogramme zeichnen oder eine Methode zur Dichteschätzung anwenden. Lesen Sie Pattern Classification von Duda Hart.
Nun zu den Testdaten
Sie können also rechnen
Sie müssen diesen Ausdruck für den Vektorausdruck kombinieren und viel Aufwand aufwenden, um die Parameterschätzung genau vorzunehmen. Aber ich überlasse Ihnen hier den grundsätzlichen Ansatz.
Bitte rechnen Sie selbst, dies ist zwar langwierig, sollte aber dennoch recht intuitiv sein.
BEARBEITEN
Da Sie bereits die spezifischen Kriterien für 110 +/- 5 Pixel definiert haben, kann der letzte Schritt einfacher sein. Sie müssen wahrscheinlich nicht alle diese Wahrscheinlichkeiten berechnen, wenn Ihre Klassifizierungskriterien festgelegt sind.
quelle
Dieses Problem scheint mir das Problem der Impulsfolge-Intervallerkennung + -schätzung zu sein. Ich werde diese Antwort mit der Zeit entwickeln müssen, aber die Art von Algorithmen, die in diesem Problem gut funktionieren , ist die maximale Wahrscheinlichkeit für ein Gitter .
quelle