Heutzutage hat die Objekterkennung in Fotos oder Videobildern eine große Bedeutung. In immer mehr Bereichen werden Bilderkennungsalgorithmen eingesetzt, um Produkte zu verbessern oder für die Kunden attraktiver zu machen. In der Autoindustrie werden z. B. Objekterkennungsverfahren eingesetzt, um Verkehrsschilder oder Gefahrsituationen schneller und unermüdlich zu erkennen und den Fahrer aktiv durch Anzeigen oder akustische Signale darauf hinzuweisen.

Weiterhin dienen Bildverarbeitungsalgorithmen und natürlich auch die Objekterkennung in vielen Produktionsbereichen zur Qualitätssicherung, um Produktfehler oder eine schlechte Produktqualität automatisiert zu erkennen und die Qualität zu steigern.

Problemstellung der Objekterkennung

Ziel dieser Arbeit soll es sein, verschiedene Objekterkennungsstrategien vorzustellen und die Vor- und Nachteile aufzuzeigen. Im weiteren Verlauf der Arbeit sollen anhand einer Beispiel­anwendung 45 verschiedene Objekte (siehe Anhang 10.2 Teileliste) mit einem bild­verarbeitungs­gestützten System erkannt werden. Dabei sollen die vorgestellten Objekt­erkennungs­algorithmen ausprobiert und evaluiert werden.

Gliederung der Arbeit

Im Anschluss an das einleitende erste Kapitel, sollen im nachfolgenden zweiten Kapitel die Grundlagen der Bildverarbeitung kurz angerissen werden. Hier wird näher auf die Bild­erfassung, Vorverarbeitung, Segmentierung, Merkmalsextraktion und die Klassifikation eingegangen.

Um das Thema nicht nur rein theoretisch abzuhandeln, wird im dritten Kapitel die System­umgebung für die Problemstellung beschrieben. Dabei wird die Hardware und die Software HALCON 9.0 näher erläutert, die bei der Konzeption und Verifikation von Bild­erkennungs­verfahren unterstützt, bevor diese letztendlich in eigene Softwareprodukte einfließen können. Hier wird auf die Funktionalität dieses mächtigen Softwarewerkzeugs eingegangen und einzelne Funktionen genauer beleuchtet.

Das vierte Kapitel beinhaltet die zu evaluierenden Objekterkennungsalgorithmen. Dabei werden diese Strategien vorgestellt und auf ihre Eignung für die Problemstellung der Objekt­erkennung dieser Arbeit eingegangen. Die vorgestellten Klassifizierungsstrategien sind einfache Zuweisungen, das Clusterverfahren, künstliche neuronale Netze und der Matching­assistent in der Programmierumgebung HDevelop von HALCON, welcher auf Template-Matching basiert.

In Kapitel fünf wird der Einsatz der Software HALCON 9.0 für die Problemstellung demonstriert und die Schwierigkeiten bei der Objekterkennung sowie der Vorverarbeitung für die verschiedenen Objekterkennungsalgorithmen aufgezeigt. Ein weiterer Punkt dieses Kapitels ist eine detaillierte Quellcode-Beschreibung des Programms mit den besten Erkennungsquoten.

Im sechsten Kapitel werden die Erkennungsquoten des implementierten Objekterkennungsalgorithmus und die dabei aufgetretenen Probleme erläutert.

Die Zusammenfassung der Arbeit ist in Kapitel sieben zu finden. Außerdem beinhaltet dieses Kapitel noch einen Ausblick auf weitere Problemstellungen.

In Kapitel acht und neun sind das Literatur- und das Abbildungsverzeichnis aufgeführt.

Im Anhang sind die wichtigsten Quellcodes sowie eine Teileliste zur Überprüfung der Richtigkeit bei der Objekterkennung und eine Featuretabelle angefügt, um die verschiedensten Featurewerte für die einzelnen Objekte vergleichen zu können.

2. Bildverarbeitungsgrundlagen

Die Bildverarbeitung fasst viele Verfahrensschritte zusammen (vgl. [NEUM05]). Dazu gehören die bildhafte Erfassung von Objekten, die automatische Bearbeitung der Bilder, die Segmentierung, das Gewinnen von graphischen Informationen und die darauf basierende Klassifizierung.

Abbildung 2.1: Verfahrensschritte der Bildverarbeitung

Bei der Bilderfassung, dem ersten Schritt der Bildverarbeitung, wird das optische Bild in elektronische verarbeitbare Signale umgewandelt. Außerdem spielt die Objektbeleuchtung in diesem Schritt eine wichtige Rolle. Die Vorverarbeitung beinhaltet Verarbeitungsschritte zur Bildverbesserung, die durch Filter erreicht werden können. Bei der Segmentierung werden relevante Bildinhalte hervorgehoben, wie z. B. bestimmte Objekte oder Konturen. Außerdem kann bei der Segmentierung nach bestimmten Objekten in einem Bild gesucht werden. In der Merkmalsextraktion werden die segmentierten Objekte charakterisiert. Dabei werden definierte Merkmale, wie z. B. die Fläche oder die Rundheit, den Objekten zugewiesen. Bei der Klassifikation, dem letzten Verarbeitungsschritt der Bildverarbeitung, werden die charakterisierten Objekte den definierten Objektklassen zugeordnet.

2.1 Bilderfassung

Die algorithmische Lösung eines Problems kann mit qualitativ hochwertigem Bildmaterial vereinfacht werden. Dies muss im ersten Schritt der Bildverarbeitung, der Bilderfassung, sichergestellt werden.

Eine wichtige Bedingung bei der Bildaufnahme ist, auf eine gleichmäßige Beleuchtung zu achten, um Helligkeitsverläufe innerhalb gleichfarbiger Regionen zu vermeiden. Außerdem soll ein Schattenwurf der Objekte sowie Spiegelungen (z. B. der Lichtquelle) vermieden werden, da es sonst in späteren Verarbeitungsschritten zu Problemen oder falschen Ergeb­nissen führen kann. Weiterhin ist es von Vorteil, einen einfarbigen Hintergrund zu wählen, da so die Unterscheidung zwischen Objekt und Hintergrund bei der Segmentierung vereinfacht wird.

Das Bild sollte außerdem frontal von oben aufgenommen werden, damit keine Verzerrungen entstehen. Dafür kann ein Stativ verwendet werden, damit keine Verwackelungen oder „schräge“ Bilder entstehen. Die Entfernung zwischen Objekt und Kamera sollte bei allen Aufnahmen immer gleich sein, damit keine ungewollten Vergrößerungen bzw. Verkleinerungen zwischen den Einzelaufnahmen entstehen. Dies kann ebenfalls durch ein Stativ und eine Feststellfunktion der Kamera gewährleistet werden.

Prozess der Bilderfassung

Nach der Aufnahme ist das Bild eine zweidimensionale, zeitabhängige, kontinuierliche Verteilung von Lichtenergie. Um diese Verteilung von Lichtenergie als ein digitales Bild auf dem Computer zu bekommen sind drei Schritte erforderlich (vgl. [BURG06]):

1. Die kontinuierliche Lichtverteilung muss räumlich abgetastet werden.

2. Die daraus resultierende Funktion muss zeitlich abgetastet werden, um ein einzelnes Bild zu erhalten.

3. Die einzelnen Werte müssen in eine endliche Anzahl möglicher Zahlenwerte quantisiert werden, damit sie am Computer darstellbar sind.

Bei der räumlichen Abtastung (1.) handelt es sich um den Übergang von einer kontinuierlichen zu einer diskreten Lichtverteilung. Dies geschieht durch die Geometrie des Aufnahmesensors, also direkt in der Kamera.

Bei der zeitlichen Abtastung (2.) erfolgt die Messung der Lichtmenge durch die einzelnen Sensorelemente. Dies geschieht durch die Steuerung der Belichtungszeit.

Die Quantisierung der Pixelwerte (3.) geschieht durch Analog-Digital-Wandlung. Dabei werden die Bildwerte auf eine endliche Menge von Zahlenwerten abgebildet.

Nach diesen drei Schritten liegt das Bild als diskrete Funktion vor und wird als zwei­dimensionale, regelmäßige Matrix von Zahlen beschrieben. Bei Farbbildern müssen die einzelnen Farbkomponenten rot, grün und blau getrennt voneinander (zeitlich oder räumlich) aufgenommen werden.

Beleuchtung

Es gibt unterschiedliche Arten der Beleuchtung sowie unterschiedliche Leuchtmittel. Die richtige Wahl der Beleuchtung trägt wesentlich zum Gelingen eines Bildverarbeitungs­projektes bei. Ziel ist es, eine räumlich homogene und zeitlich stabile Beleuchtung über den gesamten auszuwertenden Bereich (ROI - Region of Interest) zu garantieren und damit Bilder mit optimalem Kontrast zu erhalten.

Prinzipiell gibt es zwei grundverschiedene Beleuchtungsarten, die Auflicht- und die Durchlicht­beleuchtung.

Bei der Durchlichtbeleuchtung befindet sich die Lichtquelle gegenüber der Kamera und dazwischen befindet sich das Objekt. Der Nachteil dieser Lösung ist, dass dabei keine Farberkennung möglich ist, da sich lichtundurchlässige Objekte nur mit ihrer Kontur abzeichnen. Lediglich bei lichtdurchlässigen Objekten ist eine Farberkennung möglich. Der Vorteil ist, dass es keine störenden Schattenwürfe gibt. So kann die Kontur der Objekte nahezu akkurat erkannt werden. Prinzipiell eignet sich diese Methode nur für Verfahren, bei denen die Farbe der Objekte bzw. die Oberflächenstruktur keine Rolle spielen. Weiterhin ist, bedingt durch die Anordnung von Kamera, Objekt und Lichtquelle, dieses Verfahren nicht für alle Anwendungsfälle realisierbar, da es nicht immer möglich ist, eine Lichtquelle hinter den Objekten zu positionieren.

Bei der Auflichtbeleuchtung befindet sich die Beleuchtung auf der gleichen Seite des Objektes wie die Kamera. Von Vorteil ist, dass Farben bei dieser Methode erkennbar sind. Der Nachteil hierbei ist, dass störende Schatten entstehen können, was problematisch während der Erkennung sein kann.

2.2 Bildvorverarbeitung - Filter

Filter sind Operationen, bei denen ein Eingangsbild mit Hilfe von mathematischen Funktionen zu einem Ausgangsbild umgerechnet wird. Sie dienen der Bildverbesserung bzw. der Aufbereitung der Bilder für spätere Erkennungsschritte (z. B. Kantendetektion). Filter arbeiten mit einem so genannten Filterfenster bzw. Strukturelement, die meist vorgegebene quadratische Umgebungen von Bildpunkten sind. Dabei können die Fenster beispielsweise 3x3, 5x5, etc. groß sein. Die Pixel in einem Filterfenster werden meist mit Gewichten versehen, damit näher liegende Pixel stärker und weit entfernte schwächer berücksichtigt werden.

In HALCON stehen einfache Strukturelemente (Rechtecke und Kreise mit beliebigen Abmessungen bzw. Radien) zur Verfügung. Sie sind nicht richtungsabhängig und vergrößern bzw. verkleinern Objekte gleichmäßig nach allen Seiten.

Es gibt zwei Arten von Filtern, lineare und nichtlineare Filter.

2.2.1 Lineare Filter

Lineare Filter sind lineare homogene Funktionen und werden auch als Faltung bezeichnet. Sie besitzen eine inverse Transformation und benötigen wenig Rechenaufwand.

Bei linearen Filtern wird die Größe und Form des Filterfensters sowie die dazugehörigen Gewichte durch eine Matrix von Filterkoeffizienten angegeben, die so genannte Filtermatrix.

Eine Filteroperation wird durchgeführt, indem eine Filtermatrix (Filteroperator) punktweise über das zu filternde Bild geschoben wird. Dann wird im gefilterten Bild dem Zentrumspixel die Summe der mit der Filtermatrix multiplizierten Bildpunkte des Ursprungsbildes zugewiesen (siehe Abbildung 2.2). Bei Farbbildern wird dieser Prozess für jede Farbkomponente durchgeführt.

Es gibt zwei Arten von linearen Filtern, die Glättungs- und die Differenzfilter.

Glättungsfilter/Tiefpassfilter (z. B. Box-Filter, Gauß-Filter)

Der Glättungsfilter wird bei örtlich schnell variierenden Grauwerten angewendet, um diese auszugleichen. Diese Schwankungen werden meist durch Rauschen verursacht. Um diese Schwankungen zu glätten, wird der mittlere Grauwert im Filterfenster berechnet und das Ergebnis in das aktuelle Pixel des Ergebnisbildes (das mittlere Pixel des Filterfensters) geschrieben.

Die störenden Grauwertspitzen verschwinden durch die Mittelung des Grauwertes über die ganze Filtermatrix. Leider sind feine Strukturen und Kanten nach der Filterung unscharf. Je größer das Filterfenster ist, desto besser wird die Glättung, aber es gehen auch umso mehr Informationen verloren.

Differenzfilter/Hochpassfilter (z. B. Laplace-Filter)

Während beim Glättungsfilter die Grauwertunterschiede ausgeglichen werden, werden sie bei dem Differenzfilter verstärkt. Der Differenzfilter eignet sich bestens zur Hervorhebung von Linien, Kanten oder anderen sprunghaften Grauwertschwankungen. Die programmtechnische Umsetzung ist wie beim Glättungsfilter. Der Differenzfilter kann positive und negative Koeffizienten enthalten.

Zur Veranschaulichung sind in Abbildung 2.3 Beispiele für lineare Filter mit ihrer Filtermatrix aufgeführt.

Abbildung 2.3: Beispiele für lineare Filter [BURG06]

(a) Box-Filter; (b) Gauß-Filter; (c) Laplace-Filter

2.2.2 Nichtlineare Filter (morphologische Filter)

Morphologische Bildoperatoren verändern die Form von Objekten in einem Bild. Dabei wird die Nachbarschaft eines Bildpunktes mit einbezogen. Nichtlineare Filter besitzen keine inverse Operation und benötigen mehr Rechenaufwand, als die linearen Filter. Weiterhin dienen sie dazu, fehlerhafte Störungen, so genannte Artefakte, wie z. B. dass mehrere eigentlich voneinander getrennte Objekte über Brücken miteinander verbunden sind oder das Objekte bizarre Konturen besitzen, die keinerlei Ähnlichkeit mit den Originalobjekten haben, zu korrigieren. Dabei wird mit einem vorgegebenen Strukturelement das Bild zeilenweise abgetastet und an jedem Ort die darunter liegenden Grauwerte als eine geordnete Folge zusammen­gefasst, d. h. die Folge beginnt mit dem kleinsten Grauwert und endet mit dem größten. Je nach Filter wird dann ein Pixel aus dieser sortierten Folge ausgewählt (z. B. Minimum oder Maximum). Dadurch werden diese Filter auch Rangordnungsfilter genannt. Im Folgenden sollen beispielhaft ein paar wichtige nichtlineare Filter kurz vorgestellt werden.

Medianfilter

Der Medianfilter ist im Gegensatz zum Mittelwert-Operator (wie er beim Glättungs- oder Differenzfilter vorhanden ist) ein kantenerhaltender Glättungsfilter, der aber durch seinen Sortiervorgang mehr Rechenzeit in Anspruch nimmt. Er dient zur Unterdrückung von punktförmigen Störungen, ohne ein unscharfes Bild zu erzeugen. Die Funktionsweise des Medianfilters ist, dass der Grauwert des aktuellen Pixels durch den in der Mitte liegenden Wert der geordneten Folge ersetzt wird.

Durch eine kleine Modifikation des Medianfilters kann eine Erosion (Schrumpfung) und eine Dilatation (Ausdehnung) einer Region erreicht werden. Es können auch Erosion und Dilatation, und umgekehrt, hintereinander ausgeführt werden (Opening/Closing). Dabei kann das Ergebnis einer Erosion nicht durch eine Dilatation, und andersherum, rückgängig gemacht werden.

Minimumfilter (Erosion)

Der Minimumfilter entfernt Randpixel von Objekten und wird z. B. zur Schrumpfung oder zur Beseitigung kleiner heller Objekte eingesetzt. Bei diesem Operator werden die Grauwerte des aktuellen Pixels durch den kleinsten Wert der geordneten Folge ersetzt.

Beim Minimumfilter werden die Spitzen hoher Grauwerte entfernt, ohne ein unscharfes Bild zu erzeugen; aber die Flecken niedriger Grauwerte werden vergrößert.

Maximumfilter (Dilatation)

Der Maximumfilter vergrößert vorhandene Objektstrukturen durch Hinzufügen von neuen Pixeln und dient z. B. zur Füllung kleiner Löcher oder zum Vereinigen von Pixelgruppen. Im Grunde ist die Dilatation nichts anderes als die Erosion des Hintergrundes. Dabei wird der Grauwert des aktuellen Pixels durch den maximalen Wert der geordneten Folge ersetzt.

Beim Maximumfilter werden kleine Flecken von niedrigen Grauwerten entfernt und Spitzen von hohen Grauwerten vergrößert.

Opening

Beim Opening folgt nach einer Erosion eine Dilatation. Dies dient zur Trennung von Objekten, die durch Brücken miteinander verbunden sind oder zum Löschen von kleinen Mengenelementen. Ein Nachteil dabei ist, dass damit kleine Löcher wachsen können. Mit dem Opening-Operator können auch bestimmte Formen im Bild beseitigt oder detektiert werden.

Closing

Das Closing dient dazu, dass kleine nicht zusammenhängende Bildbereiche geschlossen werden, d. h. dass kleine Löcher verschwinden, die bei der Segmentierung entstanden sind. Dies passiert, wenn auf eine Dilatation eine Erosion folgt. Der Nachteil dabei ist, dass zuvor getrennte Objekte zusammenwachsen können.

2.3 Segmentierung

Ziel der Segmentierung ist es, ein Bild zu erhalten, indem wichtige Regionen hervorgehoben werden und sich vom Hintergrund unterscheiden lassen (siehe Abbildung 2.4). Die Segmentierung stellt eine Zerlegung einer Menge von Pixeln in einzelne segmentierte Objekte dar. Dabei muss die Zerlegung vollständig, überdeckungsfrei und eindeutig sein. Außerdem muss jeder Bildpunkt genau einem Objekt bzw. Segment zugeordnet werden.

Es gibt viele Segmentierungsverfahren. Sie können in punktorientierte-, kantenorientierte-, regionenorientierte- und regelbasierte Verfahren eingeteilt werden. Da für diese Arbeit nur das punktorientierte Verfahren benutzt wurde, wird auch nur auf dieses näher eingegangen.

Abbildung 2.4: Beispiel einer Segmentierung, (1) Originalbild; (2) erkannte Regionen

2.3.1 Punktoperationen

Punktoperationen sind Operationen auf Bilder, die keine Änderungen der Größe, Geometrie oder lokalen Bildstruktur nach sich ziehen, sondern nur die Werte der einzelnen Bildelemente betreffen (vgl. [BURG06]). Dabei wird jedes Pixel unabhängig von anderen betrachtet und segmentiert.

Einige Beispiele für Punktoperationen sind:

- Änderung von Kontrast und Helligkeit,

- Beschränkung der Ergebniswerte (clambing),

- Invertieren von Bildern,

- Schwellwertoperation (thresholding).

Da die Schwellwertoperation eine wichtige Punktoperation ist und diese in der vorgegebenen Problemstellung der Objekterkennung verwendet wird, wird in dieser Arbeit nur auf diese eingegangen. Das Schwellwertverfahren ist eine effektive Methode zur Segmentierung von Bildern, bei denen ein großer Kontrast zwischen dem Objekt und dem Hintergrund vorliegt. Der Rechenaufwand ist dabei sehr gering und der Algorithmus liefert immer getrennte Regionen zurück.

Bei der Schwellwertoperation werden die Bildwerte in zwei Klassen aufgeteilt, wobei die erste Klasse den Hintergrund (Wert 0) und die zweite Klasse das Objekt bzw. die Objekte (Wert 1) repräsentiert. Die Klassen sind abhängig vom Schwellwert (threshold value). In dieser Punktoperation werden alle Pixel einem von zwei fixen Intensitätswerten zugeordnet, so dass nach der Operation ein Binärbild entsteht.

Um einen geeigneten Schwellwert festlegen zu können, helfen Histogramme. In einem Histogramm werden bestimmte Informationen über ein Bild kompakt sichtbar gemacht. Daraus lassen sich dann die Größe des effektiv genutzten Intensitätsbereiches und die Gleich­mäßigkeit der Häufigkeitsverteilung ablesen.

Bei einem Grauwert-Histogramm kann die Häufigkeitsverteilung der Grauwerte eines Bildes abgelesen werden (Beispiel siehe Abbildung 2.5). Dabei zeigt es zu jedem möglichen Grauwert die Anzahl der Pixel an, die diesen Grauwert haben. Auch wenn die Ortsinformationen der Pixel verloren gehen, sind Histogramme sehr hilfreich bei der Segmentierung. Ein geeigneter Schwellwert kann z. B. das im Histogramm gezeigte relative Minimum sein. In Abbildung 2.5 könnte z. B. ein Wert von ca. 160 als threshold value für die Segmentierung benutzt werden.

Abbildung 2.5: (1) Originalbild; (2) Grauwert-Histogramm

2.3.2 Regionenmarkierung

Durch die Punktoperation ist bekannt, welche Pixel zum Vordergrund und welche zum Hintergrund gehören. Bei der Regionenmarkierung wird herausgefunden, welche Vordergrund­pixel zu einem Objekt gehören. Ein Objekt ist eine Gruppe von aneinander angrenzenden Vordergrundpixeln. Um ein Objekt zu erhalten, werden die segmentierten Regionen in zusammenhängende Bereiche zerlegt. Dabei werden zueinander benachbarte Pixel schrittweise zu Regionen zusammengefügt. Dies ist z. B. mit einer 8er-Nachbarschaft möglich. Dabei gehört ein Pixel einem Objekt an, wenn es direkt oder diagonal an einem seiner Bildpunkte angrenzt. Alle Pixel, die innerhalb einer Region sind, erhalten eine eindeutige Identifikationsnummer (label).

Um in HALCON zusammenhängende Regionen zu berechnen, wird der connection-Operator verwendet.

2.4 Merkmalsextraktion

Nach der Trennung der Objekte/Regionen vom Hintergrund müssen einige Eigenschaften aus den Objekten gesammelt werden, damit diese genau beschrieben und später klassifiziert werden können.

2.4.1 Formmerkmale (Features)

Formmerkmale sind bestimmte numerische oder qualitative Merkmale einer Region, die aus ihren Bildpunkten berechnet werden. Damit eine Region möglichst eindeutig beschrieben wird, werden verschiedene Features zu einem Vektor kombiniert. Dieser dient als eine Art Signatur für die Region, damit die Region bei einer Klassifizierung von anderen unter­schieden werden kann.

Im Folgenden werden einige Merkmale beschrieben, die für die Bearbeitung der Problem­stellung benutzt wurden. Dabei steht in den Klammern hinter dem Merkmal der dazugehörige HALCON-Operator.

Umfang (contlength)

Der Umfang einer Region wird durch die Länge ihrer Kontur, d. h. die Anzahl der Randpixel eines Objekts, bestimmt, wobei die Region zusammenhängend sein muss.

Fläche (area_center)

Die Fläche bei einem Binärbild ist die Anzahl der Bildpunkte, die zum Objekt gehören. Dabei werden die Pixel aufsummiert, die dem Objekt angehören.

Rundheit (roundness)

Die Maßzahl für die Rundheit wird aus dem Umfang und dem Flächeninhalt des segmentierten Objektes ermittelt. Die Rundheit eines Objekts wird auch als Kompaktheit bezeichnet. Sie wird wie folgt berechnet:

K = U2 / (4π * F)

Dabei ist der Wert für K gleich eins, wenn es sich um einen Kreis handelt. Der Wert für K wird umso höher, je größer der Umfang eines Objektes im Verhältnis zu seinem Flächeninhalt ist.

Dieses Merkmal kann verwendet werden, um längliche Objekte von nicht länglichen Objekten zu unterscheiden. Mit der Rundheit wird der Abstand der Kontur zum Schwerpunkt der Fläche untersucht.

Exzentrizität (eccentricity)

Die Exzentrizität ist die Länglichkeit einer Region. Sie wird über die Momente (siehe Abschnitt „Momente“) bestimmt.

Das Merkmal der Exzentrizität ist eine die Region umhüllende Ellipse mit maximalem Seitenverhältnis und wird wie folgt definiert:

Eccentricity(R) = [[m20(R) - m02(R)]2 + 4* [m11(R)]2] / [m20(R) + m02(R)]2

Dieses Maß ergibt Werte zwischen null und eins. Dabei hat ein rundes Objekt die Exzentrizität von null und ein extrem lang gezogenes Objekt den Wert eins.

Die Exzentrizität berechnet drei Formmerkmale, die aus den geometrischen Momenten hergeleitet sind. Die Anisometrie (Anisometry), die Massigkeit (Bulkiness) und den Strukturfaktor (StructureFactor).

Anisometry = Ra / Rb

Bulkiness = π * Ra * Rb / F

StructureFactor = Anisometry * Bulkiness -1

wobei

.

Kreisförmigkeit (circularity)

Bei der Kreisförmigkeit wird die Ähnlichkeit der Region mit einem Kreis berechnet. Die Ähnlichkeit wird wie folgt definiert:

C = F / ( max2 * π)

Dabei ist F die Fläche der Region und max der maximale Abstand vom Schwerpunkt zu allen Konturpunkten. Wenn der Formfaktor C gleich eins ist, handelt es sich um einen Kreis. Der Formfaktor ist kleiner als eins, wenn die Region lang gestreckt ist oder Hohlflächen hat.

Durchmesser einer Region (diameter_region)

Beim Durchmesser einer Region wird der maximale Abstand zweier Randpunkte einer Region berechnet. Dabei werden die Koordinaten der beiden Extrempunkte und der Abstand zwischen diesen Punkten zurückgegeben.

Intensität/Helligkeit (intensity)

Mit der Intensität werden der Mittelwert und die Abweichung der Grauwerte des Eingabe­bildes innerhalb der Regionen berechnet.

Rechteckigkeit (rectangularity)

Bei diesem Merkmal wird die Rechteckigkeit der Eingaberegion berechnet. Dabei wird ein Rechteck ermittelt, welches die gleichen ersten und zweiten Momente besitzt wie die Eingabe­region. Dann wird die Differenz zwischen dem ermittelten Rechteck und der Eingabe­region berechnet und somit wird das Rechteckigkeitsmaß erhalten.

Konvexe Hülle, Konvexität, Dichte (convexity)

Die Konvexität wird mit

C = Fo / Fc

berechnet. Wobei Fo die Originalfläche der Region und Fc die Fläche der konvexen Hülle ist.

Die konvexe Hülle kann mit morphologischen Operationen bestimmt werden.

Schwerpunkt (area_center)

Der Schwerpunkt berechnet sich aus dem Mittelwert der Zeilen- bzw. Spaltenkoordinaten aller Punkte einer Region. Wenn die Koordinaten vom Objektschwerpunkt bekannt sind, kann leicht erkannt werden, ob der Schwerpunkt innerhalb des Objektes liegt oder nicht. Dies kann ein einfaches Entscheidungsmerkmal bei der Objekterkennung sein.

Bei HALCON wird der Schwerpunkt zusammen mit der Fläche berechnet.

Momente (moments_region_central_invar)

Momente dienen zur Formbeschreibung. Mit dem Moment 2. Ordnung beginnt die über der Flächenmessung hinausgehende Analyse der Form, da das Moment 1. Ordnung per Definition null ist und das Moment 0. Ordnung die Fläche eines Grauwert- bzw. Binärobjekts liefert. Die drei Momente 2. Ordnung (m2,0; m0,2; m1,1) sind wie in der Mechanik zu verstehen. Sie sind also das Trägheitsmoment für die Rotation des Objekts um seinen Schwerpunkt. Die Momente erhalten Terme, in denen die Dichte des Objekts mit dem Quadrat der Entfernung vom Schwerpunkt multipliziert wird.

Die zentralen Momente (I1, I2, I3, I4) werden wie folgt berechnet:

I1 = m20m02 - m112

I2 = (m30m03 - m21m12)2 - 4(m30m12 - m212) (m21m03 - m122)

I3 = m20(m21m03 - m122) - m11(m30m03 - m21m12) + m02(m30m12 - m212)

I4 = m302m023 - 6m30m21m11m022 + 6m30m12m02(2m112 - m20m02) + m30m03(6m20m11m02 - 8m113) + 9m212m20m022 - 18m21m12m20m11m02 + 6m21m03m20(2m112 - m20m02) + 9m122m202m02 - 6m12m03m11m202 + m032m203

Dabei ist das erste Moment (I1) der Erwartungswert. Das zweite zentrale Moment (I2) ist die Varianz. Das dritte zentrale Moment (I3) ist nach Normierung die Schiefe (Symmetrie einer

Verteilung zum Mittelwert) und das vierte zentrale Moment (I4) ist nach Normierung die Wölbung (Kurtosis und Exzess).

Die normierten zentralen Momente (PSI1, PSI2, PSI3, PSI4) sind invariant, d. h. Momente, die bei Bewegung und linearer Transformation unverändert bleiben. Diese werden wie folgt berechnet:

PSI1 = I1 / m4

PSI2 = I2 / m10

PSI3 = I3 / m7

PSI4 = I4 / m11

Dabei ist m = m00 = Fläche der Region. Die Momente dienen zur Erkennung von Objekten, die in unterschiedlichen Orientierungen vorliegen.

Orientierung (orientation_region)

Die Orientierung ist die Richtung der Hauptachse, d. h. die Achse, die durch den Schwerpunkt und entlang der höchsten Ausdehnung einer Region verläuft. Sie wird mit Hilfe der normierten zentrierten Momente berechnet.

Die Orientierung Phi ist definiert durch:

Phi = -0.5 * atan2(2.0 * m11,m02 - m20)

Abbildung 2.6: (1) Objekte; (2) Objekte mit Orientierungspfeil

In Abbildung 2.6 ist ein Beispiel dafür, wie die Orientierung von Objekten angezeigt werden kann, um diese visuell zu verdeutlichen.

2.4.2 Farben

Farben sind auch ein wichtiges Merkmal von Objekten. Sie sind ein einfaches und manchmal sehr wichtiges Unterscheidungsmerkmal.

2.4.2.1 RGB-Farbbilder

RGB-Farbbilder sind eine Kombination aus den drei Primärfarben Rot (R), Grün (G) und Blau (B). Das RGB-Farbsystem ist additiv, d. h. die Farbmischung erfolgt durch Addition einzelner Farbkomponenten, ausgehend von schwarz.

Der RGB-Farbraum bildet einen dreidimensionalen Würfel (siehe Abbildung 2.7), wobei die Koordinatenachsen den drei Primärfarben R, G und B entsprechen. Dabei sind die RGB-Werte positiv und haben den Wertebereich [0,255]. Jede mögliche Farbe (Fi) entspricht einem Punkt innerhalb des Farb­würfels mit den Komponenten Fi = (Ri, Gi, Bi), wobei 0 ≤ Ri, Gi, Bi ≤ 255.

Abbildung 2.7: Farbwürfel [UNIM1]

Ein Farbbild setzt sich aus drei Graubildern zusammen, wobei jedes Graubild für die jeweiligen Farbwerte von Rot, Grün und Blau steht. Haben dabei alle den Minimalwert, so ergibt sich schwarz, bei dem Maximalwert weiß.

2.4.2.2 HSI-Farbraum

Im HSI-Farbraum werden die Farben durch den Farbton (Hue), die Sättigung (Saturation) und die Intensität (Intensity) beschrieben.

Abbildung 2.8: Farbkreis im HSI-Farbmodell [NEUM05]

Die Farbtöne werden durch Winkelkoordinaten festgelegt. Dabei ergeben alle Farbtöne zusammen den Farbkreis (siehe Abbildung 2.8). Wenn der Farbton z. B. auf 0° steht, handelt es sich um rot, bei 120° um grün und bei 240° um blau.

Die Sättigung gibt die Stärke der Farbkonzentration in einem Objekt an, d. h. wie viel weißes Licht dem Farbton beigemischt ist. Bei Sättigung = 0 z. B. ist keine Farbe zu sehen, es handelt sich dann um einen Grauton. Im Farbkreis ist die Sättigung der Abstand vom Mittelpunkt.

Die Intensität gibt an, mit welcher Lichtstärke eine Farbe zu sehen ist, d. h. wie viel Gesamt­licht vorhanden ist. Der HSI-Farbraum entspricht einer Zylinderform, dabei ist die Intensität die senkrechte Koordinate zur Bildebene.

Die Umwandlung in den HSI-Farbraum ist für die Unterscheidung von Farben sinnvoll, da dabei nur ein Parameter als Merkmal (Farbton) für die Unterscheidung berücksichtigt werden muss. Im RGB-Farbraum werden dafür alle drei Farbkomponenten benötigt.

In Abbildung 2.10 wird das Originalbild (Abbildung 2.9) in seine drei Farbkomponenten Rot, Grün und Blau, aufgeteilt. Dabei gibt es für jeden Farbkanal ein eigenes Bild. In Abbildung 2.11 ist das in dem HSI-Farbraum umgewandelte Originalbild zu sehen. Die drei Bilder stehen für den Farbton, die Sättigung und die Intensität.

Abbildung 2.9: dreikanaliges Originalbild

Abbildung 2.10: RGB-Bild, (1) Rot-Kanal; (2) Grün-Kanal; (3) Blau-Kanal

Abbildung 2.11: HSI-Bild, (1) Farbton; (2) Sättigung; (3) Intensität

Der Operator decompose3 von HALCON wandelt ein dreikanaliges Bild in drei einkanalige Bilder um, d. h. aus dem Originalbild wird das Rot-, Grün- und Blaubild.

Mit dem Operator trans_from_rgb aus der HALCON-Bibliothek wird ein Bild vom RGB-Farbraum in einen anderen Farbraum (z. B. HSI) transformiert.

Die Umrechnungsformel für die Transformation in den HSI-Farbraum ist:

.2.5 Klassifikation

Ziel der Klassifikation ist es, die durch die Segmentierung gefundenen Objekte und deren Merkmale zu charakterisieren. Dabei gibt es mehrere Klassifikationsverfahren. Da die Objekt­­erkennungsalgorithmen ein wesentlicher Bestandteil dieser Arbeit sind und detaillierter beschreiben werden, wird darauf erst in Kapitel 4 näher eingegangen.

3. Systemumgebung

In diesem Kapitel wird die Hardware und die Software, die bei dieser Arbeit verwendet wurden, beschrieben.

3.1 Hardware

Für diese Arbeit wurden drei Kamerasysteme getestet, um herauszufinden, welche am besten für die Problemstellung geeignet ist. Folgende Kamerasysteme kamen dabei zum Einsatz:

- Casio Exilim,

- Logitech Webcam,

- UEye.

Die ersten Tests wurden mit der Digitalkamera Casio Exilim durchgeführt. Mit dieser Kamera war es schwierig gleichmäßig ausgeleuchtete Bilder zu erhalten. Problematisch waren hier der Automatikmodus und das Blitzlicht. Das Blitzlicht führte zu einem starken Schattenwurf, der sich sehr negativ auf die Erkennung auswirkte. Ohne Blitzlicht dagegen war die Ausleuchtung der Bilder zu schlecht bzw. musste mit einer anderen Lichtquelle für eine geeignete Aus­leuchtung gesorgt werden. Der Automatikmodus musste ebenfalls deaktiviert werden, um unterschiedliche Bildausleuchtungen und unterschiedliche Farbwiedergaben zu vermeiden. Ein weiteres Problem war eine fehlende Möglichkeit, die Kamera an einem festen Punkt zu befestigen, um Bilder mit einem konstanten Abstand und einer einheitlichen Kamera­perspektive zu erhalten. Aus diesen Gründen wurde die Idee, diese Kamera einzusetzen, verworfen.

Die Webcam von Logitech hatte eine zu kleine Auflösung und zusätzlich das Problem, dass die Einstellungen, wie z. B. Helligkeit, Kontrast, Fokus etc. nicht manuell geändert werden konnten. Die Kamera hat sich permanent automatisch justiert. Dies führte dazu, dass die Aufnahmen immer anders waren und diese Bilder nicht für die Erkennung verwertet werden konnten. Das größte Problem waren die starken Helligkeitsunterschiede in den Bildern.

Mit der UEye Kamera wurden die besten Ergebnisse erzielt. Dies lag daran, dass die Einstellungen der Kamera komplett manuell gesteuert werden konnten. Somit konnten für jede Problemstellung optimale Einstellungen gefunden werden, die dann auch durch eine Feststellmöglichkeit erhalten blieben. Ein weiterer Vorteil war die Verfügbarkeit eines Stativs für diese Kamera, so dass bei allen Aufnahmen eine identische Kameraperspektive und -abstand gewährleistet werden konnte.

Für eine möglichst gleichmäßige Beleuchtung wurde eine ringförmige Leuchtstoffröhre verwendet, die oberhalb der Kamera positioniert wurde. So konnten die Bilder gleichmäßig ausgeleuchtet werden, ohne dass durch die Kamera ein Schatten erzeugt wurde. Weiterhin konnte durch diese Ausleuchtung der Schattenwurf der zu erkennenden Teile weitestgehend minimiert werden.

Abbildung 3.1: Arbeitsbereich

In Abbildung 3.1 wird der Aufbau und die Anordnung der Hardwarekomponenten veranschaulicht. Dieser Arbeitsbereich kam bei der Versuchdurchführung und Bildaufnahme zur Anwendung.

3.2 Software - HALCON

HALCON ist ein Bildanalysesystem der Firma MVTec, welches für den Einsatz in der Industrie, der Bildung und der Forschung entwickelt wurde. In dieser Arbeit wurde die Version 9.0 der Software verwendet. Die Software bietet eine große Bibliothek, die ein breites Spektrum an Bildverarbeitungsmethoden beinhaltet. Sie umfasst mehr als 1400 Operatoren, welche Funktionen für die Bildbearbeitung und -analyse bereitstellen. Im Folgenden wird auf die wesentlichen Bestandteile und Funktionen eingegangen. Eine ausführliche Beschreibung aller Möglichkeiten, die HALCON bietet, würde den Rahmen dieser Arbeit sprengen.

3.2.1 Aufbau

HALCON besteht aus (siehe Abbildung 3.2):

- der interaktiven Programmierumgebung HDevelop,

- Klassen, die den Programmiersprachen C, C++, C#, Visual Basic und Delphi die Bibliothek zur Verfügung stellen,

- einer großen, umfassenden Bibliothek von Bildbearbeitungsoperatoren (HALCON Image Processing Library),

- der Extension Packages -Schnittstelle, die es dem Benutzer ermöglicht bestehende oder neue Algorithmen in HALCON zu integrieren,

- der Image Acquisition Interface -Schnittstelle (Bildeinzugsschnittstelle).

Abbildung 3.2: Architektur des HALCON-Systems [HALC1]

3.2.2 HDevelop

HALCON bietet die interaktive Programmierumgebung HDevelop, welche über einen Editor, einen Interpreter mit Debug-Funktionen, eine Verwaltungseinheit für Variablen und umfangreicher Visualisierungsmöglichkeiten verfügt. Ein Programm in HDevelop entsteht, indem die vorgegebenen Operatoren ausgewählt und mit sinnvollen Parametern gefüllt werden. Nach dem Einfügen in den Quellcode kann das entstehende Programm modifiziert und getestet werden. Außerdem verfügt HDevelop über einige Assistenten, die es ermöglichen komplexe Aufgaben, wie Matching oder Bildeinzug, durch wenige Mausklicks über die graphische Benutzeroberfläche zu steuern.

Abbildung 3.3: HDevelop-Programmierumgebung

In der HDevelop-Umgebung gibt es vier Hauptfenster, das Grafik-, das Variablen-, das Operator- und das Programmfenster (siehe Abbildung 3.3).

Das Grafikfenster dient zur Visualisierung der Original- und der bearbeiteten Bilddaten. Es können mehrere Grafikfenster angelegt werden. So können stets alle wichtigen Bilddaten übersichtlich strukturiert angezeigt und bei Bedarf jeder Verarbeitungsschritt visualisiert werden.

Im Variablenfenster werden die Inhalte der verwendeten Variablen schon während der Lauf­zeit angezeigt. Dabei kann zwischen den verschiedenen Variablen gewechselt werden, um einen guten Überblick zu erhalten.

Die zentrale Aufgabe des Operatorfensters ist die Eingabe bzw. Veränderung der verwendeten Operatoren. Die Eingabe erfolgt strukturiert über Masken, in denen Default-Werte für die Operator­parameter vorgeschlagen werden. Die strukturierte Form der Eingabe verringert die Gefahr von Syntaxfehlern. Weiterhin ist vom Operatorfenster aus ein direkter Zugriff auf die kontextbezogene Online-Hilfe von HALCON möglich.

Im Programmfenster wird der Quellcode des Programms dargestellt. Außerdem können Haltepunkte gesetzt und einzelne Zeilen aktiviert bzw. deaktiviert werden. Ein Programm kann auch im Single-Step-Modus ausgeführt werden, wobei im Programmfenster genau verfolgt werden kann, welche Programmzeilen ausgeführt wurden und wo sich das Programm gerade befindet. So ist es möglich, das Programm zu debuggen und Fehler schnell zu finden.

Im Operator-Menü werden alle zur Verfügung stehenden Operatoren, die in Klassen eingeteilt sind, angezeigt. Wenn dort ein Operator ausgewählt wird, wird er in dem Operatorfenster übernommen und angezeigt. Dort können dann die Parameter eingegeben bzw. die Default-Werte geändert werden. Wenn die Parameter dann mit OK bestätigt werden, wird der Operator mit den gewählten Parametern im Quelltext übernommen.

Über das Visualisierungs-Menü können die Bilder und Regionen, die im Programmverlauf erzeugt wurden, also die Ergebnisse der einzelnen Bildverarbeitungsschritte, angezeigt werden. Weiterhin gibt es im Visualisierungs-Menü verschiedene zusätzliche Bearbeitungs- bzw. Anzeigemöglichkeiten, um Ideen für die Programmverbesserung zu testen bzw. zu erkennen. So können z. B. Histogramme angezeigt und analysiert werden, um beispielsweise sinnvolle threshold-Schwellen zu bestimmen.

Mit dem Hilfe-Menü kann das Referenzhandbuch erreicht werden, in dem die Beschreibungen der verschiedenen Operatoren und die einzelnen Parameter beschrieben sind.

Mit dem Assistenten-Menü können der Matching-Assistent und der Bildeinzugs-Assistent geöffnet werden, die es durch wenige Mausklicks erlauben, komplexe Aufgaben über die Benutzeroberfläche zu steuern.

Beim Erstellen eines HDevelop-Programms wird der Quellcode zeilenweise erstellt. Der nächste Operator wird durch direkte Eingabe im Operatorfenster oder Auswahl des Menü­punktes ausgewählt. Nach der bestätigenden Eingabe der Parameter wird im Programmfenster an der aktuellen Einfügeposition der Quelltext für diesen Operator eingefügt. Die Einfüge­position wird durch ein kleines Dreieck, den Insert-Cursor, auf der linken Seite im Programm­fenster angezeigt.

4. Objekterkennungsalgorithmen

In diesem Kapitel werden vier verschiedene Objekterkennungsstrategien vorgestellt. Dabei handelt es sich um die einfache Zuweisung, das Clusterverfahren, insbesondere das „nearest neighbour“-Verfahren, das Trainieren durch künstliche neuronale Netze und den Matching­assistenten von HALCON in der Entwicklungsumgebung HDevelop, welcher auf Template-Matching basiert.

4.1 Zuweisung

Die einfachste Möglichkeit Objekte zu klassifizieren stellt die manuelle Zuweisung gefundener Objekte zu den einzelnen Objektklassen dar. Dabei werden im ersten Schritt alle wichtigen Objektmerkmale, anhand derer eine Unterscheidung der Objekte möglich ist, definiert. Für jede Objektklasse werden dann anhand einiger sinnvoller Beispielbilder die Werte für die jeweiligen Merkmale berechnet. Anschließend wird für alle Merkmale jeder Objektklasse der Wertebereich ermittelt. Im Programm wird dann für jede Objektklasse anhand der tatsächlich ermittelten Merkmalswerte geprüft, ob diese alle in den jeweils definierten Wertebereichen für die Objektklasse liegen. Wenn das der Fall ist, dann bedeutet das, dass das Objekt dieser Objektklasse zugeordnet wird. Wenn nicht alle Merkmale in den definierten Bereichen liegen, dann wird der Wertebereich der nächsten Objektklasse geprüft. Dieser Vorgang wird solange wiederholt, bis die erkannten Merkmale einer Objektklasse zugeordnet werden können oder alle Objektklassen ohne Ergebnis geprüft wurden.

Im Folgenden soll ein Beispiel dieses Verfahren demonstrieren:

Objekt

Merkmal

Kleinster Wert

Größter Wert

Objekt 1

Flächeninhalt

500

600

Objekt 1

Farbwert

120

160

Objekt 2

Flächeninhalt

550

650

Objekt 2

Farbwert

200

230

Quellcode zur Objektklassifikation (Pseudosprache):

if ((Flaecheninhalt >= 500) && (Flaecheninhalt <= 600) &&

(Farbwert >= 120) && (Farbwert <= 160)) Print(„Objekt 1 erkannt“);

else if ((Flaecheninhalt >= 550) && (Flaecheninhalt <= 650) &&

(Farbwert >= 200) && (Farbwert <= 230)) Print(„Objekt 2 erkannt“);

Der Vorteil eines solchen Verfahrens liegt in der Einfachheit der Methode. Diese lässt sich, sofern die Objektanzahl überschaubar ist, sehr einfach implementieren.

Der Nachteil ist, dass das Verfahren nur funktioniert, wenn sich die Wertebereiche zweier Objektklassen nicht für alle Merkmale überlappen. Wenn das der Fall ist, kann es vor­kommen, dass ein Objekt nicht eindeutig einer Objektklasse zugeordnet werden kann. Da die Methode nicht mit Wahrscheinlichkeiten oder Abständen zu einem definierten Merkmals­mittelwert arbeitet, sondern mit fest definierten Wertebereichen, kann in einem solchen Fall keine Aussage darüber getroffen werden, wie wahrscheinlich es zu der einen oder der anderen Objektklasse gehört. Eine Zuordnung ist dann nicht möglich. Ein weiteres Problem ist, wenn nur ein Merkmalswert minimal außerhalb des definierten Wertebereiches für die richtige Objektklasse liegt, denn dann kann das Objekt dieser Klasse nicht mehr zugeordnet werden.

Ein weiterer Nachteil ist, dass zur Definition des Wertebereichs sehr viele Testbeispiele für jede Objektklasse benötigt werden, um auch bei unterschiedlichen Rahmenbedingungen (z. B. Lichtverhältnisse, Bildrauschen) eine gute Erkennungsrate zu erreichen oder es muss eine sinnvolle Toleranz an den Wertebereichsgrenzen zugelassen werden, was sich aber wiederum negativ auf die Erkennung auswirken kann.

Aufgrund dieser Gegebenheiten kann abschließend festgestellt werden, dass dieses Verfahren zwar einfach umzusetzen ist, aber, insbesondere aufgrund der fehlenden Robustheit gegenüber unterschiedlicher Rahmenbedingungen, nicht geeignet ist für eine gute Objekterkennung.

4.2 Clusterverfahren

Die Clusteranalyse ist ein statistisches, heuristisches Verfahren zur systematischen Klassifizierung von Beobachtungen. Ziel der Clusteranalyse ist es, eine gegebene Menge von Objekten in Cluster (Gruppen, Klassen) einzuteilen. Dabei sollte innerhalb der Cluster Homogenität herrschen, d. h. Objekte, die demselben Cluster angehören, sollten möglichst ähnlich sein und zwischen den Clustern Heterogenität, d. h. Objekte die unterschiedlichen Clustern zugeordnet sind, sollten möglichst verschieden sein (vgl. [HÖPP97]).

Die Klassenverteilung sollte disjunkt, d. h. jedes Objekt gehört genau zu einer Klasse und exhaustiv, d. h. alle Objekte müssen zugeordnet werden, sein. Ein weiterer Grundsatz der Clusteranalyse ist, dass die Clusteranzahl möglichst klein gewählt werden sollte, da die Berechnungszeit sonst zu groß wird. Es gibt sieben unterschiedliche Techniken der Cluster­analyse: das unvollständige-, das deterministische-, das überlappende-, das probabilistische-, das possibilistische-, das hierarchische- und das „Objective-Function“ Clusteranalyse­verfahren. Da für das Problem der Objekterkennung nur das probabilistische Clusteranalyse­verfahren in Frage kommt, wird hier nur auf dieses weiter eingegangen.

Bei dem probabilistischen Clusteranalyseverfahren wird für jedes Objekt eine Wahrscheinlichkeits­verteilung über den Clustern bestimmt, die angibt, mit welcher Wahrscheinlichkeit ein Objekt einem Cluster zugeordnet wird. Ein Beispiel für dieses Clusterverfahren ist das „k-nearest neighbour“-Verfahren. Dabei wird der nächste Nachbar aus der gesamten Objektmenge ermittelt. Dafür wird mit der Euklidischen Distanz (Abstandsberechnung) die Entfernung zwischen den zugeordneten Merkmalen und allen anderen Merkmalen berechnet. Danach wird der jeweilige k Nachbar durch die kürzeste Distanz ermittelt. Liegen dabei alle k Merkmale in einem Cluster, so wird das Objekt diesem Cluster zugeordnet. Liegen dabei nicht alle k Parameter in einem Cluster, dann wird nach dem Mehrheitsprinzip entschieden, d. h. das Objekt wird dem Cluster zugeordnet, aus dem die Mehrzahl der nächsten Nachbarn stammt.

Euklidische Distanz:

Dabei ist xi der jeweils ermittelte Merkmalswert und yi der optimale Vergleichs­merkmals­wert. Der euklidische Abstand ist invariant bzgl. Verschiebung, Drehung und Spiegelung, aber nicht invariant bei der Skalierung.

Bei dieser Distanzberechnung werden zwei Objekte als sehr ähnlich bezeichnet, wenn ihre Distanz sehr klein ist. Dabei bedeuten große Distanzen, dass eine geringe Ähnlichkeit vorliegt. Wenn die Distanz gleich null ist, sind die zwei Objekte identisch.

Beim Clusterverfahren gibt es zwei Phasen, die Einlern- und die Klassifikationsphase. In der Einlernphase werden anhand des bekannten Testsatzes Cluster gebildet und bei der Klassifikations­phase wird für ein unbekanntes Objekt durch Vergleich seines Merkmals­vektors mit dem der bekannten Cluster eine Klassifikation durchgeführt. Es ist meist sinnvoll eine Zurückweisungsklasse einzuführen, in der alle Bildpunkte klassifiziert werden, wobei der Abstand zu der nächstliegenden Musterklasse größer als ein Schwellwert, dem Zurück­weisungsradius, sein muss. Durch diesen Minimum-Distanz-Klassifikator mit festem Zurückweisungsradius werden die Musterklassen im zweidimensionalen Merkmals­raum durch Kreise angenähert.

Dieses Verfahren ist für die Problemstellung der Objekterkennung mit dem vorgegebenen Datensatz der zu erkennenden Objekte nicht geeignet, da der Datensatz zu groß ist und dadurch keine repräsentativen Ergebnisse zu erwarten sind und der Rechenaufwand zu groß wird. Das „nearest neighbour“-Verfahren neigt außerdem zur Kettenbildung. Dabei werden viele große Cluster gebildet, da dicht aneinander liegende Elemente, die zu unterschiedlichen Gruppen gehören, nicht genau getrennt werden können. Des Weiteren wird dieses Verfahren von HALCON nicht unterstützt und müsste somit aufwändig implementiert werden.

4.3 Training, Neuronale Netze

Künstliche neuronale Netze imitieren die Organisations- und Verarbeitungsprinzipien des menschlichen Gehirns. Sie zeichnen sich durch ihre Lernfähigkeit, d. h. sie können eine Aufgabe anhand von Trainingsbeispielen erlernen, ohne dazu explizit programmiert werden zu müssen, ihre hohe Fehlertoleranz, ihre hohe Parallelität bei der Informations­verarbeitung und ihre Robustheit gegen kleine Störungen und Datenmängel aus.

Neuronale Netze beschäftigen sich mit Eigenschaften von Netzen mit primitiven Funktionen (vgl. [ROJA96]). Dabei sitzen die primitiven Funktionen an den Knoten (Neuronen) des Netzes und sind meist nicht mehr als eine Summation von Informationen und/oder eindimensionaler nichtlinearer Funktionen. Neuronale Netze bestehen aus Verbindungen (Kanten) und Neuronen, die die Funktionsauswertung durchführen. Die Informations­übertragung findet nur über die Kanten des Netzes statt, wobei die Weitergabe der Information über ein Kantengewicht modelliert wird, d. h. die weitergeleitete Information wird mit einen numerischen Faktor multipliziert und auf diese Weise skaliert. Es gibt gewichtete und ungewichtete neuronale Netze. Da sich bei den ungewichteten Netzen die Netztopologie (Verbindungsmuster) durch Lernalgorithmen verändern kann, werden diese hier nicht weiter berücksichtigt.

Die Informationen werden verarbeitet, indem sich die Neuronen mit Hilfe von gerichteten Verbindungen untereinander aktivieren. Die stark idealisierten Neuronen bestehen aus einem Eingabevektor, einem Gewichtsvektor, einer Aktivierungsfunktion und einer Ausgabe­funktion.

Bei künstlich neuronalen Netzen handelt es sich um eine Art Blackbox, die aus einer Eingabemenge eine bestimmte Ausgabemenge erzeugen soll (siehe Abbildung 4.1).

Abbildung 4.1: künstliches neuronales Netz (Blackbox)

In der Blackbox können mehrere Schichten vorhanden sein. Dies wird als Schichten­architektur bezeichnet, wobei es eine Eingabeschicht (x1, …, xn), eine Ausgabeschicht

(y1, …, ym) und n verborgene Schichten gibt. Dabei sind die Neuronen einer Schicht nicht miteinander verbunden. Die Neuronen benachbarter Schichten sind in einem totalen bipartiten Graphen angeordnet, d. h. jedes Neuron in der einen wird mit jedem Neuron in der benachbarten Schicht verbunden (siehe Abbildung 4.2).

In der Eingabeschicht erfolgt keine Verarbeitung, es werden nur die Eingabewerte auf die Eingabewerte der ersten verdeckten Schicht verteilt. Die Ausgabeschicht liefert die Ausgabe­werte des gesamten Netzes.

Abbildung 4.2: Schichtenarchitektur eines neuronalen Netzes

Da der Trainingsaufwand durch die Anzahl der Gewichte eines Netzes mit jedem Neuron steigt, gibt es einige unterschiedliche Lernmethoden. Eine populäre Lernmethode ist der Backpropagation-Algorithmus. Dabei wird das Minimum der Fehlerfunktion eines bestimmten Lernproblems durch Abstieg in der Gradientenrichtung gesucht. Die Lösung des Lernproblems ist die Kombination der Gewichte eines Netzes, die die Fehlerfunktion minimiert. Ein Problem dabei ist, dass abhängig vom Initialisierungswert des Zufallszahlen­generators (RandSeed), der zur Initialisierung des neuronalen Netzes mit zufälligen Werten verwendet wird, ein relativ hoher Fehler als optimaler Wert bestimmt werden kann. D. h., dass die Optimierung in einem lokalen Minimum stecken bleiben kann. Falls dies der Fall ist, sollte das Netz mit einem anderen Initialisierungswert trainiert werden.

Je größer das Netz ist, desto stärker wird die Fehleroberfläche zerklüftet. Das bedeutet, dass die Anzahl der lokalen Minima steigt und dies erschwert es, das globale Minimum zu finden.

Backpropagation-Netze werden dann verwendet, wenn bestimmte Eingaben auf bestimmte Ausgaben abgebildet werden sollen. Dabei besteht das Lernproblem darin, eine Funktion zu finden, die am genauesten die Trainingsausgabewerte den entsprechenden Trainings­eingabewerten zuordnet. Die Funktionen lassen sich durch die Änderung der Netzgewichte verändern.

FEHLERFUNKTION!!!

Vor jeder Ausgabe gibt es eine Aktivierungsfunktion, mit der die Ausgabe berechnet wird. Es gibt unterschiedliche Arten von Aktivierungsfunktionen, die lineare, die Schwellwert- oder die Sigmoidfunktion.

Bei der linearen Funktion (siehe Abbildung 4.3) wird der Merkmalsraum in Hyperebenen aufgeteilt, dies entspricht einem Klassifikator. Da bei dieser Funktion die Einsatzmöglichkeiten eingeschränkt sind, wird diese in der Praxis selten verwendet.

Abbildung 4.3: lineare Funktion [WIKI2]

Die Schwellwertfunktion (siehe Abbildung 4.4) erlaubt es, diskrete Ausgangsaktivierungen zu erzeugen. Darum sind diese eine weit verbreitete Aktivierungsfunktion.

Datei:HardLimitFunction.png

Abbildung 4.4: Schwellwertfunktion [WIKI2]

Die verbreitetste Aktivierungsfunktion ist die Sigmoidfunktion (siehe Abbildung 4.5). Sie gehört zu der Klasse der semilinearen Funktionen, wobei der Vorteil darin liegt, dass sie überall differenzierbar ist.

Außerdem glättet die Sigmoidfunktion die Fehlerfunktion.

Datei:SigmoidFunction.png

Abbildung 4.5: Sigmoidfunktion [WIKI2]

Bei der Backpropagation wird die Sigmoidfunktion als Aktivierungsfunktion verwendet. Sie wird wie folgt definiert:

Die Funktionsweise des iterativen Verfahrens (Backpropagation-Algorithmus) läuft wie folgt ab (vgl. [NISC07]):

1. Am Anfang erhalten die Gewichte der Neuronen einen zufälligen Wert.

2. Ein zufälliges Trainingspaar, was aus einem Eingabevektor und dem dazugehörigen Ausgabesollvektor besteht, wird ausgewählt.

3. Der Ausgabevektor wird mit Hilfe der Vorwärtsfunktion berechnet.

4. Daraus wird ein Fehlermaß zwischen dem Ausgabevektor und dem Sollvektor berechnet.

5. Dann werden die Gewichte so modifiziert, dass das Fehlermaß minimiert wird.

6. Die Schritte 2-5 werden solange wiederholt, bis das Fehlermaß akzeptabel klein ist, d. h. bis eine bestimmte Schwelle erreicht wird oder eine vorgegebene Anzahl von Durchläufen erreicht ist.

In diesem Ablauf werden die Schritte 2 und 3 als Vorwärtsschritt und die Schritte 4 und 5 als Rückwärtsschritt (Backpropagation) bezeichnet.

Je komplexer die Ein- und Ausgabebeziehungen sind und je größer die Anzahl der zu lernenden Merkmalszuordnungen, desto mehr verdeckte Neuronen sind nötig. Dabei sollte aber die Anzahl der verborgenen Schichten und die Anzahl der Neuronen pro Schicht möglichst gering sein, da bei zu großer Anzahl der Generalisierungseffekt schwindet, d. h. die Fähigkeit, die Beziehung zwischen nicht gelernten Objekten, korrekt wiederzugeben. Dieses Problem tritt auch auf, wenn zu lange trainiert wird.

Der Ablauf der Klassifikation mit neuronalen Netzen kann in zwei Bereiche aufgeteilt werden, zum einen in die Trainings- und zum anderen in die Klassifikationsphase.

In der Trainingsphase werden zuerst die Trainingsbilder geladen und eingelesen. Danach werden anhand der Bilder für jedes Objekt die definierten Merkmale berechnet und daraus die Trainingsdaten aufgebaut. Die Trainingsdaten werden nun vom neuronalen Netz trainiert. Dabei werden die Verbindungsgewichte gemäß dem Lernalgorithmus (z. B. mit dem Backpropagation-Algorithmus) selbstständig so angepasst, dass das neuronale Netz die gewünschte Aufgabe lösen kann. Das Ziel des Trainings ist es, unbekannte, nicht gelernte Eingabemuster korrekt zu verarbeiten.

In der Klassifikationsphase werden ebenfalls Bilder geladen, für die die Objekterkennung durchgeführt werden soll. Auch hier wird genau wie beim Training für jedes im Bild gefundene Objekt der Merkmalsvektor berechnet. Dann wird dieser Merkmalsvektor dem trainierten Netz übergeben und die Klassifizierung wird gestartet. Das Ergebnis ist eine trainierte Objektklasse, der das Objekt zugeordnet wird. Wenn das Netz gute Generalisierungs­eigenschaften hat, ist das Ergebnis mit hoher Wahrscheinlichkeit die korrekte Objektklasse.

Ein großer Vorteil dieses Verfahrens ist, dass die Objekterkennung anhand von Trainingsbeispielen erlernt werden kann, ohne explizit programmiert zu werden. Des Weiteren zeichnet sich die hohe Parallelität bei der Informationsverarbeitung sehr positiv aus. Selbst komplexe Objekterkennungsaufgaben können mit einer hohen Performance verarbeitet werden. Die hohe Fehlertoleranz und Robustheit gegen kleine Störungen und Datenmängel sind ein weiterer Pluspunkt für dieses Verfahren. Ein Nachteil bei neuronalen Netzen ist, dass es schwierig ist eine optimale Netztopologie aufzustellen. Um geeignete Parameter für die Eingabe-, verdeckte und Ausgabeschicht zu erhalten, sind viele Tests und Auswertungen nötig. Ein weiterer Nachteil ist, dass der Algorithmus in einem lokalen Minimum der Fehlerfunktion stecken bleiben kann und somit nicht die optimalen Erkennungsraten erreicht.

Aufgrund der Vor- und Nachteile und der Tatsache, dass dieser Erkennungsalgorithmus auch für eine große Anzahl von Objekten geeignet ist, kann dieser für die Problemstellung der Objekterkennung verwendet werden. Hinzu kommt, dass dieses Verfahren von HALCON unterstützt wird.

4.4 Matchingassistent

Der Matchingassistent in der Entwicklungsumgebung HDevelop von HALCON basiert auf Template-Matching (Schablonenvergleich). Bei dem formbasierten Matching wird eine Schablone von der Region erzeugt, welche in Übungsbildern mit den erkannten Objekten verglichen wird. Dabei wird das Objekt als Template gespeichert und dann wird jeder Bild­punkt und seine Nachbarschaft überprüft, wie groß die Ähnlichkeit zu dem vorgegebenen Template ist. Das Template-Matching ist sehr rechenaufwändig und somit auch zeit­aufwändig.

Der Vorgang beim Template-Matching ist, dass eine Schablone (Template) des zu erkennenden Objektes über ein Testbild geschoben wird. Dabei wird bestimmt, inwieweit sich die unter der Schablone befindliche Region mit dem gesuchten Objekt übereinstimmt. Dies wird solange wiederholt, bis die Schablone über allen Positionen des Bildes in allen möglichen Orientierungen getestet wurde. Da dieses Verfahren sehr aufwändig ist, ist es nur für eine geringe Anzahl von Objekten geeignet.

Beim Template-Matching wird im Trainingsbild ein Template angezeigt. Aus diesem Template wird dann ein Modell erzeugt. Dieses Modell wird dazu verwendet, Objekte im Testbild zu finden, die Ähnlichkeit mit dem Template haben.

Das Template-Matching erfordert keine Art der Segmentierung und ist außerdem robust und flexibel, da es invariant gegenüber der Beleuchtung, der Größe, der Rotation und der Lage des Objektes ist, dies ist allerdings abhängig von der Wahl der Methode.

HALCON bietet mehrere Methoden für das Template-Matching an. Diese sind das gray-value-based-, das shape-based-, das component-based-, das correlation-based-, das perspective, deformable-, das descriptor-based-, das 3D- und das point-based matching.

Der Matchingassistent in der Systemumgebung HDevelop unterstützt nur die Methode shape-based matching. Diese Methode ist robust gegenüber Rauschen, nichtlinearer Beleuchtungs­änderung und Stördaten. Außerdem ist sie invariant gegenüber der Skalierung und der Rotation.

Der Prozess des shape-based matching wird in zwei Phasen unterteilt. In der ersten Phase wird das Modell beschrieben und erstellt. Es kann in einer Datei gespeichert und in mehreren Anwendungen verwendet werden. Im zweiten Schritt wird das Modell dazu verwendet, ein Objekt zu finden und zu lokalisieren.

Im Folgenden wird der Matchingassistent von HDevelop grob vorgestellt.

Abbildung 4.6: Matching-Assistent (Modellerzeugung)

In der Modellerzeugung (siehe Abbildung 4.6) kann ein bereits erzeugtes Modell geladen und bearbeitet oder ein neues Modell erstellt werden. Beim Neuerstellen eines Modells wird zuerst ein Bild (Modellbild) geladen, auf dem das zu erkennende Objekt abgebildet ist. Dann muss in das geladene Bild von Hand die ROI (Region of Interest) erstellt werden. Dabei können die Regionen in ein achsenparalleles Rechteck, ein beliebiges Rechteck, ein Kreis, einer Ellipse oder einer beliebigen Form gezogen werden. Um die Region zu fixieren, muss die rechte Maustaste betätigt werden. Aus der Region in der ROI wird dann automatisch ein Modell erzeugt. Die daraus automatisch erstellten Modellparameter können auch von Hand definiert und eingestellt werden. So können hier beispielsweise Skalierungseinstellungen oder Einstellungen zum Kontrast vorgenommen werden, die die Erstellung des Modells beeinflussen.

Abbildung 4.7: Matching-Assistent (Modellanwendung)

In der Modellanwendung (siehe Abbildung 4.7) können Testbilder geladen werden, auf dem das erstellte Modell gefunden werden soll. Außerdem können in der Modellanwendung die voreingestellten Suchparameter verändert und die Erkennungsgeschwindigkeit optimiert werden. Bei der Optimierung können die Optimierungsart und die Erkennungsrate eingestellt werden. Als Optimierungsart kann zwischen drei verschiedenen Herangehensweisen gewählt werden. Die erste ist „Anzahl der in obiger Tabelle angegebenen Instanzen finden“, die zweite ist „Mindestens eine Modellinstanz pro Bild finden“ und die dritte ist „Maximale Anzahl von Modellinstanzen pro Bild finden“. Mit dem Parameter „Erkennungsrate“ kann die Erkennungsrate in Prozent angegeben werden, die bei der Objektsuche mindestens oder genau erfüllt sein muss.

Abbildung 4.8: Matching-Assistent (Inspektion)

Bei der Inspektion (siehe Abbildung 4.8) können die Erkennungsraten bestimmt und die Statistiken ausgelesen werden. Dies dient dazu, dass die eingestellten Parameter getestet und bei schlechten Ergebnissen verändert werden können. Bei dieser Bestimmung der Erkennungsrate lassen sich die Parametereinstellungen leicht überprüfen und testen ohne, dass der Quellcode generiert werden muss. Dies erspart sehr viel Zeit und lässt sich komfortabel auslesen.

Abbildung 4.9: Matching-Assistent (Codegenerierung)

Die Codegenerierung (siehe Abbildung 4.9) ermöglicht es auf schnelle Weise den Quellcode zu generieren. Dabei können die Variablennamen festgelegt werden, die verwendet werden sollen. Eine weitere Auswahl ist, ob das Modellbild zur Laufzeit angezeigt oder direkt die erstellte Modelldatei geladen werden soll. Außerdem verfügt die Funktion über eine Codevorschau, in der der Quellcode in einer Tabellenform übersichtlich dargestellt wird.

In Abbildung 4.10 und 4.11 sind Beispiele für Modellbilder und ihre daraus erstellten Modell-Konturen zu erkennen.

Abbildung 4.10: (1) Originalbild „grüne Steine“; (2) Modell-Kontur „grüne Steine“

Abbildung 4.11: (1) Originalbild „Rad“; (2) Modell-Kontur „Rad“

Der Matchingassistent ist prinzipiell eine gute und einfache Möglichkeit ohne Hintergrund­wissen ein einfaches Objekterkennungsverfahren zu entwerfen und zu implementieren. Allerdings eignet sich dieses Verfahren nur, wenn die Anzahl zu erkennender Objekte klein ist und sich die Kontur der Objektoberfläche deutlich unterscheiden. Im Detail kann die Erkennungs­rate zwar mit Hilfe der Modelleinstellungen optimiert werden, aber das bedeutet viel Handarbeit und es ist eine genaue Kenntnis über die Auswirkungen der einzelnen Parameter hilfreich. Dies wiegt aber den anfangs genannten Vorteil der Einfachheit dann wieder auf. Ein weiteres Problem ist die manuelle Markierung der ROI. Hier muss genau darauf geachtet werden, dass wirklich nur das Objekt ohne den Hintergrund markiert wird. Bei komplizierten Objektformen kann das sehr aufwändig sein, weshalb sich die Methode eher für einfache Formen, z. B. rechteckige oder runde Objekte, eignet.

Ein weiterer großer Nachteil des Matchingverfahrens ist die fehlende Auswertung von Farbinformationen, da das Modell lediglich die Konturen enthält und keinerlei Farb­informationen.

In dem in der Arbeit getesteten Anwendungsfall waren die Erkennungsraten nicht besonders gut. So wurden immer wieder Teile falsch oder gar nicht erkannt (zwei Beispiele, siehe Abbildung 4.12). Besondere Probleme gab es mit Teilen, die zwar eine ähnliche Oberflächenstruktur auswiesen, aber eine völlig andere Form hatten. Aufgrund der schlechten Erkennungsraten und der genannten Nachteile, insbesondere auch aufgrund der hohen Zahl zu erkennender Objektklassen und der nötigen Unterscheidung von Farben, eignet sich der Matchingassistent nicht für die Problemstellung dieser Arbeit.

Abbildung 4.12: fehlerhafte Schablonenerkennungen

5. Problemlösung/ Strategie

Bilderfassung

Grundlage einer guten Objekterkennung sind qualitativ hochwertige Bildaufnahmen. Um diese zu erhalten, musste eine geeignete Ausleuchtung gefunden werden, die möglichst homogene Bilder ohne großen Schattenwurf und mit immer gleicher Farbwiedergabe, auch bei unterschiedlichen Umgebungslichtverhältnissen, ermöglichte. Weiterhin mussten Reflektionen der Lichtquelle in den Objekten vermieden werden.

Anfangs wurde versucht, dies mit einer indirekten Beleuchtung, einer Stehlampe, zu bewerkstelligen. Allerdings war die Lichtintensität nicht stark genug, um die Objekte und den Hintergrund gut genug auszuleuchten.

Nach langem Probieren wurde eine ringförmige Leuchtstoffröhre verwendet, die zentral über der Kamera installiert wurde. Leuchtstoffröhren liefern ein helles, homogenes Licht und die ringförmige Beleuchtung liefert ein intensives, nahezu schattenfreies Licht, das entlang der optischen Achse der Kamera einfällt.

Weiterhin wurden Tests mit verschiedenen einfarbigen Hintergründen (dunkelblau, schwarz, rot, weiß) durchgeführt, um zu testen, bei welchem Hintergrund der beste Kontrast zwischen den Objekten und dem Hintergrund erzielt werden konnte. Die besten Ergebnisse wurden dabei mit einem weißen Hintergrund erzielt, wobei dort die Reflektion größer war, aber dieser Nachteil in Kauf genommen werden musste.

Die Kamera wurde an einem Stativ befestigt, damit keine Verwackelungen oder „schräge“ Bilder entstehen und die Entfernung zwischen Objekt und Kamera gleich bleibt, damit keine ungewollten Vergrößerungen bzw. Verkleinerungen entstehen.

Vorverarbeitung

Da die aufgenommen Bilder eine relativ gute Qualität haben und bei einer Filterung Informationen verloren gehen können, wurde auf eine Vorverarbeitung verzichtet.

Segmentierung

Um die Objekte im Bild sauber vom Hintergrund zu trennen, wurden diverse Möglichkeiten getestet. Das Prinzip war aber in allen Fällen das Gleiche. Anhand eines manuell oder auto­matisch gewählten Schwellwertes wurden die Objekte segmentiert. Bei den in HALCON verfügbaren Operatoren (histo_to_thresh, auto_threshold, bin_threshold…), bei denen der Schwellwert automatisch bestimmt werden kann, führt es zwar in Einzelfällen zu sehr guten Ergebnissen, aber sie waren stark davon abhängig, wie das Verhältnis des sichtbaren Hinter­grundes zu der Gesamtfläche aller sichtbaren Objekte war. So war die automatische Erkennung entweder bei wenigen oder bei vielen Objekten gut, aber nie gleichzeitig für beide Fälle. Aufgrund dessen wurde dann auf die manuelle Einstellung des Schwellwertes (threshold) gesetzt.

Das größte Problem bei der Segmentierung waren die hellen bzw. teilweise transparenten Teile. Ein etwas zu großer Schwellwert führte dazu, dass Schattenwürfe auch zum Objekt gehörig erkannt wurden. Ein zu kleiner Schwellwert führte dagegen dazu, dass Teile des Objektes als Hintergrund angesehen wurden. Nach einigem testen wurde hier ein Schwell­wert von 190 als geeignet ermittelt. Damit ergaben sich unter allen Gegebenheiten durchweg gute Ergebnisse bei der Segmentierung.

Merkmalsextraktion

Für die Merkmalsextraktion wurden die verschiedensten Features verglichen und die aussage­kräftigsten herausgesucht, um eine gute Ausgangsbasis für die Klassifikation zu erhalten. Die verwendeten Merkmale sind:

- Anisometrie (Exzentrizität),

- Kreisförmigkeit,

- Rundheit,

- normierte zentrale Momente (PSI1-PSI4),

- Durchmesser von Regionen,

- Mittlerer Wert des Farbtons innerhalb der Region,

- Rechteckigkeit.

Klassifikation

Klassische Algorithmen scheitern, sobald die vorausgesetzte Bildqualität nicht gegeben ist. Da die Klassifikation mit neuronalen Netzen am flexibelsten ist und sie zu besseren Ergebnissen führt, wurde dieses Verfahren für die Objekterkennung gewählt. Ein weiterer Vorteil ist, dass diese Klassifikation von HALCON unterstützt wird.

5.1 Strategie/ Erkennungsmerkmale

Um neuronale Netze für die Objekterkennung einzusetzen, muss zunächst geklärt werden, welche Netztopologie zum Einsatz kommen soll. So muss festgelegt werden, wie viele Neuronen die Eingabeschicht, wie viele die Hiddenschicht (verborgene Schicht) und wie viele die Ausgabeschicht haben sollen.

Die Anzahl der Neuronen der Ausgabeschicht ist schnell geklärt und entspricht der Anzahl zu erkennender Objekte bzw. Objektansichten (von vorn, von hinten). Aufgrund bestimmter Merkmale ist es erforderlich für manche Objekte eine Objektklasse für die Vorderansicht und eine für die Ansicht von hinten zu definieren. Demnach gibt es für diese Objekte jeweils 2 Ausgabeneuronen.

Die Anzahl der Eingabeneuronen entspricht der Anzahl der gewählten Unterscheidungs­merkmale.

Für die Hiddenschicht ist die Auswahl der Neuronenanzahl nicht so einfach. Bei der Auswahl sollten, um eine hohe Robustheit zu erreichen, so wenig wie möglich Neuronen verwendet werden. Andererseits wird, abhängig von der Anzahl zu unterscheidender Merkmale und Objekte, eine Mindestanzahl an Neuronen benötigt. Laut HALCON-Benutzerhandbuch sollte die Anzahl der Größenordnung der Eingabe- und Ausgabeneuronen entsprechen. Um die optimale Anzahl zu bestimmen, wurden verschiedene Einstellungen getestet.

Die ausgewählten Unterscheidungsmerkmale für die Eingabeschicht werden durch ihre Aussagefähigkeit bestimmt. Dafür wurde eine Featuretabelle (siehe Anhang 10.3) erstellt, in der die Features der einzelnen Lernobjekte stehen.

Um eine Aussage über einen geeigneten RandSeed-Wert und eine geeignete Hiddenanzahl treffen zu können, musste eine Auswertung durchgeführt werden. Dafür wurde das Programm „HiddenVerbesserung mit RandSeed-Optimierung“ erstellt, welches für jede Kombination aus Hiddenanzahlen und RandSeed-Werten die Trainingsdaten erlernte und anschließend die Fehlerrate (Anzahl nicht erkannter Teile) über alle Testbilder bestimmt hat. Dabei wurden für die Hiddenanzahl Werte von 10 bis 100 (Schrittweite 1) und für den RandSeed-Wert ebenfalls von 10 bis 100 (Schrittweite 1) durchlaufen. Alle anderen Parameter und Rahmen­bedingungen waren ansonsten während der Testläufe jeweils identisch. So ergaben sich 8281 (91 x 91) Ergebnisse. Um die Ergebnisse einfacher auswerten zu können und eine gewisse Robustheit der ausgewählten Werte zu gewährleisten, wurden jeweils für jede Anzahl der Hiddenneuronen und jeweils für jeden RandSeed-Wert die durchschnittlichen Fehlerraten berechnet (siehe Abbildung 5.1 und 5.2).

Abbildung 5.1: Mittelwert für nicht erkannte Teile abhängig vom RandSeed-Wert (Programmlösung Unterscheidung)

verwendete Parameter:

create_class_mlp (9, AnzahlHidden, 45, 'softmax', 'normalization', 10, RandSeed, MLPHandle)

train_class_mlp (MLPHandle, 500, 1, 0.00001, Error, ErrorLog)

Features := [Anisometry,Circularity,Roundness,PSI1,PSI2,PSI3,PSI4,Diameter,Mean]

Bei der RandSeed-Auswertung ist festzustellen, dass die Änderung dieses Wertes keine große Veränderung der durchschnittlichen Fehlerrate bringt. Alle Werte pendeln sich um 12 herum ein. Die Schwankungen sind eher zufällig und lassen keinen Zusammenhang der Fehlerrate mit dem gewählten RandSeed-Wert erkennen. Daher lässt sich mit der Veränderung des RandSeed-Wertes keine Verbesserung des Trainings herstellen bzw. diese wären dann nur zufälliger Natur.

Abbildung 5.2: Mittelwert für nicht erkannte Teile abhängig von der Hiddenanzahl (Programmlösung Unterscheidung)

verwendete Parameter:

create_class_mlp (9, AnzahlHidden, 45, 'softmax', 'normalization', 10, RandSeed, MLPHandle)

train_class_mlp (MLPHandle, 500, 1, 0.00001, Error, ErrorLog)

Features := [Anisometry,Circularity,Roundness,PSI1,PSI2,PSI3,PSI4,Diameter,Mean]

Bei der Hiddenanzahl lässt sich deutlich erkennen, dass bei einer Hiddenanzahl von 10 bis ca. 23 der Mittelwert der nicht erkannten Objekte kleiner wird. Mit weiter zunehmender Hidden­anzahl ab dem Wert 23 lässt sich dagegen keine weitere Verbesserung erkennen. Die Schwankungen der Fehlerrate liegen im Wertebereich von ca. 23 bis 100 im eher zufälligen Bereich und lassen keinen Rückschluss auf die Qualität der Erkennung zu.

Ein weiteres Kriterium der verborgenen Schicht ist, dass die Anzahl der verborgenen Neuronen in der Größenordnung der Ein- und Ausgabeschicht liegen muss. Daher ist es sinnvoll, einen Wert zwischen 23 und 45 für die Hiddenanzahl zu nehmen. Wenn die Hiddenanzahl zu groß gewählt wird, besteht die Gefahr, dass eine Überanpassung (Overfitting) des neuronalen Netzes an die Trainingsdaten stattfindet, was zu schlechten Generalisierungseigenschaften führen kann. D. h., das neuronale Netz lernt die Trainingsdaten sehr gut, liefert aber für unbekannte Testdaten keine besonders guten Ergebnisse, es lernt die Trainingsdaten quasi auswendig.

Aufgrund dieser Kenntnisse und durch einige Tests wurde eine Hiddenanzahl von 27 und ein RandSeed-Wert von 19 verwendet. Diese Kombination führte in der Auswertung zu 4 nicht erkannten Objekten von insgesamt 95 bei einer Konfidenz (Erkennungsqualität) von 98 %.

Abbildung 5.3: Mittelwert für nicht erkannte Teile abhängig von der Hiddenanzahl (Programmlösung Rechteckigkeit)

verwendete Parameter:

create_class_mlp (10, AnzahlHidden, 45, 'softmax', 'normalization', 10, RandSeed, MLPHandle)

train_class_mlp (MLPHandle, 500, 1, 0.00001, Error, ErrorLog)

Features := [Anisometry,Rectangularity,Circularity,Roundness,PSI1,PSI2,PSI3,PSI4,Diameter,Mean]

In Abbildung 5.3 sind die Mittelwerte für nicht erkannte Teile in Abhängigkeit von der Hiddenanzahl aufgezeigt. Diese Auswertung wurde mit dem Programm „Training mit Rechteckigkeit“ und „Objekterkennung mit Rechteckigkeit“ erstellt. Das neuronale Netz wurde mit einer Eingabeschicht mit 10 Neuronen, einer verborgenen Schicht mit „AnzahlHidden“ und einer Ausgabeschicht mit 45 Neuronen erstellt. Der RandSeed-Wert war bei dieser Auswertung auch variabel und wurde mit den Zahlen 15 bis 25 mit der Schrittweite 1 durchgetestet.

Aus der Auswertung wurde die Hiddenanzahl 31 gewählt, da diese eine geringe Fehlerrate hat und in der Größenordung der Ein- und Ausgabeneuronen liegt.

Abbildung 5.4: Nicht erkannte Teile bei wechselndem RandSeed-Wert und Hiddenanzahl 31 (Programmlösung Rechteckigkeit)

Um für die gewählte Hiddenanzahl einen geeigneten RandSeed zu erhalten, wurde eine weitere Auswertung durchgeführt, in der RandSeed-Werte von 10 bis 100 mit der Schritt­weite 1 nacheinander für die Hiddenanzahl 31 getestet wurde. Aus dieser Auswertung (siehe Abbildung 5.4) lässt sich gut erkennen, dass ein RandSeed-Wert von 95 die geringste Fehlerrate ergibt. Die Fehler­rate liegt bei einer Konfidenzschwelle von 98 % bei 5 nicht erkannten Objekten.

5.2 Detaillierte Quellcode Beschreibung

In diesem Abschnitt wird auf den Quellcode für das „Training mit Unterscheidung“ und die „Objekterkennung mit Unterscheidung“ detailliert eingegangen. Dabei sollen die einzelnen Operatoren der Programmierumgebung HDevelop verdeutlicht werden.

5.2.1 Training mit Unterscheidung

Abbildung 5.5: Training mit Unterscheidung 1

In diesem Abschnitt werden die grundlegenden Einstellungen deklariert. In den ersten drei Befehlen (Zeile 5-7) wird eingestellt, wie das Verhalten beim Programmdurchlauf für den PC, der Ausgabe und dem Variablenfenster sein soll. In Zeile 8 wird das Anzeigefenster geschlossen, damit eventuelle alte Ausgaben von vorherigen Programmläufen gelöscht werden. Dann wird mit dem Befehl dev_open_window ein neues Fenster erstellt an der Koordinate (0; 0) (linke obere Ecke im Programmfenster) mit der Größe 640 * 480 Pixel, der Hintergrundfarbe schwarz und dem Namen „WindowHandle“.

In den nächsten drei Schritten werden die Anzahl der Ausgabefarben (dev_set_colored), hier „12“, der Ausfüllmodus für Regionen (dev_set_draw), hier „gefüllt“, und die Strichstärke für die Konturdarstellung, hier „3“, festgelegt.

Diese Grunddeklaration muss in jedem Programm vorgenommen werden, da es sonst zu keiner Ausgabe kommen kann.

Abbildung 5.6: Training mit Unterscheidung 2

Mit dem Befehl create_class_mlp wird ein neuronales Netz in Form eines mehrschichtigen Perzeptrons (multilayer perceptron) erzeugt. Das erste neuronale Netz erlernt alle 45 verschiedenen Objekte, wobei die Eingabeschicht „9“ Neuronen besitzt. Diese Neuronen stehen für die Merkmale (Features), die für die Objekte berechnet werden. Die verborgene Schicht besitzt „27“ Neuronen und die Ausgabeschicht „45“ Neuronen, also für jedes Objekt ein Neuron. Der nächste Parameter ist die Art der Aktivierungsfunktion, wobei „softmax“ bei üblichen Klassifikationsaufgaben, bei denen mehrere sich gegenseitig ausschließende Klassen auftreten, angewendet wird. Mit den nächsten beiden Parametern kann eine Vorverarbeitung der Merkmale festgelegt werden, durch den Parameter „normalization“ werden die Merkmale normalisiert, indem der Mittelwert der Trainingsvektoren von den Merkmalsvektoren abgezogen wird und die dadurch entstehenden Merkmalsvektoren durch die Standard­abweichung der jeweiligen Komponente der Trainingsvektoren geteilt wird. Dies wird angewendet, wenn die Komponenten der gemessenen Daten nicht dieselbe Einheit besitzen. Bei dieser Einstellung wird der nächste Parameter (NumComponents), hier „10“, ignoriert. Beim nächsten Parameter dem RandSeed, hier „19“, wird der Initialisierungswert des Zufallszahlengenerators angegeben, dabei liegt der Defaultwert bei 42. Der letzte Parameter ist der Name des erstellten neuronalen Netzes, um dieses im Programm eindeutig anzusprechen.

Das zweite neuronale Netz, welches in Zeile 17 erstellt wird, dient zur Unterscheidung von zwei Objekten, die sich nur minimal untereinander unterscheiden. Dabei beträgt die Anzahl der Eingabeneuronen „2“, die Anzahl der verdeckten Schicht „2“ und die Anzahl der Ausgabeschicht auch „2“ Neuronen.

In den Zeilen 20 und 21 wird der Klassifikator mit Trainingsdaten versorgt. Dabei werden von jedem Objekt fünf Bilder geladen und einem Array zugeordnet. Mit dem Operator open_file wird eine Datei geöffnet bzw. neu erstellt, in der die Werte der einzelnen Merkmale (Features) gespeichert werden sollen. Dies hat den Zweck, das die Ergebnisse der Merkmals­extraktion übersichtlich gespeichert werden und so die einzelnen Werte miteinander verglichen werden können.

Abbildung 5.7: Training mit Unterscheidung 3

In diesem Quellcodeabschnitt werden aus jedem Trainingsbild die einzelnen Objekte heraussegmentiert, damit diese im nächsten Abschnitt weiterverarbeitet werden können.

In der ersten Zeile dieses Abschnittes wird jede einzelne Bilddatei der Trainingsbilder in einer for-Schleife durchgelaufen. In Zeile 24 wird dann das jeweilige Bild eingelesen und mit dev_display im Ausgabefenster angezeigt. Mit dem threshold-Operator wird das Bild binarisiert, damit die einzelnen Objekte segmentiert werden können. Dabei wird das Originalbild übergeben und als Ergebnis werden die gefundenen Regionen erhalten. Die untere Schwelle des Grauwertes ist „0“ und die obere Schwelle ist „190“. In Zeile 27 des Quellcodes wird mit dem Operator connection bestimmt, welche Regionen zusammenhängen und welche nicht. Daraus werden die einzelnen Regionen segmentiert. Um nur relevante Regionen zu betrachten wird im nächsten Operator mit Hilfe von einem Formmerkmal, hier der „Fläche“, die Auswahl für eine Region gewährleistet. Dabei muss eine Region mindestens „1000“ Pixel und maximal „1000000“ Pixel haben. Alle Regionen, die diesem Merkmal entsprechen werden als Objekt deklariert und im nächsten Schritt im Ausgabefenster angezeigt. Dann wird die Anzahl der gefundenen Objekte in der Variablen „Number“ gespeichert.

Abbildung 5.8: Training mit Unterscheidung 4

Mit jedem erkannten Objekt wird dann die nächste for-Schleife durchlaufen, in der jedes Objekt einzeln selektiert wird (Zeile 33) und dann die Formmerkmale (siehe 2.4.1) berechnet (Zeile 34 bis 41) und in einem Array gespeichert werden (Zeile 42). Hier werden jeweils die Operatoren für die Extraktion der Merkmale aufgerufen. Dabei wird, außer für das Merkmal Mean (Farbton des Objektes), jeweils die SingleRegion übergeben und als Ergebnis die Merkmale zurückgeliefert. Zur Ermittlung des Farbtons wird zuvor das Farbbild mit dem Operator decompose3 in drei Grauwertbilder für die Farbkomponenten rot, grün und blau zerlegt. Diese drei Komponentenbilder werden dann per trans_from_rgb in den HSI-Farbraum transformiert. Dabei handelt es sich wieder um drei Grauwertbilder, die nun aber andere Werte widerspiegeln. So beinhaltet das Bild „Farbton“ die im Bild auftretenden Farbtöne (siehe Kapitel 2.4.2). Mit diesem lässt sich also leicht der mittlere Grauwert des Farbtons einer Region ermitteln. Dies wird dann auch in Zeile 41 getan.

Abbildung 5.9: Training mit Unterscheidung 5

In Zeile 43 werden die Features in die oben angelegte Datei „features+Rectangularity.txt“ geschrieben und mit dem nachstehenden Befehl wird ein Zeilenumbruch in der Textdatei erzeugt. Mit dem Operator add_sample_class_mlp wird das Trainingsmuster zu den Trainings­daten des neuronalen Netzes zugefügt. In der darauf folgenden if-Anweisung wird überprüft, ob das Objekt „8“ oder „9“ vorliegt. Dies sind die Teile, die sich nur minimal unterscheiden und deshalb getrennt in einem zweiten neuronalen Netz trainiert werden müssen. Dafür ist ein weiteres Featurearray nötig. Bei dem zweiten Netz werden aber nur der Durchmesser und die Rechteckigkeit als Merkmale dem neuronalen Netz zugefügt, da diese die einzigen sind, die sich bei den beiden Objekten hinreichend unterscheiden. Nachdem die zwei for-Schleifen durchlaufen sind, wird die Textdatei geschlossen und an oben angegebenem Pfad gespeichert. Dann ist ein Stopp eingefügt, da nun die Trainingsdaten fertig erstellt wurden und das Training beginnen kann.

Abbildung 5.10: Training mit Unterscheidung 6

Im Anzeigefenster wird in grüner Schrift „Training…“ ausgegeben (Zeile 58 bis 59). Dabei werden die zwei Netze mit dem Operator train_class_mlp trainiert (Zeile 61 bis 62). Jedes Netz wird solange trainiert, bis entweder die maximale Anzahl der Iterationen des Optimierungs­verfahrens, hier „500“, erreicht ist oder der Schwellwert der Fehlertoleranz, hier „0,00001“, unterschritten wird. In dem Parameter „Error“ wird der mittlere Fehler des Netzes auf den Trainingsdaten geschrieben, in „ErrorLog“ wird die Fehlerfunktion gespeichert.

Abbildung 5.11: Training mit Unterscheidung 7

Im letzten Abschnitt werden mit clear_samples_class_mlp die Trainingsdaten gelöscht und im Ausgabefenster wird mit dem nächsten Befehl „Training abgeschlossen“ angezeigt.

Die gelernten neuronalen Netze werden abgespeichert und dann gelöscht (Zeile 68 bis 72). Danach erscheint die Anzeige „MLPs gespeichert“ und das Programm ist beendet.

5.2.2 Objekterkennung mit Unterscheidung

Abbildung 5.12: Objekterkennung mit Unterscheidung 1

Im ersten Abschnitt werden, wie beim Trainingsprogramm, die grundlegenden Einstellungen deklariert. Der einzige Unterschied besteht darin, dass ein zweites Fenster deklariert wird, in dem später die Erkennungsquoten, Orientierungen und Lage der Objekte angezeigt werden sollen.

Abbildung 5.13: Objekterkennung mit Unterscheidung 2

Dann werden die im Trainingsprogramm erlernten neuronalen Netze geladen, damit mit ihnen die Objekte klassifiziert werden können.

Abbildung 5.14: Objekterkennung mit Unterscheidung 3

In diesem Abschnitt werden in der for-Schleife Testbilder geladen und bearbeitet. Hierbei werden die eingelesen Bilder, wie beim Trainingsprogramm, binarisiert und die Anzahl der einzelnen segmentierten Regionen, so sie den Anforderungen entsprechen, einer Variable zugeführt, die im nächsten Abschnitt für die for-Schleife benötigt wird, gespeichert. Außerdem werden im Anzeigefenster die einzelnen gefundenen Objekte angezeigt und zwei Arrays (Zeile 35 und 36) erzeugt. Diese dienen später dazu, dass die klassifizierten Objekte in verschiedenen Farben dargestellt werden können.

Abbildung 5.15: Objekterkennung mit Unterscheidung 4

Die zweite for-Schleife wird solange durchlaufen, bis jedes gefundene Objekt betrachtet wurde. Dabei werden die einzelnen Merkmale ausgelesen bzw. berechnet und in einem Merkmals­vektor abgelegt. In Zeile 48 erfolgt dann der wichtigste Schritt der Klassifikation. Dabei wird der Merkmalsvektor Features dem gelernten neuronalen Netz übergeben, welches dann das Objekt bzw. die erkannten Merkmale der wahrscheinlichsten Klasse zuordnet. Weiterhin wird die Erkennungsqualität Confidence zurückgegeben.

Abbildung 5.16: Objekterkennung mit Unterscheidung 5

Wenn das Objekt 8 oder 9 gefunden wurde, wird dieses mit dem zweiten neuronalen Netz nochmals klassifiziert und die aus dem zweiten Netz entstandene Konfidenz übernommen (Zeile 49 bis 59).

In Zeile 61 wird überprüft, ob die Konfidenz des Objektes über 90 % liegt. Ist dies der Fall, so gilt das Objekt als erkannt und es bekommt die oben definierte Farbe zugeordnet (Zeile 62). Wenn die Konfidenz kleiner ist, erhält das Objekt die Farbe rot (Zeile 65).

Abbildung 5.17: Objekterkennung mit Unterscheidung 6

In Zeile 67 werden die Objekte im Anzeigefenster mit ihrer vorher bestimmten Farbe angezeigt. Dann wird am Schwerpunkt des Objekts die Zahl der erkannten Klasse in Klammern ausgegeben (Zeile 68 bis 71). Dies dient zur besseren Kontrolle, ob das Objekt richtig erkannt wurde oder nicht.

Der Operator orientation_region berechnet die Orientierung der Region. In Zeile 78 wird die Objektzahl, die Konfidenz, die x- und die y-Position im zweiten Ausgabefenster ausgegeben und mit get_tposition wird die aktuelle Position in der Ausgabe bestimmt. Mit dem Befehl disp_arrow wird ein Pfeil als Orientierungsanzeige in das Objekt in das erste Anzeigefenster gezeichnet. Dann wird im zweiten Ausgabefenster hinter der letzten Ausgabe die Orientierung geschrieben. In Zeile 89 wird, nachdem alle erkannten Objekte in der zweiten for-Schleife abgearbeitet wurden, der Inhalt des zweiten Ausgabefensters gelöscht, damit die Ergebnisse im nächsten Durchlauf dort hinein geschrieben werden können und sich nicht mit den alten Anzeigen überlagern.

Abbildung 5.18: Objekterkennung mit Unterscheidung 7

Zum Schluss werden die mehrschichtigen Perzeptrons gelöscht und damit sämtliche Speicher wieder freigegeben. Dann wird das zweite Ausgabefenster geschlossen und im ersten wird die Ausgabe gelöscht. Anschließend erscheint im Ausgabefenster „Objekterkennung beendet“ und das Programm ist beendet.

6. Ergebnisse und Diskussion

Ziel der Arbeit war es, ein Objekterkennungsverfahren zu verifizieren und anhand eines konkreten Anwendungsfalls ein geeignetes Verfahren mit der Software HALCON zu implementieren. Als konkretes Beispiel wurde die Objekterkennung mit Hilfe von künstlichen neuronalen Netzen gewählt und umgesetzt. Um die Programme übersichtlich zu halten und die Wiederverwendbarkeit zu verbessern, wurde ein Programm für das Training des neuronalen Netzes implementiert und eins für die Objekterkennung. Dabei wurde das nach dem Training erhaltene neuronale Netz in einer Datei gespeichert und jeweils beim Start des Erkennungsprogramms geladen. Mit dem Erkennungsprogramm ist es möglich, aufgenommene Testbilder oder auch Livebilder zu laden und den Erkennungsprozess durchzuführen (siehe Abbildung 6.1).

Abbildung 6.1: Originaltestbild

Als Ergebnis wird dann für jedes im Bild gefundene und klassifizierte Objekt angezeigt, welcher Objektklasse das jeweilige Objekt zugeordnet wurde. Dazu wird die Teilenummer (siehe Anhang 10.2 Teileliste) im Bild am Schwerpunkt des Objektes angezeigt. Weiterhin werden die Teile mit der ebenfalls in der Teileliste aufgeführten Farbe eingefärbt (siehe Abbildung 6.2), um die Ergebnisse der Erkennung schneller optisch überprüfen zu können. Objekte die mit einer zu schlechten Konfidenz (kleiner 90 %) erkannt werden, werden dabei rot eingefärbt. In den erkannten Teilen wird außerdem die Orientierung des Objektes durch einen Pfeil angezeigt.

Abbildung 6.2: Erkannte Objekte mit Orientierungsanzeige

Weiterhin werden in einem separaten Fenster für jedes gefundene Objekt die Konfidenz, die Koordinaten vom Schwerpunkt des Objektes (in Pixeln) und die Orientierung angezeigt (siehe Abbildung 6.3).

Abbildung 6.3: Konfidenzen, Positionen und Orientierungen der erkannten Objekte

Die Ergebnisse der Erkennung waren von Anfang an recht gut. Durch die Variation verschiedener Einstellungen, wie z. B. der Anzahl von Hiddenneuronen und einer unter­schiedlichen Auswahl von Objektmerkmalen, konnte diese Erkennungsrate sukzessiv gesteigert werden.

Nach einigen Tests konnte so bei Einsatz von einem neuronalen Netz zur Unterscheidung aller Testobjekte eine Erkennungsrate von 96,84 % erreicht werden. Dabei wurden 92 Teile von insgesamt 95 erkannt. Die Teile waren dabei auf 27 unterschiedliche Testbilder aufgeteilt. Keines der Testbilder war in der Menge der Trainingsbilder enthalten, es wurden dem Netz also ausschließlich unbekannte Bilder präsentiert. Weiterhin wurde für die vom neuronalen Netz jeweils zurückgelieferte Konfidenz (Erkennungsqualität) ein Mindestmaß von 90 % gesetzt. D. h. ein Teil galt nur als erkannt, wenn mindestens eine Konfidenz von 90 % erreicht wurde, selbst wenn das Objekt ansonsten eigentlich richtig klassifiziert worden wäre. Der Groß­teil der erkannten Teile hatte allerdings eine deutlich bessere Erkennungsqualität von über 99 % (siehe Abbildung 6.4). Zusätzlich wurden die erkannten Teile manuell überprüft, um die korrekte Erkennung zu verifizieren. Jedes falsch erkannte Objekt wurde so manuell als „nicht erkannt“ gewertet, auch wenn die Konfidenz etwas anderes erwarten ließ. Für die Auswertung der Konfidenz-Verteilung wurde die Konfidenz in einem solchen Fall auf 0 gesetzt, so dass es der Gruppe „<90 %“ zugeordnet wurde. Das neuronale Netz hatte bei dieser Auswertung 9 Eingabeneuronen, 27 Hiddenneuronen, 45 Ausgabeneuronen und ein RandSeed-Wert von 19.

Abbildung 6.4: Konfidenz-Verteilung

Die Konfidenz-Verteilung bei der Programmlösung mit einem neuronalen Netz ist wie folgt verteilt (siehe Abbildung 6.4): 86 Objekte liegen über einer Konfidenz von 99 %, 4 Objekte über 95 %, 2 Objekte über 90 % und 3 Objekte unter 90 %. Dabei werden die 3 Objekte unter 90 % als nicht erkannt gewertet, da die Konfidenzschwelle bei 90% liegt.

Besondere Erkennungsprobleme gab es immer wieder mit Teil Nr. 8 und Nr. 9 (siehe Anhang 10.2 Teileliste). Diese waren beide sehr ähnlich und wurden bei der Erkennung sehr oft verwechselt. Farblich waren sie identisch und sie unterschieden sich nur leicht in der Form. Ein Teil war rechteckig und das andere war im Prinzip das gleiche Teil aber mit zwei abgerundeten Ecken. Von den Ausmaßen (Breite und Länge) waren sie identisch.

Um diese Teile besser zu unterscheiden, wurde versucht, das Problem über andere Merkmale zu lösen. Dabei wurde als zusätzliches Merkmal zu den bereits verwendeten Merkmalen die Fläche, der Umfang bzw. die Rechteckigkeit verwendet. Bei der Fläche und dem Umfang führte es zu keinen besseren Ergebnissen. Dies liegt daran, dass sich diese Merkmale nicht sonderlich voneinander unterscheiden (vgl. Anhang 10.3 Featuretabelle). Weiterhin wurden dadurch andere Objekte schlechter erkannt. Lediglich die Rechteckigkeit hat sich als ein weiteres gutes Unterscheidungsmerkmal herausgestellt. In der Programmlösung mit der Verwendung Rechteckigkeit ergab sich so eine Erkennungsquote von 95,79 %, dabei wurden 91 Teile von 95 Teilen richtig erkannt. Für diese Erkennungsquote wurden dem neuronalen Netz 10 Eingabe­neuronen, 31 verdeckte Neuronen und 45 Ausgabeneuronen und der RandSeed-Wert betrug 95.

Abbildung 6.5: Konfidenz-Verteilung Programmlösung „Rechteckigkeit“

Die Konfidenz-Verteilung bei der Programmlösung „Rechteckigkeit“ ist folgendermaßen (siehe Abbildung 6.5): 86 Objekte liegen über einer Konfidenz von 99 %, 2 Objekte über 95 %, 3 Objekte über 90 % und 4 Objekte unter 90%. Die 4 Objekte unter 90 % werden als nicht erkannt gewertet, da die Schwelle der Konfidenz bei 90 % liegt.

Da die Programmlösung mit der Rechteckigkeit keine besseren Ergebnisse, sondern schlechtere als die Ursprungs­version, geliefert hat, wurde als weitere Lösung ein zweites neuronales Netz in das Programm eingefügt, das nur für die Unterscheidung dieser Teile trainiert wurde. Dieses Netz hatte 2 Eingabeneuronen, 2 Hiddenneuronen und 2 Ausgabe­neuronen. Als wichtigste Unterscheidungs­­merkmale wurden der Durchmesser und die Rechteckigkeit ausgemacht und auch nur diese als Eingabewerte dem Netz übergeben. Im Programm wurde dann, wenn mit dem ersten Netz Teil 8 oder 9 erkannt wurde, zusätzlich das zweite Netz „befragt“, um diese Teile besser zu unterscheiden. Das erste Netz wurde bei dieser Programmlösung nicht verändert. Die Erkennungsrate konnte dadurch auf 98,95 % erhöht werden. Dabei wurden 94 Teile von insgesamt 95 korrekt erkannt.

Abbildung 6.6: Konfidenz-Verteilung Programmlösung „Unterscheidung“

Bei der Programmlösung „Unterscheidung“ sind die Konfidenzen wie folgt verteilt (siehe Abbildung 6.6): 88 Teile haben eine Konfidenz über 99 %, bei 4 Objekten liegt sie bei über 95 %, bei 2 Objekten über 90 % und bei einem Objekt unter 90 %. Das Objekt unter 90 % wird als nicht erkannt gewertet, da die Konfidenzschwelle bei 90 % liegt.

Wenn mehr Merkmale verwendet werden, wirkt sich das auch auf die Erkennung anderer Objekte aus. Dabei kann es passieren, dass Teile, die vorher erkannt wurden, danach nicht mehr erkannt werden. Daher ist die beste Lösung ein zweites Netz für die Problemteile einzuführen, um die Ergebnisse des ersten Netzes nicht zu verschlechtern.

Da die invarianten zentralen Momente PSI2 bis PSI4 bei den meisten Teilen den Wert 0 haben (siehe Anhang 10.3 Featuretabelle), gab es die Überlegung, diese wegzulassen. Dies führte aber zu schlechteren Ergebnissen in der Gesamtauswertung. Das liegt vermutlich daran, dass es für die Teile, bei denen diese Merkmale ungleich 0 sind, scheinbar doch ein entscheidendes Unterscheidungskriterium ist. Daher wurde die Idee wieder verworfen.

Weiterhin wurde mit dem Programm auch die Erkennung von Livebildern getestet. Die Ergebnisse waren im Großen und Ganzen äquivalent zu den Ergebnissen der Testbilder. Allerdings zeigte sich, dass sich leichte Änderungen des Umgebungslichtes (verändertes Tageslicht) negativ auf den Erkennungsprozess auswirken können. Hier gab es z. B. Probleme mit der Erkennung eines roten Teils (Teil 29), welches bei leicht veränderten Umgebungs­licht­verhältnissen als das grüne Teil Nr. 0 erkannt wurde. Das grüne Teil ist bis auf die Farbe identisch mit dem roten Teil. Der Grund dafür ist, dass die Farbe Rot im HSI-Farbkreis genau bei 0 liegt. Da der Farbwert als Unterscheidungsmerkmal dient, führt dies dazu, dass bei einer leichten Farbverschiebung, hervorgerufen durch veränderte Lichtverhältnisse oder Rauschen, dieser Farbwert von 0 auf 255 springen kann. Rein mathematisch betrachtet ist das aber ein völlig anderer Wert und liegt nicht mehr in der Nähe von 0, so dass das neuronale Netz es nicht mehr korrekt zuordnen kann. Dieses Problem kann behoben werden, indem die Farb­wertgrenze in einen Bereich verschoben wird, der nicht bei den zu erkennenden Objekten vorkommt und der Farbwert im Programm immer entsprechend umgerechnet wird, so dass eine leichte Verschiebung des Rotwertes nicht mehr zu einem solchen Sprung des Farbwertes führt. Allerdings wird das Problem dadurch auf einen anderen Farbwert verlagert.

Große Probleme gab es ebenfalls mit einem gelben, transparenten und mit einem beigen Teil. Diese konnten nicht ausreichend vom weißen Hintergrund unterschieden werden, da sie sich nicht stark genug davon abgehoben haben. Sie waren einfach zu hell. Es war weder mit veränderten Lichtverhältnissen, noch mit veränderten Kameraeinstellungen und Schwellwert­grenzen möglich, diese Teile sauber zu segmentieren. Teilbereiche dieser Objekte wurden immer als Hintergrund segmentiert. Das Erhöhen des Schwellwertes für die Segmentierung führte dazu, dass der Schatten der Objekte zu einem großen Teil zu dem Objekt gehörig segmentiert wurde, so dass alle anderen Teile deutlich schlechter erkannt wurden. Da auch nach vielen Tests und mit unterschiedlichen Einstellungen und Verfahren keine Lösung für dieses Problem gefunden werden konnte, wurden diese Teile im weiteren Verlauf der Arbeit ignoriert. Prinzipiell kann das Problem durch einen andersfarbigen Hintergrund gelöst werden. Allerdings ist egal welcher Hintergrund verwendet wird, denn bei einer Vielzahl von Farben besteht immer das Problem, dass die Teile, die dem Hintergrund zu ähnlich sind, nicht erkannt werden. Das Problem kann dadurch also lediglich auf andere Teile bzw. Farben verlagert, aber nicht gänzlich gelöst werden. Eine hilfreiche Lösung wäre die Verwendung eines farblich veränderlichen Hintergrundes, z. B. durch den zusätzlichen Einsatz einer veränderlichen Durchlichtbeleuchtung.

7. Zusammenfassung und Ausblick

In dieser Arbeit wurde auf die einzelnen Schritte der Bildverarbeitungsgrundlagen grob eingegangen. Zu diesen Verfahrensschritten gehören die bildhafte Erfassung von Objekten, die automatische Bearbeitung der Bilder, die Segmentierung, das Gewinnen von graphischen Informationen und die darauf basierende Klassifizierung.

Außerdem wurde das mächtige Bildanalysesystem HALCON von der Firma MVTec vorgestellt, welches zur Implementierung des Objekterkennungsalgorithmus benutzt wurde. Mit HALCON ist es recht einfach komplexe Objekterkennungs­aufgaben zu testen und umzusetzen. Die umfangreiche Bibliothek an Bildverarbeitungs­operationen hält für nahezu jede Aufgabe passende Möglichkeiten parat. In der Arbeit wurden nur Teile davon genutzt.

Des Weiteren wurde detailliert auf verschiedene Objekterkennungsalgorithmen eingegangen, die für die Problemlösung der Objekterkennung evaluiert wurden. Dabei waren die vorgestellten Objekterkennungsstrategien einfache Zuweisungen, die Clusteranalyse, insbesondere das „nearest neighbour“-Verfahren, künstliche neuronale Netze und ein Matchingassistent aus der Programmierumgebung HDevelop von HALCON.

Die einfache Zuweisung hat sich als nicht geeignet herausgestellt, da das Verfahren zu unflexibel ist und nur funktioniert, wenn sich die Wertebereiche zweier Objektklassen nicht für alle Merkmale überlappen. Ein weiteres Problem dieses Verfahrens ist, wenn nur ein Merkmalswert minimal außerhalb des definierten Wertebereiches für die richtige Objektklasse liegt, dann kann das Objekt dieser Klasse nicht mehr zugeordnet werden. Dieses Verfahren ist zwar einfach umzusetzen, aber aufgrund der fehlenden Robustheit gegenüber unterschiedlicher Rahmenbedingungen nicht geeignet für eine gute Objekterkennung.

Das Clusterverfahren ist für die Problemstellung der Objekterkennung mit der Menge erkennender Objekte ebenfalls nicht geeignet, da die Anzahl der zu erkennenden Objekte zu groß ist. Dies würde zu einem zu großen Rechenaufwand führen. Außerdem neigt das „nearest neighbour“-Verfahren zur Kettenbildung, was dazu führt, dass viele große Cluster gebildet werden, da dicht aneinander liegende Elemente, die zu unterschiedlichen Gruppen gehören, nicht genau getrennt werden können.

Der Matchingassistent von HDevelop ist zwar eine gute und einfache Möglichkeit ohne großes Hintergrundwissen ein einfaches Objekterkennungsverfahren zu entwerfen und zu implementieren, aber er ist trotzdem nicht für die Problemstellung dieser Arbeit geeignet. Das liegt zum einen daran, dass die Datenmenge zu groß ist und dies zu einem großen Rechenaufwand führt und zum anderen, dass Farben nicht unterschieden werden können, da Farbinformationen beim Matchingverfahren nicht berücksichtigt werden.

Als bestes Verfahren hat sich die Objekterkennungsstrategie mit künstlichen neuronalen Netzen herausgestellt. Sie haben durch ihre Flexibilität und ihrer Robustheit überzeugt.

Die Ergebnisse dieser Arbeit zeigen, dass neuronale Netze sehr leistungsfähig sind und auch für Objekterkennungs­verfahren sehr gut angewandt werden können. Eine Voraussetzung dafür ist allerdings, dass qualitativ hochwertige Bilder mit möglichst idealen Licht­verhältnissen vorliegen. Weiterhin muss ein möglichst idealer einfarbiger Hintergrund gewählt werden, der sich möglichst deutlich von allen Objekten abhebt. Bei dem gewählten weißen Hintergrund wäre es nicht möglich weiße Teile zu erkennen, da es selbst mit großen Anstrengungen schwierig wäre, ein solches Teil vom Hintergrund zu segmentieren. Um solche Probleme zu lösen wird entweder eine Lichtquelle oder ein Hintergrund mit änderbarer Farbe benötigt.

Ein weiteres Problem, was in der Arbeit aber nicht betrachtet wurde ist, wie sich die Erkennung unter variablen Hintergründen oder Kameraperspektiven und -abständen umsetzen lässt. Dies ist ein sehr komplexes Problem und konnte deshalb im Rahmen dieser

Arbeit nicht betrachtet werden.