Laden...

Skelettierung / Thinning zu langsam

Erstellt von Gimmick vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.791 Views
G
Gimmick Themenstarter:in
154 Beiträge seit 2015
vor 5 Jahren
Skelettierung / Thinning zu langsam

Hallo,

ich muss hier u.A. das morphologische Skelett von Bildern berechnen und habe ein Geschwindigkeitsproblem.

Als Methode nutze ich den Zhang-Suen Algorithmus. Den verlinkten Code habe ich in sofern noch ergänzt, dass nach der ersten Iteration die Nachbarn der entfernten Pixel gespeichert werden und folgend nur noch eben diese Nachbarn überprüft werden und nicht alle noch vorhandenen Pixel und die äußerste Schleife in "step" habe ich durch ein Parallel.For ersetzt.

Es werden also zwar noch alle Pixel in dem Array besucht, aber nur um den bool-Wert auszulesen, das dürfte an sich nicht soviel ausmachen, oder?

Für "normal" große Bilder oder große Bilder ohne sehr große Flächen läuft das gut. Problematisch wird es, wenn z.B. in einem ~100 MP großen Bild eine Fläche von z.B. 60 MP abgetragen werden muss.

Dafür müssen dann einige hundert Iterationen durchlaufen werden und jede Iteration ist natürlich auch entsprechend langsam.

Jetzt habe ich gelesen, dass es ja noch andere Methoden dafür gibt: diverse iterative Algorithmen, Skelettierung über ein Voronoi Diagramm, Line following usw...

Hat da jemand Erfahrungen mit und könnte eine Empfehlung aussprechen oder hat evtl. Tips bzgl. des oben verlinktes Codes?

16.806 Beiträge seit 2008
vor 5 Jahren

Mit https://github.com/dotnet/BenchmarkDotNet kannst Du einzelne Codesegmente und dessen Performance prüfen.

Es gibt ja auch ein Hinweis in dem von Dir kopierten Code:

the functions are not optimzed for speed;

Hinweis zum Code:
GetPixel und SetPixel um Längen geschlagen. 800 mal schneller

Hinweis zum Byte Array:
C# - All About Span: Exploring a New .NET Mainstay

G
Gimmick Themenstarter:in
154 Beiträge seit 2015
vor 5 Jahren

Hi,

hätte mich genauer ausdrücken sollen, ich benutze nur den Thinning-Algorithmus, nicht die Methoden zur Umwandlung von Array <-> Bitmap. Ich arbeite da nur mit Arrays.

All about Span werde ich mir ansehen, thx 🙂

Habe auch mal ein PlugIn für GIMP und ein anderen Programm ausprobiert, um vergleichen zu können. Das war beides unbenutzbar langsam 🤔