Interpolation: Bezier oder normal kubischer Spline

Neue Frage »

Pixelschubser Auf diesen Beitrag antworten »
Interpolation: Bezier oder normal kubischer Spline
Hallo,

ich habe hier für ein Projekt die Aufgabe in einem Bild diverse Abstände einer Form automatisch zu vermessen.

Bisher bin ich soweit, dass ich über diverse Mechaniken den Rand der offenen Form auf x/y-Koordinaten reduziert habe. Die Koordinaten liegen auch sortiert, schön von Anfang bis Ende in einem Array vor.

Um eine bestimmte Strecke innerhalb der Form von Rand zu Rand zu messen brauche ich jetzt das Loot auf den Rand.

Habe mal ein paar Koordinaten des Randes geplottet und als Bild angehängt.

[attach]44102[/attach]

Auf dem Bild sieht das evtl. wie eine Gerade aus, ist es aber nicht Augenzwinkern . Bei zuvielen Koordinaten hätte man einfach nichts mehr erkannt.

Jetzt kann ich ja nicht einfach zwei Punkte verbinden und die Steigung bestimmen, sondern muss das interpolieren.

Ich hatte schon in einem Programmierforum gefragt, da hat mir man einen Spline empfohlen. Ich bin mir jetzt aber unschlüssig welche Sorte und das is ja eher ein mathematisches Problem. =)

Ich schwanke konkret zwischen einem natürlichen kubischen Spline und einer Bezierkurve.
Der kubische Spline geht ja durch alle ausgewählten Punkte durch, wohingegen die Bezierkurve, je nach Krümmung auch neben Punkten verlaufen kann.

Hat beides ja irgendwie Vorteile. Einerseits sind die Punkte ja nunmal der Rand und eine Kurve außerhalb wäre falsch, andererseits hat das Bild durch die Aufnahme ja eh schon einen Abbildungsfehler und Bezierkurve wäre ja vielleicht doch näher dran am original Objekt, gerade weil vielleicht Ausreißer besser geglättet werden.

Oder ist es am Ende eher egal, weil ich für den kubischen Spline ja nicht jeden Punkt nehmen kann, sondern z.B. nur jeden 15. und damit die Kurve eh glatt genug wäre?

Woran macht kann man denn fest machen was die sinnvollere Entscheidung wäre? Bin da etwas ratlos.

Wenn es egal ist, würde ich den kubischen Spline nehmen, den hab ich schonmal programmiert Hammer
Steffen Bühler Auf diesen Beitrag antworten »
RE: Interpolation: Bezier oder normal kubischer Spline
Von den optischen Abbildungsfehlern abgesehen, die hier unbekannt sind, sieht man bei Deinen Daten besonders, dass die Pixelauflösung das Messergebnis verfälscht. Somit kannst Du Dich auf die absoluten Koordinaten eines Pixels nicht verlassen. Zum Beispiel kann der Punkt (220|134) sowohl horizontal als auch vertikal um plus/minus einen Pixel danebenliegen.

Das bedeutet, Du solltest, bevor Du weitermachst, erstmal die Kurve glätten. Ich würde aus genannten Gründen immer drei Punkte zusammenfassen. Beispielsweise ergeben die ersten drei Punkte (199|124), (200|124) und (201|125) den gemittelten Punkt (200|124,333). Und so weiter.

Auf diese Punkte kannst Du Dich dann einigermaßen verlassen. Und um das Lot zu fällen, würde ich in diesem Fall sogar den einfachen Zwei-Punkte-Ansatz nehmen.

Viele Grüße
Steffen
Pixelschubser Auf diesen Beitrag antworten »

Hallo,

der Vorschlag, den Mittelwert aus 3 Pixeln zu bilden gefällt mir gut. Hab das mal umgesetzt, aber die Werte wären immernoch nicht glatt genug aus meiner Sicht.

[attach]44103[/attach]

Die aufgenommene Kante hat eine unbekante, beliebige Krümmung da kann ich ja jetzt noch nicht das Lot fällen. Die lokalen Unregelmäßigkeiten hätten noch zuviel Gewicht, da zeigt das Lot ja sonst wo hin Big Laugh

Aber ich könnte doch abhängig von der Gesamtlänge der Kurve und dem "optischen Eindruck", noch x-mal Mitteln um dann entweder direkt die Steigung zu nehmen oder zu interpolieren.

Wäre die Frage wie der "optische Eindruck" in Software umgesetzt werden könnte.

Oder eben doch direkt interpolieren jetzt, wobei jeder x-te Punkt genommen werden würde :|
Steffen Bühler Auf diesen Beitrag antworten »

Ich fürchte, Du musst etwas mehr über die Anwendung verraten. Ich schreib mal auf, wie ich's verstehe.

Du schreibst, dass Du
Zitat:
eine bestimmte Strecke innerhalb der Form von Rand zu Rand

messen willst.

Es gibt da also offenbar eine Form, was immer das ist. Sagen wir mal ein Schuhkarton. Von dem hast Du Kameraaufnahmen der Kanten, das ist dann das, was Du "Rand" nennst. Nun willst Du exakte Enfernungen von bestimmten Punkten auf zweien dieser Ränder bestimmen. Daher brauchst Du die Senkrechte auf den gemessenen Rand.

Nun ist dieser Rand aber nicht ganz gerade, es gibt überall "Hubbel". Bisher dachte ich, dass Dich genau diese Hubbel interessieren und Du jeweils da die Senkrechte brauchst.

Allmählich glaube ich aber, Du willst einfach eine Ausgleichsgerade durch die gegebenen Punkte legen und dann von dieser die Senkrechte bestimmen. Kann das sein? Dann würde ich Dir die Linearregression ans Herz legen.

Oder hab ich es immer noch nicht verstanden?
Pixelschubser Auf diesen Beitrag antworten »

Ist etwas schwer zu erklären, das original Bild darf ich leider nicht einfach hochladen.

Hab mal was ähnliches gepinselt:

[attach]44110[/attach]

Die schwarze Linie ist meine Kante. Aber weil das Original ein Foto ist und keine Zeichnung, ist die original Kante nicht so glatt wie hier im Bild, sondern unterschiedlich breit, unterschiedlich dunkel, hat Lücken etc.

Von der Qualität sieht das dann aus wie in meinem ersten Anhang, der einen Ausschnitt der Gesamtkurve zeigt.

Jetzt soll ich eine Normale (blau), im roten Bereich, nach innen auf den unteren Teil des Randes stellen und schauen wie lang die Normale innerhalb der Form ist.

Daher muss es so glatt sein, dass die Normale da nicht rumzappelt. ^^
Steffen Bühler Auf diesen Beitrag antworten »

Hier würde ich dann statt einer Ausgleichsgerade eine Ausgleichsparabel berechnen, dritte Ordnung sollte ausreichen. Also kein Spline, sondern eine kubische Funktion, die die Punkte bestmöglich fittet. Von der nimmst Du dann die Steigung bei den interessierenden Stellen und berechnest die Normale.

Viele Grüße
Steffen
 
 
Pixelschubser Auf diesen Beitrag antworten »

Hmm, hatte gedacht, dass das bei sehr vielen Messpunkten evtl. zu langsam wäre.

Aber hat gut funktioniert smile
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »