Das wird in der Tat nicht einfach sein ... Sie könnten versuchen, ganz mit einer Graph-Struktur zu arbeiten. Extrahieren Sie zunächst alle verbundenen Pixel aus dem Bild und fügen Sie sie in ein Diagramm ein, in dem benachbarte Knoten mit einer Kante verbunden sind. Sie können Diagramme verwerfen, die kleiner als eine Anzahl von M Knoten sind (um kleine Punkte auszuschließen, die für das Bild nicht relevant sind).
Am Ende dieses Vorgangs wird eine Reihe nicht verbundener Grafiken angezeigt. (Nach deinem Bild sind das nicht gerade Bäume, weil es dort Zyklen gibt)
Sie können die äußersten Punkte jedes Graphen (die äußersten Pixel in der Peripherie jedes Graphen) finden, indem Sie von einem zufälligen Knoten ausgehen und eine DFS ausführen .
Am Ende dieses Vorgangs haben Sie eine Reihe von Pixelkoordinaten für jedes Diagramm, die den Extrempunkten entsprechen, an denen sich mit größerer Wahrscheinlichkeit Verbindungen bilden.
Sie können nun versuchen, die nächsten Extrempunktnachbarn (mit einem Abstand <= 5) einfach mit einer geraden Linie zu verbinden.
Wenn Sie jedoch die Steigung des Liniensegments berücksichtigen möchten, das zu diesem extremen Pixel führt, können Sie vor Erreichen dieses extremen Pixels versuchen, eine Linie an N Pixel anzupassen. Wenn also N = 5 ist, werden die letzten 5 Pixel eines Zweigs zum Schätzen einer Linie verwendet.
Daher müssen Sie für jedes nächste Nachbarpaar jetzt auch ein anderes Kriterium verwenden, um zu beurteilen, ob zwei Segmente verbunden werden sollen (dh Extremal Point Distance <= 5 Pixel UND ungefähr gleiche Liniensteigung).
Um die Auswirkung von Rauschen zu minimieren, die dazu führen kann, dass Ihre Linien in der Nähe der Verzweigungsspitzen gezackt erscheinen (und daher Ihre Neigungsschätzung verzerren), können Sie einen Vereinfachungsschritt auf Ihr Diagramm anwenden (dies ist ein weiterer Punkt (neben der obigen DFS), an dem es sich auszahlt mit einer Graph-Struktur arbeiten). Sie können beispielsweise nachfolgende Knoten des Graphen entfernen, durch die die Linie in Winkeln "gebogen" wird, die größer als ein Grenzwert sind (komplexere Informationen finden Sie hier ). Auf diese Weise passen Sie "einfachere" Linien ungefähr in Richtung eines größeren Teils des Segments an, das von den Bildpixeln gebildet wird.
Das wird wahrscheinlich in den meisten Fällen zu anständigen Verbindungen führen (nach dem von Ihnen geposteten Bild zu urteilen), aber Sie werden trotzdem einige herausfordernde haben. Wie würde zum Beispiel ein "Y" -förmiges unterbrochenes Muster verbunden, bei dem einer der Zweige in der Nähe des Verbindungspunkts unterbrochen ist? (dh Sie haben eine "durchgehende" Biegung, die mit einem Liniensegment verbunden werden muss, das mit ihr "verschmilzt"). Vielleicht können Sie überprüfen, wie häufig solche Fälle vorkommen, und Ihre Verbindungskriterien später überarbeiten.
Vielleicht lohnt es sich auch zu prüfen, wie Sie Ihre Bilderfassung verbessern können (zum Beispiel die Auflösung erhöhen).