Bildverarbeitung / Profiltiefe
-
Hallo,
ich suche einen Algorithmus, der die Versatztiefen in einer geschwungenen Linie erkennt und vermißt.
Bitte schaut euch die folgenden Bilder zur Verdeutlichung an:http://sbg.xm.com/Bilder/DBild.jpg
http://sbg.xm.com/Bilder/DBild2.jpgFür Ratschläge und Tips wäre ich sehr dankbar.
Herzlichen Dank Sigro
-
Kannst erst einmal Linien draus machen, ist vielleicht einfacher, geht auch bei lückenhaften Daten:
Nimmst den ersten und letzten Punkt und suchst dazwischen nach dem größten Ausreißer. Dann nimmst du den gleichen Algorithmus für 1..N und N..x und so weiter, bis du keine Aureißer mehr in den Teilstücken hast die eine bestimmte Grenze nicht unterscheiden.
Dann hast du an den Stellen was die Linien angeht: /\
Du ziehst dann eine Linie von dem linken Punkt von / zu dem rechten Punkte von \ und suchst die Mitte. Von da dann die Entfernung zu der Spitze von /\ berechnen und fertig.
-
Fellhuhn schrieb:
Kannst erst einmal Linien draus machen, ist vielleicht einfacher, geht auch bei lückenhaften Daten:
Nimmst den ersten und letzten Punkt und suchst dazwischen nach dem größten Ausreißer. Dann nimmst du den gleichen Algorithmus für 1..N und N..x und so weiter, bis du keine Aureißer mehr in den Teilstücken hast die eine bestimmte Grenze nicht unterscheiden.
Dann hast du an den Stellen was die Linien angeht: /\
Du ziehst dann eine Linie von dem linken Punkt von / zu dem rechten Punkte von \ und suchst die Mitte. Von da dann die Entfernung zu der Spitze von /\ berechnen und fertig.
Ich verstehe leider nicht 100% was Du meinst.
könntest Du mir bitte nochmal etwas genauer erklären, was Du mit bilden von Linien meist, und wie dies zu bewerkstelligen ist?Ich habe die Linie:
______/\__/\/\nur daß ich leider keine gerade sondern eine gekrümmte Linie habe, sodaß die Erkennung des linken Punktes von / und des rechten Punktes von \ nicht sehr einfach ist.
Ich habe versucht mit Hilfe der Steigung und der Krümmung ( 1. und 2. Ableitung) Anhaltspunkte für den Beginn und Ende der Versatztiefe finden.Herzlichen Dank Sigro
-
Vermutlich hast du eine Liste von Punkten im Format x/y, oder? Und der vorderste Punkt in der Liste ist der "linkeste" und der letzte der "rechteste"?
Dann erstellst du eine Linie (hast du eine 2D-Bibliothek?) zwischen diesen beiden Punkten. Die Linie ist temporär. Dann vergleichst du alle anderen Punkte mit dieser Linie. Schaust welcher davon am weitesten entfernt ist. Sagen wir das ist der Punkt an Stelle N in der Liste.
Nun führst du den gleichen Algorithmus nochmal durch, jetzt für die beiden Teile der Liste, geteilt an der Stelle N (die dann in beiden Listen drin ist). Der Algorithmus bricht dann ab, wenn der am weitesten entfernte Punkt unter einer Schwelle liegt. Ist das der Fall wird eine nicht temporäre Linie zwischen den beiden Außenpunkten erstellt und in eine Liste geschoben.
So hast du am Ende eine Liste mit aneinanderliegenden Linien:
.______./.\.__./.\../.\..
Wobei die Punkte hier für den Anfang bzw das Ende einer Linie in der Liste steht. Dann nimmst du zB die Stelle:
./.\. und verbindest den ersten und dritten Punkt zu einer Linie. Dann errechnest du den Abstand des zweiten Punktes zu eben jener Linie und hast dein Ergebnis.
EDIT:
Das ist ein Algorithmus mit dem wir mal per Laserscanner am Roboter Karten von der Umwelt erstellt haben. Funktioniert wirklich gut.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.