Stellen Sie sich vor, ich hätte das zweidimensionale Bild eines Hotdogs. Ich kann auf dem Hotdog zwischen seinen beiden Enden eine gerade Linie ziehen. Nennen Sie das die Mittellinie. Eine seiner Eigenschaften ist, dass es die Achse ist, um die der (2D) Hotdog das niedrigste Trägheitsmoment hat.
Wenn ich jetzt den Hotdog in einem Bogen biege, wird diese Mittellinie auch verzerren.
Wie kann ich diese gebogene Mittellinie nach einem Foto des gebogenen Hotdogs bestimmen? Der Algorithmus sollte eine geringe Menge an Rauschen in dem Bild tolerieren.
Wenn ich Ihre Frage verstehe, wollen Sie eine Linie durch Ihr Objekt, wo jeder Punkt in der Mitte des Objekts ist, dh wenn Sie von irgendeinem Punkt auf der Mittellinie ausgehen und in einer Richtung senkrecht zur Mittellinie gehen, müssen Sie Gehe die gleiche Strecke in beide Richtungen, bis du die Grenze des Objekts erreichst:
(das ist nur eine Illustration - wahrscheinlich nicht die geometrisch korrekte Mittellinie!)
Meine schnelle & schmutzige Lösung wäre, mit einer Mittelachse zu beginnen (die einfach aus Momenten erster und zweiter Ordnung berechnet werden kann) und verfeinert sie, indem Sie jeden Punkt dieser Linie nehmen und die nächsten Grenzpunkte auf einer senkrechten Linie finden in die aktuelle Richtung an diesem Punkt und verschiebe den Punkt zum geometrischen Mittelpunkt dieser beiden Punkte:
Wenn Sie dies für jeden Punkt tun, sollten Sie eine bessere Annäherung für die Mittellinie erhalten.
Ich sagte, das war schnell und schmutzig, weil ich mir nicht sicher bin, ob das Wiederholen dieses Verfahrens immer zu einer stabilen Lösung konvergiert. Es hängt wahrscheinlich davon ab, wie Sie die senkrechte Richtung der Mittellinie bei Knicken und Knicken berechnen.
Ein Weg ist es, ein physikalisch inspirierteres Modell zu verwenden:
Um diese Linie zu finden, würde ich einen Algorithmus verwenden, der den aktiven Konturen / Schlangen ähnlich ist:
Sie müssen einige Parameter für diese Glätte der Kurve anpassen (wie immer bei aktiven Konturen), aber Ihre Chancen, eine wohldefinierte und wohlbehütete Annäherung zu erhalten, sind viel besser als bei dem einfachen Ansatz oben.
Vielleicht kannst du deinen verbogenen Würstchen skelettieren
Sie müssen zuerst dreschen und dann einen Ausdünnungsalgorithmus verwenden.
Hier sind einige coole Links:
Wenn der Skelettierungsansatz nicht funktioniert, werden Sie wahrscheinlich ein schwierigeres Problem sehen - was eine Reihe von Fragen aufwirft: Wie eingeschränkt sind Ihre Formen? sind sie immer konvex? usw. Abhängig von den Antworten können Sie die Form parametrisieren.
Zunächst würde ich eine konvexe Hülle (google QHull) berechnen und dann eine Delaunay-Triangulation der Form bestimmen. Von da an glaube ich, dass Sie ein Voronoi-Diagramm berechnen und die von Ihnen benötigte Mittellinie erreichen können. Hinweis: Dies ist eine Menge Arbeit - angesichts dieses Aufwands könnte es hilfreich sein zu sehen, ob eine einfache Skelettierung ausreichend optimiert werden kann.
Sie suchen wahrscheinlich nach dem Voronoi-Diagramm, das Ihnen alle Punkte liefert, die äquidistant von den "Hot-Dog" -Kanten der Form sind - z. der Pfad / Rücken / Grat / Mittellinie in der Mitte.
Und hier ist ein Bild, um es zu visualisieren: Ссылка
Mapping dieses Bild zu Ihrem Beispiel, sind die schweren blauen Konturen Ihre "Hot Dog" Formen, und die dünne blaue Wirbelsäule / Mittellinie im Inneren ist durch das Voronoi-Diagramm gegeben. Die Punkte auf diesem Mittellinienrücken sind gleichweit von den schweren blauen Kanten entfernt.
Tags und Links language-agnostic image-processing geometry