Algorithmus gesucht: Pixelstrukturen vereinfachen

BAGZZlash

Moderator
Teammitglied
Ich habe Pixeldaten, hier ein generisches Beispiel:

01 - Vorher.png


Die schwarzen Pixel repräsentieren Flächen. Teilweise sind diese Flächen sehr verschlungen ("komplex"), es gibt oft solche schlauchartigen Strukturen. Diese Flächen will ich vereinfachen. Dabei sollen die Schläuche gelöscht werden, also alles, was so dünn ist, soll weg. Es dürfen keine Pixel hinzugefügt werden und es sollen möglichst viele Pixel, die nicht zu Schläuchen gehören, erhalten bleiben. Einzeln stehende (übrigbleibende) Pixel können in einem zweiten Durchlauf gelöscht werden. Ein Ergebnis soll in etwa so aussehen:

02 - Nachher.png


Aktuell mache ich das so, dass ich für jedes Pixel die Umgebung (einen Kreis mit parametrisierbarem Radius) abtaste und schaue, wie viel Prozent der Pixel im Umgebungskreis nicht-schwarz sind. Liegt dieser Wert über 50%, wird dieses Pixel gelöscht.

Kreise mit Radius 2 lassen noch viele Schläuche übrig, Kreise mit Radius 4 schneiden zu viele Randpixel von Flächen weg, die ich eigentlich erhalten will. Radius 3 ist ein ganz guter Tradeoff, aber perfekt wird das auch nicht. Einstellbar ist außerdem den Prozentsatz. 50% klappt ganz gut, mehr oder weniger hat wieder Seiteneffekte in die eine oder andere Richtung.

Ich will nochmal zurück ans Reißbrett und suche nach einer alternativen Herangehensweise. Deshalb mal Brainstorming: Was fällt Euch zu diesem Thema ein? Jeder Gedanke ist willkommen. :)
 
Probier's mal weniger mit einem Kreis und mehr mit einem Schwellwert der 8 unmittelbar umliegenden Pixel (direkt benachbart und "diagonal"). Du kannst das dann auch noch verfeinern und schauen, wie viele der umliegenden schwarzen Pixel direkte Nachbarn zueinander sind... meine Intuition sagt mir, dass du unter den 8 umliegenden Pixeln mindestens 3 willst, die direkte Nachbarn zueinander sind.

Beispiele/Visualisierung:

Code:
maximal 2er-Ketten (X wird gelöscht)
o = längste Kette
. = umliegendes Pixel, das nicht zur längsten Kette gehört

o     oo     .
oX     X.   .Xo
 .    ..    . o

3er-Ketten und länger:

oo   . o  ooo  oo
oX   .Xo   X   oX
       o  ooo  o

Alle Muster, für die wir das X behalten (leer = egal):

oo  ooo  oo   o            o
oX   X   Xo  Xo  Xo  X  oX oX
              o  oo ooo oo o
 
Cool, danke, das probiere ich mal aus. :) (y)

/edit: Okay, das schneidet die Schläuche ziemlich zuverlässig weg, rasiert aber oft auch von erhaltenswerten Flächen die Ränder ab. Hm, so geht das noch nicht... :unsure:
 
Zuletzt bearbeitet:
Zurück
Oben Unten