Laden...

(2D) Line rechts oder links erkennen

Erstellt von Gerry100 vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.017 Views
G
Gerry100 Themenstarter:in
5 Beiträge seit 2017
vor 6 Jahren
(2D) Line rechts oder links erkennen

Hallo

Ich habe ein Problem seit Tagen.

Ich müsste ermitteln welche blaue Linie sich rechts oder links von der schwarzen Hauptlinie befindet.

Abstand Zwischen den blauen und schwarzen Linie ist bekannt.

Denkrichtung der schwarzen Linie ist immer vom Kreis zum Endpunkt der Linie.

Wie macht man sowas?

Mfg
Gerry

C
2.122 Beiträge seit 2010
vor 6 Jahren

Was kriegt der, der diese Frage versteht?

Hast du ein Bild oder Geradengleichungen? Das macht einen fundamentalen Unterschied.
Wozu braucht man den Abstand?
Es sind auf beiden Seiten Linien, was soll man hier tun?
Was ist wenn die Linien horizontal verlaufen und es kein links&rechts gibt?

212 Beiträge seit 2008
vor 6 Jahren

Guten Morgen,

wenn sich deine Frage auf ein Bild bezieht, dann könnten folgende Google Matches möglicherweise helfen:

AForge.Net:
Detecting straight lines in an image

Das könnte auch eine Lösung werden:
OCR Line Detection

Berichte doch bitte über den Status wie du weiter kommst, finde ich interessant! Ich habe eventuell bald etwas ähnliches zu erledigen, ich soll eingescannte Line-Charts in "Rohdaten" transformieren, damit diese in einer Datenbank abgelegt und gesucht werden können. Das wird sicher spannend, da die Dokumente teileweise >20 Jahre sind.

Gruß
Christoph

5.658 Beiträge seit 2006
vor 6 Jahren

Hi Gerry100,

mit ein bißchen Vektorrechnung kannst du die Positionen der blauen Linien berechnen. Angenommen, du hast eine schwarze Linie mit dem Anfangspunkt A und dem Endpunkt B, dann kannst du den Richtungsvektor D der Linie folgendermaßen berechnen:

D = Normalize(B - A)

Daraus kannst du dann die beiden Vektoren berechnen, die von der Linie aus nach rechts und links zeigen:

RightVector = new Vector(D.Y, -D.X)
LeftVector = new Vector(-D.Y, D.X)

Die Abstände der blauen Linien sind gegeben, daher kannst du die Anfangs- und Endpunkte der blauen Linien berechnen:

A1 = A + (distanceRight * RightVector)
B1 = B + (distanceRight * RightVector)

bzw.

A2 = A + (distanceLeft * LeftVector)
B2 = B + (distanceLeft * LeftVector)

Jetzt kannst du die Anfangs- und Endpunkte der vorhandenen Linien mit den berechneten Punkten vergleichen, um die existierenden blauen Linien zu finden. Dazu solltest du eine bestimmte Toleranz mit einbeziehen, da durch die Berechnung u.U. Ungenauigkeiten verursacht werden.

Da mir allerdings auch nicht klar ist, was du eigentlich als Ausgangsdaten vorliegen hast, brauchst du ggf. weitere Schritte, um an die Positionen der Linien zu kommen. Liegt dir bspw. nur ein Bitmap mit den Linien vor, mußt du vorher Bilderkennungs-Algorithmen verwenden, um die Linien zu extrahieren.

Weeks of programming can save you hours of planning