Vorbereitende Bildverarbeitung

Für die Hilfestellung bei der Bildverarbeitung möchten wir uns bei Carsten Köhn recht herzlich bedanken!

Die erste Frage, die sich im Rahmen dieses Projekts gestellt hat, war: "Wie kann man einen Fingerabdruck so in Zahlen ausdrücken, daß man ihn einem Neuronalen Netz vorsetzen kann?"

Eine einfache Lösung wäre gewesen, einfach die Bilddaten des Fingerabdrucks als Vektor aufzuschreiben und diese dem Netz lernen zu lassen. Außer einer vermutlich sehr schlechten Wiedererkennungsrate hätte dieses Verfahren ein anderes Problem: Die Fingerabdrücke wurden mit 600dpi gescannt (nachdem sie ganz altmodisch mit Hilfe eines Stempelkissens auf Papier gebracht wurden) und haben pro Bild eine Auflösung von 500 * 800 Pixel. Da Java für jedes Pixel 32 Bit verwendet (es sind zwar nur ein paar Graustufen, werden aber trotzdem als Echtfarben gespeichert), wären das pro Bild 1,6 MB Eingabedaten für das Bild. Selbst wenn man nur die Grauwerte berücksichtigt, wären es immer noch 400'000 Elemente á 1 Byte. Dies ist für einen Eingabevektor für ein Neuronales Netz eindeutig zu viel.

Deshalb suchten wir nach einem Verfahren, aus dem Bild des Fingerabdrucks nur möglichst relevante Daten zu errechnen und nur diese dem Neuronalen Netz vorzusetzen. Wir entschlossen uns dazu, die Linien des Abdrucks näher zu betrachten und Linien-Enden sowie Abzweigungen herauszufiltern und diese mit der Angabe deren Position im Bild an das Netz weiterzugeben.

Generell teilte sich dieses Verfahren in folgende Schritte auf:

  1. Umrechnung des Bildes von Graustufen nach schwarz/weiß und Erkennung der Kanten (Kantendetektion).
  2. Aufteilung des Fingerabdrucks in seine einzelnen Linien, um diese leichter analysieren zu können (Finden von Linien).
  3. Suchen nach den Merkmalen Linien-Ende und Abzweigung (Finden von Knoten).
  4. Segmentieren dieser Knoten und Erzeugen eines Eingabevektors für das Neuronale Netz (Segmentieren).

Home