Länge von Linien mittels Hough

Liebe/-r Experte/-in,

Ich möchte in einem 16-Bit Graustufen Bild Linien (dunkel auf hellem Hintergrund) erkennen und deren Länge berechnen. Bisher habe ich eine Kantenerkennung durchgeführt und die Linien mit Hilfe der Hough Transformation erkannt und eingezeichnet. Nun stehe ich leider etwas auf dem Schlauch, wie ich nun die Länge der Linien berechnen kann, bzw. den Anfang und Endpunkt einer Linie festlege.

Die Implementierung erfolgt in Java als ImageJ Plugin und über jeglichen Quelltextauszüge oder ähnliches wäre ich sehr dankbar (auch in anderen Programmiersprachen etc). Im Grunde fehlt mir lediglich ein Ansatzpunkt für das Problem, die Implementierung selbst wird das kleinere Problem sein.

Vielen Dank im Voraus.

Liebe Grüße,

Munis

Hallo Munis,

es bleibt Dir wohl nichts anderes übrig, als im Kantenbild Anfangs- und Endpunkt der Linie zu suchen. Das Problem bei der Hough-Transformation ist generell, dass nicht Linien, sondern Geraden gefunden werden. Will man nun wissen, wo genau die dazu gehörige Linie verläuft, muss man eben ins Kantenbild zurück und z.B. über einen Schwellenwertoperator Anfangs- und endpunkt suchen.

Good luck, Uli.

Liebe/-r Fragende/-r,

da kann ich leider nicht helfen!
Sorry
Franz D.

Hallo Munis,
leider kann ich Dir die Hough-Transformation mathematisch auch nicht erklären, so vertieft sind meine Kenntnisse in dem Bereich leider doch nicht, sondern nur in der digitalen künstlerischen Sparte.
Tut mir leid, aber da muss ich passen.

Gruss
Sivana

Ich würde folgendes vorschlagen:

  1. führ ein Closing durch (Dillatation + Erosion), um etwaige Lücken in der „Linie“ zu füllen
  2. wandere die die durch die Hough-Transformation gefundene Linie entlang. Diese verläuft z.B. von LINKS OBEN nach RECHTS UNTEN.
  3. auf dem Weg, merke dir die Position des ersten nicht schwarzen Pixels (=ein Punkt auf der Linie => Startpunkt)
  4. merke dir auf dem Weg wieder das erste schwarze Pixel (=ein Punkt, der NICHTMEHR auf der Linie ist => Endpunkt)
  5. Benutze den Pythagoras :smile:

Hinweise:
i) Durch das Closing (siehe Punkt 1) sollten keine Lücken mehr in der Linie sein.

ii) Eventuell musst Du öfter das Closing durchführen bzw. die Dillatation entsprechend stark ausprägen. Genaugenommen brauchst Du die Errosion nicht, da Du ja auf der Hough-Geraden wanderst! Du musst nur auf Linie oder nicht-Linie prüfen auf diesem Pfad. Hauptsache die Lücken sind zu. Das Schließen der Lücken nennt man aber Closing und da ist nun einmal Errosion dabei :smile:

Ich hoffe etwas geholfen zu haben. Code in/für Java/ImageJ habe ich leider nicht. Habe immer nur C/C++ benutzt. Aber ich hoffe das Prinzip ist Dir klar?

Viele Grüße,
Murat