5

Ich habe ein Binärbild eines Wurms (Blob-Extraktion, die gut funktioniert). Ich interessiere mich für eine Mittellinie auf dem Blowb (Wurm).Mittellinie eines polygonalen Blobs (Binärbild)

Bis jetzt kam ich mit: ausgehend von einem Polygon (nach Umriss Extraktion von Blob im Bild) Ich angewendet eine Voronoi Berechnung und verworfen alle Ecken, die außerhalb des Polygons sind (blau), die mir das schwarze Zentrum gegeben Linie, die ich weiter verwenden kann, um eine glatte Mittellinie zu passen.

Diese Berechnung ist jedoch überhaupt nicht robust (wegen der Entfernung von Voronoi-Scheitelpunkten nicht innerhalb des Polygons?) Kennt jemand einen algorithmischen Workflow, um die Mittellinie eines Polygons oder die Mittellinie eines Blob-Objekts (Binärbild) zu erhalten. (Skelettierung ?, Triangulation von Polygon unter Verwendung eines Mittelpunkte der Innenkanten)

Hier ist eine Demonstration:

enter image description here

Antwort

0

ich eine bessere Lösung gefunden haben:

  • skeltonize die binäre Blob
  • bauen Sie die graph (ohne Zyklen) des Skeletts durch die Verfolgung von Pixel-Linien und Verzweigungspunkte
  • Alle kürzesten Pfade von jedem Endknoten zu allen anderen Endknoten abrufen und den längsten Pfad verwenden (ungefähr Anfang und Ende des Blobs)
  • Der resultierende Pfad von einem Endknoten (Grad = 1) zu einem anderen Endknoten ist eine Annäherung der mittleren Linie des Wurms.

Wenn jemand an der Lösung interessiert ist, kann ich ein Python-Notebook teilen. Endergebnis: grün = endgültige Mittellinie Diagramm, dunkelgrün = endgültige Mittellinie

der Graph der skelton

Source Code:
Der Code auf diese Frage kann sein hier gefunden: https://github.com/gabyx/WormAnalysis (wenn du es benutzt, bitte Sterne)

+0

Das sieht gut aus! Könntest du dein Python-Notizbuch mit mir teilen? Vielen Dank! – crazjo

+0

Natürlich werde ich heute Abend etwas, ich habe schon vorbereitet, vor einer Weile ... müssen es finden ... – Gabriel

+1

Der Code ist hier: https://github.com/gabyx/WormAnalysis – Gabriel