Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#1

Krümmung einer Linie

  Alt 6. Aug 2009, 01:30
Aloah!

Ich zermürbe mir gerade die Birne. Ich habe hier Listen von zusammenhängenden Punkten (Integer-Koordinaten), die jeweils eine wie-auch-immer geformte Linie bilden. (Sie sind das Ergebnis einer Kantenerkennung.)

Nun muss ich diese Linien auf "interessante" Punkte reduzieren, wobei interessant hier heisst, dass ein bedeutsamer Richtungswechel passiert. Dabei bereitet mir u.a. Probleme, dass bei den int-Koords von einem Pixel zum nächsten ja schon nur noch 45°-Schritte passieren, also muss ich die Tangenten schon mal über die Punkte um einen Probanden herum approximieren. So weit so schlecht!

Eine Richtungsänderung muss nicht zwangweise abrupt von statten gehen, sondern es können auch mehr oder weniger lang gezogene Kurven auftauchen, so dass ich nicht einfach die geschätzten Tangenten benachbarter Punkte vergleichen kann. Diese sind in solchen fällen nämlich immer sehr ähnlich, auch wenn das gesamte Gebilde gerade dabei ist eine 90° Kurve zu machen.

Wenn ich aber nun vom Punkt 0 die Tangente schätze, und dann immer mit dem Winkel der Geraden zwischen Punkt 0 und dem aktuellen vergleiche, gehen mir zum Teil kleinere Unebenheiten flöten, z.B. ein kleiner dreieckiger Ausreisser in einer längeren Kurve. Das verschlimmert sich zudem mit zunehmendem Abstand von Punkt 0.

Ich komme also mit der lokalen Krümmung nicht weiter, da diese eben klein sein kann, dafür aber über lange Strecken. Sowas muss ich auch unterteilen. Ich kann auch nicht von der Gesamtkrümmung ab Anfang arbeiten, weil mir dann lokale (aber wichtige) Details durch gehen.

Ich suche daher also nach einem Verfahren, dass mir Punkte liefert, die die gegebene Punktliste quasi ausreichend Annähert. Wären diese Listen Splines, ließe sich da mit Optimierungsverfahren was machen, aber es sind halt einfache diskrete Listen. (Und nein, diese vorher in Splines zu verwandeln ist kein weg. Zumal es durchaus eine ähnliche Problematik ergäbe.)

Help?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat