5

Die letzten paar Tage habe ich auf der Suche nach Kurvenrekonstruktion Implementierungen und fand keine - weder als eine Bibliothek noch als ein Werkzeug.Kurve Rekonstruktion Implementierung

Um mein Problem zu beschreiben.

Mein Hauptanliegen sind Konturen mit Lücken: img

Von Papiere, die ich in der Zwischenzeit gelesen habe, ich denke Lösung Nutzung von Delaunay-Triangulation erfordert und das Verfahren verwiesen die meisten scheint 1997 Papier beschrieben werden "The Crust and the β-Skeleton: Combinatorial Curve Reconstruction "

Kann mir jemand auf eine Implementierung der Kurvenrekonstruktion verweisen, die mir helfen kann, dieses Problem zu lösen?

+1

Obwohl Sie bereits eine Antwort ausgewählt haben, wenn das Problem von Interesse bleibt Suche nach "Kurvenvervollständigung" und "Konturvervollständigung", die Ihnen wahrscheinlich mehr Treffer geben wird. Für diese Art von Problem sind Euler-Spiralen eine gute Lösung, da ein Euler-Spiralkrümmungs-Vervollständigungsalgorithmus selbst bei großen Lücken eine "natürliche" Anpassung ergeben kann. – Rethunk

+0

Danke @Rethunk.Ich blätterte ein paar Artikel zu diesem Thema durch und es sieht so aus, als ob es für die Einzelkurvenrekonstruktion geeignet ist, anstatt für die Konturenrekonstruktion. Wissen Sie vielleicht, ob es in einer Bibliothek oder Umgebung implementiert ist, die ein einfaches Testen ermöglicht? – theta

+1

Vor etwa einem Jahr habe ich einige Ressourcen gefunden, darunter auch C++ - Code. Ich postete die Links hier: http://StackOverflow.com/Questions/6828359/How-To-Draw-clothoids-graphical-in-qt/8890013#8890013 – Rethunk

Antwort

1

Algorithm in CGAL implementiert ist. Die Beispielimplementierung kann in C++ im CGAL ipelets Demopaket gesehen werden. Noch die Demo-Kompilierung ermöglicht dem Benutzer, den Algorithmus in ipe GUI application Anwendung:

img

Im obigen Beispiel habe ich nur ein Teil meines Bildes ausgewählt, als Fußzeilen nicht notwendigen Anforderungen erfüllen, so Kruste nicht angewendet werden kann, auf dieser Teil bis zur Korrektur. Außerdem muss das Bild abgetastet werden, wie man sehen kann.

Wenn niemand ein anderes Implementierungsbeispiel bereitstellt, werde ich meine Antwort nach einigen Tagen als korrekt markieren.

0

Die Delaunay-Triangulation verwendet eine diskretisierte Kurve und verliert dadurch Informationen. Das kann seltsame Probleme verursachen, wenn Sie sie nicht erwarten. In Ihrem Beispiel würde wahrscheinlich der mittlere Teil an der unteren Grenze ein Problem verursachen.

In diesen Situationen ist es vielleicht gut, relevante Informationen vom Modell zu sammeln und zu versuchen, eine Übereinstimmung zu erzielen.

So etwas, für jeden Endpunkt sammeln Kontur Ableitung in einer Umgebung. Dann finden Sie alle Endpunkte, mit denen dieser Endpunkt verbunden werden kann, mit einer ungefähren Ableitungsrichtung, und diese Verbindung kreuzt keine andere Linie. Es ist möglich, eine mögliche Verbindung durch Gelenkdistanz und Abweichung von der lokalen Ableitung zu gewichten. Die Gewichtung gibt einen gewichteten Graphen mit möglichen Endpunktverbindungen an. Die maximale Kantenanpassung in diesem Graph wäre eine gute Lösung für ein Problem.

+0

Delaunay Triangulation schließt die Kontur in akzeptabler Genauigkeit. Der Crust-Algorithmus extrahiert nur den fehlenden Teil. Wie auf dem Papier bewiesen. – theta

0

Es gibt einige Möglichkeiten, dies zu lösen;

Sie könnten einfach einen Wurm schreiben, der den Kurven folgt, und wenn Sie das Ende von eins erreichen, nehmen Sie Ihren aktuellen Richtungsvektor zusammen mit dem Gradienten und extrapolieren ihn vorwärts. Finden Sie alle anderen Endpunkte, die am besten passen, und bewerten Sie sie dann. Stellt euch wieder mit der Person mit der höchsten Punktzahl zusammen. Einfach und anfällig für Probleme, wenn es mehr als eine einfache Trennung ist.

A hierarchical waterfall method might be interesting

Es gibt Schwellen Methoden in Wasserfall (und Level-Set-Verfahren), die verwendet werden können, um diese Lücken zu erkennen und füllen sie in.

+0

Ich habe gelesen, dass es wenige Möglichkeiten gibt, eine Verbindung herzustellen, aber das Schließen mit dem Krustenalgorithmus wird als am genauesten für topologische Konturen angegeben. – theta