Bildverarbeitung: Geometrische Formen erkennen

Neue Frage »

Auf diesen Beitrag antworten »
Naryxus Bildverarbeitung: Geometrische Formen erkennen

Hallo,

meine Gruppe und ich arbeiten an einem Praktikum, in dem wir geometrische Formen erkennen müssen.
Prinzipiell wollen wir das ganze über Machine Learning realisieren.

Als Eigenschaftsvektor für die Testdaten haben wir uns überlegt, die Anzahl der Ecken, bzw. der Kanten und den Abstand zwischen Start- und Endvektor zu verwenden.

Wir wollen erstmal die Formen "Linie", "Dreieck", "Rechteck" und "Kreis" erkennen.

Findet ihr erstmal die Wahl der Merkmale für die geometrischen Formen sinnvoll?

Unser nächster Schritt beschäftigt sich dann damit, aus einer Menge von Ortsvektoren (Mauskoordinaten auf dem Bildschirm) die Eigenschaften abzuleiten.
Der Abstand zwischen Start- und Endvektor ist dabei geschenkt.

Unser Problem ist viel eher das Ableiten der Anzahl der Ecken, bzw. der Kanten.

In unserem ersten Versuch haben wir jeweils immer gleiche Richtungsvektoren (zwischen Ortsvektoren) zusammengefasst, um so längere Richtungsvektoren zu erhalten. Eine Ecke haben wir dann erkannt, wenn der darauf folgende Richtungsvektor eine andere Richtung wie der vorhergehende Vektor einschlägt und mindestens eine bestimmte prozentuale Länge des vorhergehenden Vektors aufweist.

DIeser Versuch hat allerdings für die Klassen "Dreieck", "Rechteck" und "Kreis" durchaus ähnliche Ergebnisse geliefert. Somit ist das Verfahren ungenügend (auch bei Anpassen der prozentualen Länge).

Ein anderer Ansatz, den wir uns überlegt haben, der aber noch nicht vollends ausgereift ist, ist es auf Grundlage eines gerade betrachteten Richtungsvektors eine Vorhersage zu treffen, wo sich der nächste Vektor befinden könnte und dort dann in einem bestimmten Akzeptanzbereich zu suchen und den aktuell betrachteten Richtungsvektor bei einem erfolgreichem Fund eines Vektors auf das arithmetische Mittel der beiden Richtungsvektoren zu aktualisieren.

Haltet ihr diesen Ansatz für sinnvoll? Habt ihr andere Ideen? Wir stecken da momentan ziemlich in der Sackgasse.


Grüße, Naryxus
 
Auf diesen Beitrag antworten »
eulerscheZahl

Die Anzahl der Ecken ist ein gutes Kriterium.
Es empfiehlt sich, mehrere Merkmale zu kombinieren, wenn du mehrere findest.
Wenn du die Fläche eines Körpers (=Anzahl der eingeschlossenen Pixel) in Relation zu seinem Umfang setzt, sollten Linie und Kreis recht leicht zu finden sein.
Ich kenne deine Ausgangsbilder nicht, falls du die Kanten erst finden musst, empfehle ich Sobel.
Auf diesen Beitrag antworten »
Naryxus

Danke für deine Antwort.

Das Problem an der ganzen Geschichte ist, dass wir nicht auf Bildern arbeiten, sondern tatsächlich auf einer Menge von dreidimensionalen Vektoren.
Das ganze ist ein Unity Projekt, das Gesten erkennen soll. Dazu wird die Bewegung der Maus aufgezeichnet. Diese ergibt dann im Optimalfall eine saubere geometrische Form.
Natürlich wird niemand einfach so einen perfekten Kreis zeichnen. Und da kommen dann halt unsere Akzeptanzkriterien zum Tragen.

Lösungen für tatsächliche Schwarz-Weiß Bilder habe ich auch schon ein paar gefunden. Ich weiß nur nicht, inwieweit die sich auf eine Liste von Vektoren anwenden lassen.

Grüße, Naryxus
Auf diesen Beitrag antworten »
eulerscheZahl

Durch die Vektoren wird es einfacher, da du nicht mehr erkennen musst, wie die Kante verläuft. Der Extraktionsschritt entfällt.
Wenn du einen Knick feststellst und dir nicht sicher bist, ob es nur ein Wackler ist, kannst du auch prüfen, ob sich die Tendenz bei den nächsten Vektoren bestätigt.
Und wenn die Vektoren zu kurz sind würde ich sie zusammenfassen, das verringert die Wackler (kann aber auch Ecken abrunden).
 
Auf diesen Beitrag antworten »
Naryxus

Unser Problem ist nur die Umsetzung von der Analyse großes Grinsen

wir verfolgen jetzt den ansatz, dass wir zwischen zwei aufeinanderfolgenden vektoren die geradengleichung berechnen und schauen, ob der nächste vektor mit einer toleranz auf der geraden liegt.

wir müssen nur mal diese umsetzung auf korrektheit überprüfen.

Grüße
Auf diesen Beitrag antworten »
eulerscheZahl

Ich kann mal versuchen, ob ich es vernünftig hinbekomme (wird aber wohl erst Donnerstag klappen).
Habe aber keine Lust, komplett von vorn anzufangen, könntest du die Koordinaten zu den Objekten anhängen, die du erkennen willst?
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »