Skelettierung (Bildverarbeitung)

Verfahren innerhalb der Bildverarbeitung

Als Skelettierung wird eine Klasse von Verfahren der Bildverarbeitung bezeichnet. Bei der Skelettierung wird ein flächenhaftes Bildobjekt in eine 1 Bildpunkt breite, innere Skelettlinie umgewandelt.

Ein Bildobjekt mit Skelettlinie

Die Skelettierung wird beispielsweise eingesetzt, um Linien zu verdünnen. Die verdünnten Linien lassen sich gut vektorisieren. Auch kann ein Skelett zur Datenreduktion eingesetzt werden. Weitere Anwendungen finden sich unter anderem in der Medizin, Biologie, Schrift-, Muster- und Fingerabdruckerkennung.

Definition Bearbeiten

Es existieren mehrere verschiedene Definitionen für das Skelett einer Bildregion. Eine der ersten stammt von H. Blum (1967). Als Anschauung wählte Blum ein Steppenfeuer. Eine trockene Steppengrasfläche, die eine Bildregion repräsentiert, wird an ihren Grenzen gleichzeitig angezündet, so dass das Feuer sich gleichmäßig nach innen ausbreitet. Das Skelett besteht nun aus jenen Stellen, an denen mindestens zwei Brandfronten aufeinandertreffen. Diese Definition lässt sich formalisieren:

Sei   eine Distanzfunktion, die den Abstand eines inneren Punktes   zu dem naheliegendsten Randpunkt angibt. Das Skelett bzw. die Mittelachse ist nun definiert durch die Menge der inneren Punkte  , für die   ein lokales Maximum in einer bestimmten Richtung ist, z. B. der X- / Y-Achse oder einer der beiden Diagonalen XY und -XY.

Die Punkte, die das Skelett bilden, werden auch als Skelettpunkte oder Skelettpixel bezeichnet.

Skelettierungs-Algorithmen Bearbeiten

Es gibt verschiedene Algorithmen, um Skelette zu berechnen.

  • "Steppenfeuer"-Definition: Berechnung der Distanzfunktionen   und der lokalen Maxima
    • "Erosionsverfahren" als Weiterentwicklung der Steppenfeuer-Definition, z. B. Fuzzy-Skelettierung
  • Thinning/Verdünnungs-Verfahren: Randpixel werden solange entfernt, bis keine weitere Verdünnung mehr möglich ist. Ein Beispiel hierfür ist der einfache, parallelisierbare Zhang-Suen Algorithmus.[1] Siehe auch Mathematische Morphologie
  • Voronoi-Diagramm

Beispiel Bearbeiten

 

In diesem Beispiel wird mit Hilfe der PythonBibliothek Scikit-image das Bild eines Pferdes mit einem Skelettierungs-Algorithmus verarbeitet.[2]

from skimage.morphology import skeletonize
from skimage import data
import matplotlib.pyplot as plt
from skimage.util import invert

# Das Bild eines Pferdes wird invertiert
image = invert(data.horse())

# Ausführung der Skelettierung
skeleton = skeletonize(image)

# Anzeige des erzeugten Bildes
plt.axis('off')
plt.imshow(skeleton, interpolation='nearest')
plt.show()

Weblinks Bearbeiten

Einzelnachweise Bearbeiten

  1. T. Y. Zhang, C. Y. Suen: A fast parallel algorithm for thinning digital patterns, Communications of the ACM. 27, Nr. 3, S. 236–239, März 1984
  2. Skeletonize — skimage docs. Abgerufen am 7. September 2018 (englisch).