Ergebnis der Hough-Transformation zeichnen



  • Ich versuche mit gerade an der Geradenerkennung mittels Hough-TraFo. Die Transformation habe ich wohl hinbekommen. Nun würde ich gerne die gefundenen Gerade wieder ins Originalbild einzeichnen. Da ich nicht gerade ein Mathe-Ass bin, fehlt mir irgendwie der rechte Ansatz. Wie also komme ich mit Winkel und Abstand zum Nullpunkt zu den Koordinaten der Punkte der Geraden?



  • Hi.

    Es gibt verschiedene Möglichkeiten, die Hough-Transformation zur Erkennung von Geraden zu formulieren. Letztendlich beruht die Hough-Transformation ja darauf, dass Du eine geometrische Form, wie zum Beispiel hier die Gerade durch wenige Parameter darstellst. Die Frage ist halt, welche Parameter man nimmt. Du hast hier einen Winkel genannt. Welcher Winkel ist das bei Dir? Ist das der Winkel zwischen x-Achse und kürzester Verbindung zwischen Gerade und Ursprung? Oder ist das ein anderer Winkel?



  • Gregor@Uni schrieb:

    Welcher Winkel ist das bei Dir? Ist das der Winkel zwischen x-Achse und kürzester Verbindung zwischen Gerade und Ursprung?

    Ja, Volltreffer. Ich habe auch vorhin eine Lösung von einem Kollegen bekommen, die zu funktionieren scheint. Wenn es dir nichts ausmacht, würde ich die gerne mal mit deiner vergleichen.



  • _matze schrieb:

    Gregor@Uni schrieb:

    Welcher Winkel ist das bei Dir? Ist das der Winkel zwischen x-Achse und kürzester Verbindung zwischen Gerade und Ursprung?

    Ja, Volltreffer. Ich habe auch vorhin eine Lösung von einem Kollegen bekommen, die zu funktionieren scheint. Wenn es dir nichts ausmacht, würde ich die gerne mal mit deiner vergleichen.

    Ich habe da momentan keine Lösung. Habe soetwas mal vor 5 Jahren oder so programmiert, aber den Code werde ich vermutlich nicht mehr auftreiben.

    Du könntest wie folgt vorgehen, um die Gerade zu rekonstruieren:

    1. Du berechnest Dir mit Abstand r und Winkel alpha den Punkt, an dem die Gerade dem Ursprung am nächsten ist. Nennen wir diesen Punkt mal (x1,y1). Dann gilt wohl x1 = cos(alpha)*r und y1=sin(alpha)*r.

    2. Die Gerade steht natürlich senkrecht auf der Verbindung zwischen Ursprung und nächstem Punkt. Damit hast Du genug Informationen, um die Beschreibung der Geraden auf folgende Form zu bringen: g(t) = (x1,y1) + t*(x2,y2).

    Wie gesagt ist der Winkel zwischen (x1,y1) und (x2,y2) 90°. Das Skalarprodukt zwischen diesen beiden Vektoren verschwindet also: x1*x2+y1*y2=0. Eine Möglichkeit für (x2,y2) ist somit offensichtlich x2=y1, y2=-x1.

    3. Jetzt kannst Du Werte für t einsetzen, um an Punkte auf der Geraden zu kommen.

    Kann sein, dass ich da oben irgendwo Mist geschrieben habe, also überdenk das am Besten nochmal, bevor Du es blind einsetzt. 😋


Anmelden zum Antworten