Fingerprint Detection System
Auf der Basis von Neuronalen Netzen


- Home - Programmbeschreibung - Algorithmen - Klassenbeschreibung - Download -

Inhalt
Vorbetrachtungen
Bildbearbeitung
     Umwandlung des 24 Bit Farbbildes in ein 8 Bit Graustufenbild
     Kontrasterhöhung/Kantendetektion
     Skelettieren der gefunden Linien
     Segmentieren des Bildes und Errechnung der Eingabevektoren
Das Neuronale Netz
     Warum Feed-Forward Netz mit Backpropagation ?
     Aufbau des Netzes
Abschließende Bemerkungen
Quellen


Vorbetrachtungen
Im Rahmen der Lehrveranstaltung "Neuroinformationsverarbeitung" bei Prof. Dr. rer. nat. habil. Iwe sollte ein Beleg angefertigt werden. Dieser sollte eine Anwendung von Neuronalen Netzen beinhalten. Da Graphikbearbeitung eines meiner Hobbies ist, entschied ich mich für das Gebiet der Mustererkennung. Hierbei wollte ich ein praktisch sinnvolles Programm entwickeln, weshalb ich die Fingerabdruckserkennung wählte.
Der Prozeß einer Mustererkennung, auf der Basis von Bildinformation, teilt sich in zwei Hauptgebiete auf. Zum einen muß das Bildmaterial optisch aufgewertet werden, um sinnvolle Unterscheidungskriterien finden zu können und zum anderen das eigentliche Training des Neuronalen Netzes sowie die anschließende Erkennung von unbekannten Informationen.


- Inhalt -

Bildbearbeitung
In dem Bereich der Bildbearbeitung oder Bildvorbereitung wird das Bild so aufgewertet, daß die ausgewählten Erkennungskriterien leicht abgeleitet werden können. Deshalb muß als erstes festgelegt werden, welches diese Kriterien sind. In diesem Fall soll das Ausgangsbild in Segmente eingeteilt werden, die alle für sich zwei Merkmale aufweisen. Zum einen die Anzahl der Linienenden des Fingerabdruckes in diesem Segment und zum anderen die Anzahl der Kreuzungspunkte, also die Abzweigungen, die ein Fingerabdruck besitzt in diesem Segment. Um diese so schnell und gut wie möglich zu finden, ist dieser vorbereitende Schritt notwendig.

- Inhalt -

Umwandlung des 24 Bit Farbbildes in ein 8 Bit Graustufenbild
Zunächst müssen die Bilder von 24 Bit Farbe in 8 Bit Grausstufen umgewandelt werden. Dies ist zum einen nötig, um den Speicherbedarf der Bilder zu reduzieren und zum anderen, um den Zeitbedarf, zur Bearbeitung der Bilder, zu verringern. Desweiteren läßt sich mit einem Byte-Wert besser arbeiten, als mit 3.
Die Umwandlung wird dadurch realisiert, daß die 3 Farbwerte addiert und dann durch 3 geteilt werden. Der dadurch gewonnene Wert repräsentiert die Helligkeit des Punktes. In den nachfolgenden Algorithmen wird immer mit diesem Graustufenbild gerechnet.


- Inhalt -

Kontrasterhöhung/Kantendetektion

Um den Kontrast eines Bildes zu erhöhen, nimmt man jeden Punkt des Bildes, ermittelt dessen Intensität, also seine Helligkeit und vergleicht diese mit einem vorher festgelegten Schwellwert. Dann entscheidet man anhand dieses Wertes, ob es mehr zu dem hellsten oder mehr zu dem dunkelsten Bereich gehört. In Abhängigkeit davon, wird die Intensität des Punktes entsprechend auf das Maximum oder das Minimum gelegt.
Die Kantendetektion geht davon aus, daß neben dem zu bearbeitenden Punkt, weitere Punkte in einer bestimmten Form vorhanden sein müssen, damit dieser zu einer Kante gehört. Dazu wird dieser Punkt, durch die Berechnung mit einer Matrix, neu gesetzt. Die Matrix ist wie in Tabelle 1 zu sehen aufgebaut.

+20 +17  0  -17 -20
+20 +17  0  -17 -20
+20 +17  0  -17 -20
+20 +17  0  -17 -20
+20 +17  0  -17 -20
Tabelle 1

Dieser Aufbau ergibt eine vertikale Kantenerkennung. Das heißt, alle vertikalen Linien werden verstärkt. Bei der Art dieser Kantenerkennung besteht leider der Nachteil, daß die horizontalen Linien verloren gehen. Das führt natürlich zum Verlust von Eigenschaften des Fingerabdruckes. Wie die nachfolgenden Tests aber beweisen, ist es nicht nötig, alle Eigenschaften in das Netz zu geben. Es muß nur darauf geachtet werden, daß alle errechneten Vektoren, also die zum Trainieren und die zum Erkennen, mit dem gleichen Verfahren gebildet wurden.


- Inhalt -

Skelettieren der gefunden Linien
Da das Bild eingescannt wurde, besitzt der Fingerabdruck sehr dicke Linien. Dies ist aber für die weitere Bearbeitung des Bildes unvorteilhaft. Deshalb wird hier ein Linien-Skelettierungsalgorithmus eingesetzt. Hierbei wird wieder jeder Bildpunkt des Abdruckes betrachtet und mit einem bestimmten Muster verglichen. Stimmt dieses Muster überein, wird dieser Bildpunkt als Linienpunkt markiert. Stimmt es nicht überein, wird der zu bearbeitende Bildpunkt zum Löschen markiert. Ist das ganze Bild bearbeitet, werden alle löschbaren Punkte entfernt. Danach beginnt der Vorgang des Skelettierens über das gesamte Bild von neuem. Somit wird eine breite Linie Pixel für Pixel, bis nur noch 1 Pixel vorhanden ist, verdünnt.
Jetzt werden alle Linien noch einmal auf ihre Größe hin geprüft. Besitzen sie nicht ein bestimmte Größe in X oder Y Richtung, werden sie ausmaskiert. Damit erreicht man, daß durch die Kantendetektion, die ja nur in vertikaler Richtung funktioniert, in horizontaler Richtung entstandene Artefakte, nicht mit betrachtet werden.

- Inhalt -

Segmentieren des Bildes und Errechnung der Eingabevektoren
Jetzt haben wir das Bild soweit bearbeitet, daß es möglich ist, die Eigenschaften des Fingerabdruckes auszulesen.
Dabei wird das Bild in 100 x 100 große Bildabschnitte unterteilt. In diesen Abschnitten wird jeder Bildpunkt daraufhin getestet, ob er ein Linienendpunkt oder eine Linienabzweigung ist. Durch die vorherige Skelettierung, ist dies kein Problem mehr. Es wird einfach nur geprüft, wieviele Nachbarn er besitzt. Gibt es einen Nachbar, ist der Punkt ein Endpunkt. Sind es mehr als zwei, ist er eine Abzweigung. Hierbei findet zusätzlich eine Wichtung statt. Linienenden werden mit einem Faktor von 0,1 gezählt und Linienabzweigungen mit einem Faktor von -0,05. Da in einem Neuronalen Netz die Größe eines Eingabeneurons über dessen Relevanz entscheidet, werden hierbei die Linienenden als wichtigeres Kriterium betrachtet. Dies ist jedoch eine willkürliche Auswahl und kann andersherum genauso gut funktionieren.

Nachdem ein Abschnitt bearbeitet wurde, wird er um die Hälfte seiner Größe, in diesem Fall in X-Richtung 50 und in Y-Richtung 50 Pixel, weitergeschoben. Dadurch werden einige Eigenschaften zwar doppelt gezählt, aber es wird damit erreicht, daß eine geringe Verschiebung des Fingerabdruckes keine so große Änderung in den Eingabedaten verursacht.
Nachdem dies für das gesamte Eingabebild gemacht wurde, haben wir, bei einer Größe von 500 x 800 Pixel, 270 Eingabeneuronen (135 Linienenden und 135 Linienabzweigungen).

- Inhalt -

Das Neuronale Netz
Nun beginnt der zweite Schritt der Bearbeitung, die gefundenen Eingabeneuronen mit dem Neuronalen Netz zu verarbeiten. Dabei gibt es zwei Situationen, die beide verschiedene Vorgehensweisen benötigen. Die erste ist das Trainieren des Netzes und die zweite das Erkennen eines unbekannten Fingerabdruckes.

- Inhalt -

Warum Feed-Forward Netz mit Backpropagation ?
Die Wahl fiel auf Feed-Forward Netze, da es eine ähnliche Implementation schon mit Kohonen Maps gibt. Kohonen Maps werden für diese Aufgaben häufiger genutzt, da sie bessere Ergebnisse liefern. Da wir aber in dieser Lehrveranstaltung Kohonen Maps nicht behandelten, wollte ich das ganze mit den Feed-Forward Netzen probieren, um zu testen, ob man damit ähnliche Ergebnisse erzielt.

- Inhalt -

Aufbau des Netzes
Das Netz besitzt eine Inputschicht mit jeweils 270 Neuronen. Desweiteren können die Anzahl der Neuronen in der Hiddenschicht frei gewählt werden und die Outputschicht läßt sich auf eine 3 Bit oder 7 Bit Kodierung einstellen. Zusätzlich enthält die Inputschicht und die Hiddenschicht noch den Biaswert von 1. Als Aktivierungsfunktion kommt die sigmoide Funktion y = 1 / (1 + exp (- x)) zum Einsatz. Die Ausgabe liegt dabei zwischen 0 und 1. Die Gewichte werden bei jedem Start des Programms, zwischen -1 und 1, zufällig initialisiert. Bei der Backpropagation kann ein Momentum zwischen 0 und 1 gesetzt werden.

- Inhalt -

Abschließende Bemerkungen
Es zeigt sich, daß also auch mit Feed-Forward Netzen ein Fingerabdruck-Erkennungssystem programmiert werden kann. Die Erkennungsrate hängt sehr vom Aufbau des Netzes ab. Tests mit einer Hiddenschicht haben eine Trefferwahrscheinlichkeit von circa 70% erzeugt.
Es hat sich ebenfalls gezeigt, daß die Erkennungsrate im wesentlichen von der Art der Bildvorbereitung abhängt. Dabei muß eine bessere und genauere Bildvorbereitung, nicht unbedingt bessere Ergebnisse in der Erkennung liefern. Der Grund dafür ist wahrscheinlich, daß sich mit einer zu guten Bildvorbereitung, die Eigenschaften der einzelnen Fingerabdrücke zu sehr unterscheiden.


- Inhalt -

Quellen
Meile Neuronale Netze Fingerabdruck-Erkennungssystem in Java, mit Hilfe von Kohonen-Maps. Diente als Vorlage und als Referenz-Objekt.
Magic Software Eine komplette Library für die Graphikbearbeitung. Sehr viele Filter sowie 2D und 3D verarbeitende Klassen.
Computer Graphics on the Net Sehr große Link-Sammlung zu Graphikthemen im Netz.
Neuronale Netze - Computersimulation Biologischer Intelligenz
[Jeannette Lawrence, Systhema Verlag
ISBN 3-89390-271-6]
Allgemeines Buch über die Grundlagen von Neuronalen Netzen, wie Entwurf, Training, Tests und Anwendungen.
Programmierung Neuronaler Netze - Eine Turbo Pascal Toolbox
[H. Kruse, R. Mangold, B. Mechler, O. Penger, Addison-Wesley
ISBN 3-89319-293-X]
Ein Buch über den Aufbau von Neuronalen Netzen anhand von Beispielen erklärt.

- Inhalt -

 


Copyright © 2001 Christian Pötzsch