Grobbestimmung der Blickrichtung für eine Augenmaus als

Transcription

Grobbestimmung der Blickrichtung für eine Augenmaus als
Grobbestimmung der Blickrichtung
für eine Augenmaus als
Benutzerinterface
Schriftliche Prüfungsarbeit
für die Bachelor-Prüfung des Studiengangs Angewandte Informatik
an der Ruhr-Universität Bochum
vorgelegt von
Martin Schnurrenberger
1. Prüfer Dr. Rolf P. Würtz
2. Prüfer Dr. Christian Igel
17. Juli 2008
Zusammenfassung
Dieses Handbuch beschreibt ein im Rahmen dieser Bachelor-Arbeit entstandenes Open-Source Projekt, welches aus zwei Kameras und bildverarbeitender Software besteht und zum Ziel hat, einem PC Benutzter die MauszeigerSteuerung allein durch den Blick zu ermöglichen.
Die ausführlich beschriebene, kompakte C++ Header-Datei ermöglicht in
Verbindung mit OpenCV eine einfache Wiederverwendung aller oder einzelner Funktionen in ähnlichen Anwendungen.
2
Inhaltsverzeichnis
1 Vorwort
7
2 Einführung
9
3 Installation
11
3.1
3.2
Hardware
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1
Marke Eigenbau . . . . . . . . . . . . . . . . . . . . .
11
3.1.2
Fix-und-fertig
. . . . . . . . . . . . . . . . . . . . . .
15
Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
3.2.1
Installation
. . . . . . . . . . . . . . . . . . . . . . . .
15
3.2.2
Konguration . . . . . . . . . . . . . . . . . . . . . . .
15
4 Tutorials
4.1
4.2
17
Stereo-Kamera-Kalibrierung
. . . . . . . . . . . . . . . . . . .
CCTools
5.2
17
4.1.1
Schritt-für-Schritt-Anleitung für
. . . . . . . .
18
4.1.2
Schritt-für-Schritt-Anleitung für Lösung mit OpenCV .
24
Augenmaus
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
4.2.1
Augenmaus ausschalten
. . . . . . . . . . . . . . . . .
26
4.2.2
Augenmaus einschalten . . . . . . . . . . . . . . . . . .
26
5 Benutzeroberäche
5.1
11
29
Das Taskbar-Icon . . . . . . . . . . . . . . . . . . . . . . . . .
29
5.1.1
Menü am Taskbar-Icon . . . . . . . . . . . . . . . . . .
30
5.1.2
Mitteilungen des Taskbar-Icons
. . . . . . . . . . . . .
30
Das Hauptfenster . . . . . . . . . . . . . . . . . . . . . . . . .
31
5.2.1
Favoriten
. . . . . . . . . . . . . . . . . . . . . . . . .
31
5.2.2
Tracking . . . . . . . . . . . . . . . . . . . . . . . . . .
31
5.2.3
Status
. . . . . . . . . . . . . . . . . . . . . . . . . . .
32
5.2.4
Benutzer . . . . . . . . . . . . . . . . . . . . . . . . . .
32
5.2.5
Bildschirme
. . . . . . . . . . . . . . . . . . . . . . . .
32
5.2.6
Kameras . . . . . . . . . . . . . . . . . . . . . . . . . .
32
3
INHALTSVERZEICHNIS
5.2.7
4
Die Benutzeroberächen-Hilfe
. . . . . . . . . . . . . .
6 Das Modell
35
6.1
Die einfache Theorie
6.2
Die nicht so einfache Praxis
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
7 Maus-System Produkt-Struktur
7.1
Stereo-Kamera-Kalibrierung
7.1.1
7.2
7.3
7.4
32
35
36
39
. . . . . . . . . . . . . . . . . . .
39
Kalibrierung mit Hilfe von OpenCV . . . . . . . . . . .
39
Augen-Maus . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
7.2.1
Tracking . . . . . . . . . . . . . . . . . . . . . . . . . .
40
7.2.2
Gesichtsmodell erstellen
48
7.2.3
Berechnung der Blickgeraden
7.2.4
Blickpunktberechnung
7.2.5
Mauszeiger-Positionierung
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
50
. . . . . . . . . . . . . . . . . .
52
. . . . . . . . . . . . . . . .
52
Bildschirm-Lokalisierung . . . . . . . . . . . . . . . . . . . . .
53
7.3.1
Lokalisierungsvorrichtung Basteln . . . . . . . . . . . .
53
7.3.2
Stereo-Bilder der Konstruktion erstellen
7.3.3
Berechnen der Bildschirmdaten
. . . . . . . .
54
. . . . . . . . . . . . .
55
Benutzer-Registrierung . . . . . . . . . . . . . . . . . . . . . .
56
7.4.1
Einfache Benutzer-Registrierung . . . . . . . . . . . . .
57
7.5
Visualisierung . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
7.6
Konguration der Software . . . . . . . . . . . . . . . . . . . .
57
7.7
Hilfe-System . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
7.8
Software-Update
58
. . . . . . . . . . . . . . . . . . . . . . . . .
8 Referenzteil
61
9 Untersuchungen zur Eektivität ausgewählter Funktionen
63
setPupilCenterPoint_LLM() .
9.1
Eektivität von
9.2
Eektivität der Augenmaus
. . . . . . . . .
63
. . . . . . . . . . . . . . . . . . .
65
10 FAQ
10.1 Allgemeine Fragen
67
. . . . . . . . . . . . . . . . . . . . . . . .
11 Internetquellen
11.1 Augenmaus-System . . . . . . . . . . . . . . . . . . . . . . . .
67
69
69
11.2 Kamera-Kalibrierung . . . . . . . . . . . . . . . . . . . . . . .
69
11.3 OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
11.4 Nützliches . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
12 Schlusswort
71
5
INHALTSVERZEICHNIS
13 Glossar
73
14 Erklärung zur Bachelor-Prüfung
75
INHALTSVERZEICHNIS
6
Kapitel 1
Vorwort
Stellen Sie sich eine Welt vor, in der es keine Computer-Maus mehr gibt.
Stellen Sie sich vor, dass sie überüssig geworden ist, weil ein System entwickelt wurde, welches Ihnen die Steuerung des Mauszeigers viel einfacher,
viel intuitiver, viel schneller und viel schonender für die Gelenke und Sehnen
macht.
Stellen Sie sich vor, der Mauszeiger steht immer an der Position, die Sie
gerade auf dem Bildschirm anschauen. Sie schauen in das Menü, drücken dabei eine bestimmte Taste auf der Tastatur und schon erscheint das Menü. Sie
blicken auf die Option des Menüs, die Sie interessiert, drücken erneut eine
Taste und schon ist dieser Menüpunkt ausgewählt.
Das geht schnell! Man muss die Hand nicht mehr zur Maus führen, muss den
Mauszeiger nicht mehr suchen und auch nicht mehr diese Bewegungen ausführen, die zu einem Mausarm führen können. Zudem wird der Mauszeiger
an sich überüssig, da er immer dort steht, wo man gerade hinschaut.
Diese Idee fasziniert mich jedes Mal auf das Neue, und somit bin ich dem
Institut für Neuroinformatik an der Ruhr-Universität Bochum dankbar, dass
ich meine Bachelor-Arbeit zu diesem Thema erstellen durfte.
Ich danke Herrn Dr. Rolf P. Würtz für die persönliche Unterstützung und
Betreuung meiner Arbeit. Auch den Mitarbeitern des Instituts möchte ich für
ihre entgegengebrachte Freundlichkeit, Oenheit für alle themenbezogenen
Fragen und praktische Unterstützung danken, insbesondere Herrn Manuel
Günther, Herrn Marco Müller, Herrn Thomas Walther und Frau Dr. Susanne
Winter.
7
KAPITEL 1.
VORWORT
8
Zusammen mit Frau Lara Kresse und Frau Laura Moser haben wir uns
schon einmal im Rahmen eines Studienprojekts zum Thema
mit Blick
Maussteuerung
Gedanken machen dürfen. Wir legten damals groÿen Wert darauf,
dass dieses zu erstellende Maus-System den Benutzer in Bezug auf die schädlichen Handbewegungen, bei der Bedienung einer Computer-Maus, entlasten
und ihn nicht in einer anderen Form belasten sollte, zum Beispiel durch eine
zusätzliche Strahlenbelastung. Es wurde demnach ein Ansatz gewählt, der
mit zwei Kameras und normaler Beleuchtung auskommen sollte.
Meine Aufgabe und somit das Ziel dieser Bachelor-Arbeit war es, einen
Open-Source-Projektrahmen zu erschaen, in welchem an dem Vorhaben
funktionstüchtige Mauszeiger-Steuerung durch den Blick
voll
zukünftig jeder, der
Interesse hat, arbeiten können sollte. Gleichzeitig galt es so viele Funktionen
wie möglich selbst zu implementieren.
Es war keine leichte aber eine sehr interessante Aufgabe, die ich hier bearbeiten durfte. Von einer voll funktionstüchtigen Mauszeiger-Steuerung sind
wir leider noch ziemlich weit entfernt, aber es wurde zumindest ein Grundstein gelegt und der geschaene Projektrahmen erlaubt die genaue Identikation von noch bestehenden Schwachstellen und ermöglicht somit den
einfacheren Einstieg für zukünftige Entwickler.
Ihr Martin Schnurrenberger
Kapitel 2
Einführung
Das hier betrachtete Maus-System benötigt zwei Kameras, die fest an
einem Bildschirm montiert sind.
Das Maus-System ist benutzerunabhängig, welches bedeutet, dass ein Benutzerwechsel nur eine geringe Anpassungen erfordert, damit das Maus-System
auch mit dem neuen Benutzer weiterhin funktioniert. Der erstmalige Aufbau,
die Konguration und Installation des Maus-Systems ist sehr speziell und
muss von einer geschulten Person vorgenommen werden.
Sobald das Maus-System jedoch installiert wurde, ist es für jeden fortgeschrittenen Computer-Anwender benutzbar und kongurierbar.
Benutzer, die nur wenig im Umgang mit Computern geschult sind, können
das Maus-System verwenden, solange ihnen ein fortgeschrittener ComputerAnwender zur Verfügung steht, der ihnen bei auftretenden Problemen helfen
kann. Ist dies nicht der Fall, so wird von einer Benutzung des Maus-Systems
durch Computer-Laien abgeraten.
Das Maus-System ist nur in geschlossenen Räumen bei künstlichem beziehungsweise durch Fenster einfallendem Tageslicht anzuwenden.
Es ist zudem nur auf Personal-Computern einzusetzen, an denen ein einzelner Benutzer Standardsoftware wie zum Beispiel Datei-Manager, OceProgramme, Internet-Browser, und so weiter anwendet.
Dies ist das Handbuch zum Maus-System.
Dieses Handbuch versucht einer Vielzahl Anforderungen gerecht zu werden.
Diese Anforderungen rühren vor allem von den verschieden Zielgruppen her,
denen das Handbuch Rechnung tragen muss.
9
KAPITEL 2.
EINFÜHRUNG
10
Die Leserschaft lässt sich grob in folgende Gruppen unterteilen: Es gibt
zum einen den Leser, der wissen möchte wie oder wie gut das System funktioniert, zum anderen gibt es den Leser, der zufrieden ist, wenn es überhaupt
funktioniert. Es gibt denjenigen, der dieses Handbuch lesen muss, ein anderer liest es aus freiem Interesse, entweder um das System nachzubauen oder
einfach des Informationsgehaltes wegen.
Dieses Handbuch versucht all seinen Lesern gerecht zu werden, indem es
zum Beispiel verschiedene Ansätze zur Navigation bietet. Hat es der Leser
eilig, so kann er mittels Inhaltsverzeichnis oder Stichwortverzeichnis schnell
das nden, was ihn interessiert. Der wissbegierige Leser mit Zeit kann das
gesamte Handbuch von vorne bis hinten ähnlich eines Romans lesen. Wer
an der Dokumentation der implementierten Funktionen interessiert ist kann
zum Referenzteil springen und wenn er oder sie etwas ndet, was noch nicht
oder nicht gut genug implementiert ist kann er sich im Anhang zu den OpenSource-Quellen informieren und mitwirken. Wer auf der Anwenderseite praktische Schritt-für-Schritt-Anweisungen sucht ndet diese im Teil für Tutorials.
Während ausgearbeitete Bereiche dieser Arbeit sehr ausführlich beschrieben werden, gibt es zum Teil Kapitel, die rein konzeptioneller Natur sind hier
wird versucht den theoretischen Ansatz so detailliert wieder zu geben, dass
ein zukünftiger Entwickler versteht, was gemeint ist.
Ich hoe Sie haben genau so viel Freude beim Anwenden dieses Handbuches
wie ich beim Erstellen hatte.
Kapitel 3
Installation
Die Installation des Maus-Systems, und im Besonderen der Hardware,
sollten nur Personen in Angri nehmen, die zumindest ein wenig technisch
versiert sind. Der Zusammenbau erfordert handwerkliches Geschick, die Hardwarekonguration ist bei der selbst erstellten Hardware leider noch mühselig
und relativ benutzerunfreundlich. Ein kleiner Fehler und das gesamte MausSystem wird nicht richtig funktionieren. Es wird jedoch versucht die Abläufe
so benutzerfreundlich wie möglich zu beschreiben.
3.1 Hardware
Da das Maus-System erschwinglich sein soll, bleibt einem Benutzer momentan nichts anderes übrig, als sich das benötigte Hardware-System aus
Komponenten selbst zusammen zu bauen. Im Folgenden wird beschrieben
wie dies geschehen kann, wobei besonderen Wert auf die Möglichkeit des genauen Nachbaus gelegt wurde.
Sollte es zukünftig Fertiglösungen zu kaufen geben, werden diese in einem
Unterkapitel verglichen, damit der Benutzer ein möglichst gutes Ergebnis
erzielen kann.
3.1.1
Marke Eigenbau
Frei nach dem Motto: Was nicht passt, wird passend gemacht!, wird im
Folgenden ausführlich beschrieben, wie man sich die benötigte Hardware aus
Einzelteilen und mit ein wenig handwerklichem Geschick selbst zusammenbauen kann.
11
KAPITEL 3.
INSTALLATION
Abbildung 3.1:
12
Hardewareaufbau. Diese Abbildung zeigt, wie die Hardware
am Ende aussehen kann.
Die Art des Zusammenbaus ist eigentlich Geschmackssache. Wichtig jedoch
ist, dass die beiden Kameras zueinander und in Bezug auf den Bildschirm
unbeweglich montiert werden. Die hier beschriebene Art des Zusammenbaus
erfüllt dies nicht nur, sondern besticht zudem durch eine einfache und komponentenschonende Montage.
Benötigte Komponenten
Für den Zusammenbau der Hardware werden folgende Komponenten benötigt:
ˆ
1 x TFT Flachbildschirm mit einer Bilddiagonalen von mindestens
17 Zoll. Wichtig hierbei ist die trotz montiertem Standfuÿ freiliegende ESA-Normlochung auf der Rückseite, die normalerweise der Wandbefestigung dient, und die dazugehörigen Schrauben. Auÿerdem sollte
zwischen der unteren Kante des Bildschirms und der Tischäche mindestens 5 cm Platz sein. Ein Bildschirm der das erfüllt ist zum Beispiel
Hanns-G HC174D.
ˆ
1 x Winkelschiene aus Aluminium mit den Maÿen 100 x 4 x 2 cm
ˆ
2 x Metallwinkel, gelocht, recht lang: ca. 15-20 x 4 cm
ˆ
Schräubchen und Muttern
ˆ
2 x Web-Kamera, von unten festschraubbar, zum Beispiel Vivanco WebKamera: 1,3M CAM 2.0 TRACKING; Art.-Nr: 21331
ˆ
Werkzeug: Metallbohrmaschine, Metallsäge, gegebenenfalls eine Metallfeile und ein Schraubstock
13
KAPITEL 3.
Abbildung 3.2:
INSTALLATION
Hardewareaufbau. Diese Abbildung zeigt den schemati-
schen Zusammenbau der verwendeten Teilstücke: Bildschirm (A), Winkelschiene aus Aluminium (B), Gelochte Metallwinkel (C) und Web-Kameras
(D).
Preislich liegt man hierbei maximal bei 180 Euro (2008). 90 Euro für den
Bildschirm, 40 Euro pro Kamera und maximal 10 Euro für die restlichen
Komponenten.
Zusammenbau und Anbringung der Haltevorrichtung
Zunächst sollte ein 25 cm langes Stück von der Winkelschiene aus Aluminium abgesägt werden. Dieses fungiert später als Untersatz für die Kameras
und ist somit eine sichtbare Komponente.
KAPITEL 3.
INSTALLATION
14
Nun werden die beiden Metallwinkel am längeren Ende mit jeweils zwei
Schräubchen so befestigt, dass die Metallteile untereinander unbeweglich
sind, so dass die Winkelschiene mit dem kürzeren Ende nach unten zeigt, die
Metallwinkel mit den kürzeren Enden nach oben zeigen und die Metallwinkel
zum einen weit genug auseinander sind, dass der Standfuÿ des Bildschirms
dazwischen passt und zum anderen, dass sie nah genug zusammen sind, um
später an der ESA-Normlochung montiert zu werden, also circa 9,5 cm.
Es kann sein, dass die Metallwinkel einen kleineren Winkel als 90° brauchen, damit die Kameras den besten Winkel zum Benutzer haben, zum Beispiel 80°. In diesem Fall sind die Metallwinkel mittels Schraubstock zu biegen.
Der Rest der Winkelschiene aus Aluminium wird in zwei gleich lange Stücke
zersägt. Diese werden an die noch freien Enden des Metallwinkels mittels
Schräubchen unbeweglich angebracht. Durch diese Verlängerung müsste einer
Montage an der ESA-Normlochung des Bildschirms nichts mehr im Wege
stehen.
Zuvor sollten jedoch die Kameras montiert werden. Sie sind von ihren beweglichen Teilen zu separieren, indem die entsprechenden Schräubchen gelöst
werden. Die beiden Kameras sollten, mit ungefähr einem Zentimeter Abstand
zueinander, mittig auf der Winkelschiene aus Aluminium, in Richtung des
Computerbenutzers, so parallel wie möglich festgeschraubt werden.
Wenn alles verschraubt ist sollte ein in sich starres Gebilde entstanden
sein, welches den Blick auf den Bildschirm nicht, oder nur kaum verdeckt
und zwei auf den Kopf des Computeranwenders zeigende Kameras aufweist.
Treiber-Installation
Nachdem die Hardware aufgestellt und mit dem Computer verbunden
wurde können die benötigten Treiber installiert werden. Für den Bildschirmtreiber besteht wahrscheinlich kein Bedarf, aber die Kameratreiber werden
sehr wahrscheinlich benötigt.
Der beiliegende Datenträger, eventuell eine CD, sollte in das Laufwerk
des Computers eingelegt werden, so dass den Anweisungen der beiliegenden
Installationsanweisung Folge geleistet werden kann.
15
KAPITEL 3.
3.1.2
INSTALLATION
Fix-und-fertig
Die benötigte Hardware, also ein System aus Bildschirm und Kameras, x
und fertig zusammengebaut wäre eine echte Erleichterung für den Benutzer.
Eine erschwingliche, fertig montierte, kalibrierte Komplettlösung, womöglich
mit enthaltenen signalverarbeitenden Microchips, die dem Computer die Berechnungen abnehmen! Das ist leider noch ferne Zukunftsmusik, aber wer
weiÿ?!
3.2 Software
Die Software, der weit aus kompliziertere Teil des Maus-Systems, ist im
Gegensatz zur Hardware wiedereinmal viel schneller installiert. Die Software ist eine Zusammenstellung mehrerer kleinerer Komponenten, und besteht
unter anderem aus einem
nutzerdatenverwalter
Hardware-Kongurator, einem Tracker, einem BeAugenmaus.
und der eigentlichen
Die Software wird weitestgehend modular erstellt, so dass der Tracker,
also die Kernfunktionalität der Blickrichtungsberechnung, auch in anderer
Software Anwendung nden kann. Die Software wurde weitestgehend in C++
für das Microsoft XP Betriebssystem entwickelt.
Im folgenden wird nun beschrieben, wie man die Software installiert und
konguriert.
3.2.1
Installation
Es wird davon ausgegangen, dass Sie die Maus-System-Software als Installer oder als gepackte Datei, entweder von einem externen Datenträger
oder von einer Internetseite auf Ihren Computer kopiert haben.
Wenn nötig entpacken Sie den Installer durch einen Doppelklick.
Führen Sie den Installer nun aus und befolgen Sie die Anweisungen im
Installations-Wizzard. Nach der Installation können Sie das Programm
genmaus
im Startmenü ausführen.
3.2.2
Konguration
Au-
Die Konguration wird beim ersten Start des Augenmaus-Programms
ausgeführt. Diese können Sie später jederzeit nochmal ändern. Von Interesse
KAPITEL 3.
INSTALLATION
16
sind vielleicht die Einstellungen zum Startverhalten der Software, oder ähnliches.
Da dieser Teil noch rein konzeptionell ist, wird an dieser Stelle nicht weiter
darauf eingegangen.
Kapitel 4
Tutorials
In diesem Kapitel werden wichtige oder schwierigere Vorgänge wie die
Stereo-Kamera-Kalibrierung, ohne die gar nichts funktionieren würde, in
Schritt-für-Schritt-Anleitungen erklärt.
Es wird davon ausgegangen, dass Sie die Hardware, wie im Kapitel
Installa-
tion beschrieben, aufgebaut haben, die Software zum Maus-System installiert
ist und die Kameras noch nicht kalibriert wurden.
HINWEIS: Eine erneute Kamera-Kalibrierung nach der Erstellung von Benutzern, kann zur Folge haben, dass die vorhanden Benutzerdaten unbrauchbar werden und diese somit neu erstellt werden müssen.
4.1 Stereo-Kamera-Kalibrierung
Ohne eine Stereo-Kamera-Kalibrierung ist die Lageberechnung von Punkten im Raum, wie sie hier benötigt wird, nicht möglich und sie weg zu lassen
hätte den Ausfall des gesamten Maus-System zur Folge.
Es wird von in Abbildung 4.1 dargestellten Kameramodell ausgegangen.
Nun werden zwei Anleitungen zur Kalibrierung gegeben. Die erste ist zwar
etwas kompliziert, liefert jedoch zuverlässige Ergebnisse. Die zweite ist dagegen einfacher durch zu führen, aber die Richtigkeit der Ergebnisse wurde
noch nicht überprüft.
Für beide Methoden wird ein Schachbrettmuster benötigt. Dieses kann
entweder selbst erstellt werden oder liegt bei der OpenCV 1.0 Distribution
17
KAPITEL 4.
TUTORIALS
Abbildung 4.1:
18
Verwendetes Kameramodell. Diese Abbildung zeigt das
verwendete Kameramodell, mit C als Brennpunkt der Kamera, u und v als
Vektoren in der Bildebene in X- und Y-Richtung, m als Bildpunkt des Realen
Objektpunktes M und R als Rotationsmatrix der Kamera und t als Translationsvektor der Kamera. Einzig das Weltkoordinatensystem (I,J,K) wurde
nicht wie abgebildet gewählt. Quelle: Siehe Internetquellen
beziehungsweise eine Kopie davon bei der Augenmaus-Software bei, deren
Bezugsquelle Sie im Abschnitt
Internetquellen
erfahren können.
Auf die Kalibrierungsmethode und den Ablauf in der Software wird im
Kapitel
4.1.1
Maus-System Produkt-Struktur
näher eingegangen.
Schritt-für-Schritt-Anleitung für Camera Calibra-
tion Tools
Die für diese Anleitung notwendige Software
Camera Calibration Tools
ist im Internet momentan in der Version 0.5.2 frei verfügbar und kann unter
19
KAPITEL 4.
Abbildung 4.2:
TUTORIALS
Fremdsoftware. Diese Abbildung zeigt einen Teil der Web-
seite, der hier vorgestellten Kalibrierungs-Software.
folgender Adresse heruntergeladen werden:
http://www.doc.ic.ac.uk/%7Edvs/calib/main.html
Nachdem sich die eben genannte Software auf dem Computer bendet,
können die für die Kalibrierung notwendigen Stereo-Bilder gemacht werden.
Hierbei wird ein schachbrettartiges unbewegliches Muster aus verschiedenen
Positionen durch die zu kalibrierenden Kameras so fotograert, dass das Muster in beiden Kamerabildern ganz zu sehen ist. Es sollten zwischen sieben und
zehn Stereo-Bilder gemacht werden.
Davon ausgehend, dass die Kameras fest am Bildschirm montiert sind,
gibt es nun zwei Möglichkeiten wie das Aufnehmen der Stereo-Bilder erfolgen kann. Entweder wird das Muster vor jeder Aufnahme xiert und daraufhin werden zwei Bilder nacheinander, jeweils eines von jeder Kamera,
aufgenommen, oder es wird eine Software verwendet, die gleichzeitig ein Bild
von beiden Kameras holt. Letztere steht als C++ Quelltext zusammen mit
dem Augenmaus-System im Internet zur Verfügung, wobei die Adresse im
Abschnitt
Internetquellen
zu nden ist.
Es sollten nun sieben bis zehn gelungene Stereoaufnahmen vorliegen, die
das schachbrettartige Muster aus verschiedenen Positionen zeigen. Das Pro-
KAPITEL 4.
TUTORIALS
Abbildung 4.3:
20
Camera Calibration Tools GUI. Diese Abbildung zeigt die
Benutzeroberäche der Kalibrierungs-Software. Die Buchstaben geben die im
Text erläuterte Reihenfolge an..
gramm
Camera Calibration Tools, das heiÿt die Camera Calibraion Tools.exe,
kann nun ausgeführt werden, nachdem das Programm durch Ausführen der
heruntergeladenen
cct.exe
entpackt wurde.
Das Programm präsentiert sich als nicht sehr redseliges Design-Produkt
und ist trotz Tooltipps wenig intuitiv. Da man Kamera-Kalibrierungen in der
Regel nicht so häug durchführt wäre hier ein Wizzard angebrachter.
Nun denn. Im unteren Bereich des Programmfensters, unter der Überschrift
Calibration Data View, gibt es fünf verschiedene Icons, von denen eines eine
Kamera mit einem Plus-Symbol ist (Abbildung 4.3, Markierung A). Dieses
Symbol sollte nun angeklickt werden. Es wurde eine Kamera mit der Bezeichnung
Camera 1
hinzugefügt (Markierung N).
Das Symbol A sollte ein zweites Mal geklickt werden, damit eine zweite Kamera hinzugefügt wird.
21
KAPITEL 4.
TUTORIALS
Nun gilt es die vorher erstellten Stereo-Bilder in den jeweiligen Kamerabereich zu laden. Dies geschieht anhand des kleinen Icons, welches einen Ordner
mit einem Plus darstellt (Markierung B). Es steht zusammen mit zwei anderen kleinen Icons im Bereich der jeweiligen Kamera.
Wird es für die erste Kamera geklickt, so önet sich ein Dateifenster. Der
Ordner, in dem sich die Stereo-Bilder benden muss geönet werden.
Dies ist nun ganz wichtig! Die Bilder, die zur ersten Kamera gehören, sollen
nun ausgewählt werden, indem zu erst das letzte Bild durch einen Klick ausgewählt wird, dann die Umschalttaste gehalten und während des Haltens auf
das erste Bild geklickt wird.
Diese Reihenfolge ist wichtig, da sie gleich, bei der zweiten Kamera, auf die
selbe Art ausgeführt werden muss. Sind alle Bilder markiert kann nun die
Önen -Schaltäche gedrückt werden.
Auch Kamera zwei, soll nun auf diese Art ihre Bilder zugewiesen bekommen.
Letztes Bild anklicken, Umschalttaste halten, erstes Bild anklicken,
Önen
klicken.
Im Programm sind die Bilder nun der jeweiligen Kamera zugeordnet, indem
sie als Piktogramme abgebildet werden (Markierung D). Es kann sein, dass
die Bilder erst sichtbar werden wenn man mit der Maus in den Bereich einer
Kamera klickt! Hier nochmal die Kontrolle: Die Bilder müssten bei den beiden
Kameras die gleiche Abfolge haben, also jeweils ungefähr gleich aussehen.
Durch einen Doppelklick auf das erste Bild bei Kamera eins (Markierung
E) önet sich ein mittelgroÿes Fenster (Markierung F), welches lediglich dieses Bild enthält und auf der linken Seite ein Menü in gewohnt spartanischer
Art aufweist.
Zunächst muss eingestellt werden, was für Eigenschaften das fotograerte
Schachbrettmuster besitzt. Um dies zu tun sollte man im Menü auf das Icon
mit dem Hammer und der Zange klicken (Markierung G). Es önet sich ein
recht kleines Fenster mit sechs Eingabefeldern (Markierung H).
Jetzt wird es spannend: Wenn das Schachbrettmuster ein tatsächliches Schachbrett ist, also acht mal acht Felder aufweist, dann muss unter
Squares
Number of
bei X und bei Y, jeweils eine sieben eingetragen werden (Markie-
rung I). Ist das Muster aber zum Beispiel sechs mal vier Felder groÿ, und es
wurde entschieden, dass die längere Seite die X-Achse sein soll, so muss unter
Number of Squares
in das X-Feld die Zahl fünf und in das Y-Feld die Zahl
drei eingegeben werden. Am besten nimmt man ein quadratisches Muster,
dann kommt man mit der X- und Y-Richtung nicht durcheinander, das heiÿt,
auch wenn das Muster sechs mal vier groÿ ist, kann man angeben, man hätte
nur ein vier mal vier groÿes Muster und müsste dann wiederum jeweils eine
KAPITEL 4.
TUTORIALS
drei statt einer vier eingeben.
Nun werden die Felder unter
22
Square Size
ausgefüllt (Markierung J). In der
Hilfedatei des Programms wird angegeben, dass dort die Schachbrettfeldbreite in Millimeter anzugeben sei. Meine Felder sind drei Zentimeter groÿ, also
trage ich dort jeweils eine 30 ein.
Die letzten beiden Felder, unter
Window Size
können unverändert den Wert
drei behalten, hierbei geht es um die Gröÿe des Suchfensters in Pixel zur
optimierten Eckpunkt-Findung. Die Einstellung ist so schon richtig.
Nachdem die Werte nun gesetzt sind, kann man die Eingaben mit
OK
über-
nehmen und kommt nun zum eigentlichen, lustigeren Teil.
Das erste Bild, in dem kleinen Fenster Namens
Calibration Object Editor
(Markierung F), weist im Menü zuoberst ein Icon auf, welches wie ein Schachbrettmuster mit einem Kreis aussieht (Markierung K). Das sollte angeklickt
werden, damit die Ecken des inneren Schachbrettmusters von Hand markiert
werden können (Markierung L).
Das innere Schachbrettmuster ist eben jenes, welches an allen vier Rändern
ein Feld weniger besitzt, als das fotograerte Muster. Somit sind es beim
normalen Schachbrett, welches acht mal acht Felder besitzt, die inneren sieben mal sieben, die nun markiert werden sollen, indem wie folgt vorgegangen
wird.
Zuerst sollte die linke untere innere Ecke mit der Maus markiert werden,
dann im Uhrzeigersinn, die linke obere innere Ecke, rechte obere innere Ecke
und rechte untere innere Ecke. Wenn alles richtig gemacht wurde, ist das
innere Rechteck blau umrandet dargestellt, alle Felder im inneren Rechteck
haben rote Kreise an den Ecken, schön gerade in einer Reihe (Markierung
L). Sollten die roten Kreise wild durcheinander sein, so reicht ein Klick auf
das zweitoberste Icon um die Auswahl wieder aufzuheben, wonach man die
Einstellung überprüfen oder den Einstellungen entsprechend klicken sollte.
Geht alles gut, so ist zudem die untere Seite des Rechtecks mit einem X beschriftet, die linke untere Ecke mit einer Null, für den Nullpunkt, und die
linke Seite des Rechtecks mit einem Y (Markierung L).
Der rechte der beiden Pfeile im unteren Menü des mittelgroÿen Fensters sollte
nun angeklickt werden, damit das nächste Bild ebenso markiert werden kann
(Markierung M). Man wiederhole dies, bis alle Bilder der Kamera markiert
wurden.
Wie bereits erwähnt, ist es am besten, wenn man ein quadratisches Muster
verwendet und immer in der gleichen Ecke zu markieren beginnt.
Wenn alle Bilder der ersten Kamera markiert sind kann man das Fenster,
durch klicken des roten Kreuzchens, oben rechts im Fenster, schlieÿen.
23
KAPITEL 4.
TUTORIALS
Ein Doppelklick auf das erste Bild der zweiten Kamera önet das letzte Fenster erneut und die Prozedur erfolgt von Neuem: Werkzeug-Icon anklicken, die
richtigen Werte eingeben, siehe oben, für alle Bilder innere Ecken markieren
und Fenster schlieÿen.
So, der schwierige Teil liegt hinter uns, jetzt lassen wir kalibrieren! Im
Hauptfenster des Programms kann man nun auf den dunkelgrau hinterlegten Teil klicken, in dem
Camera 1
steht. Hat man dies getan, so erscheint
eine gelbe Umrandung und ein Bereich wird sichtbar, in dem
Not calibrated
geschrieben steht (Markierung N).
Nun klickt man zur Stereo-Kamera-Kalibrierung unten bei den fünf Icons auf
das vierte von links, nämlich das mit den zwei Zahnrädern (Markierung O).
Daraufhin sollten zwei Dinge geschehen: Zum einen önet sich eine schicke
3D-Animation, die einem die ganze Kalibrierung schön visualisiert, zum anderen gesellt sich zu
- Camera 1 & 2.
Camera 1
und
Camera 2
ein Label Namens
Stereo Rig
Beim Betrachten der 3D-Ansicht gewinnt man wichtige Informationen zu wo
sich das Koordinatensystem in Bezug auf die Kameras bendet und wie die
Achsenbezeichnungen und Achsenausrichtungen festgelegt sind.
Hat man sich an der 3D-Ansicht satt gesehen, dann kann man sie schlieÿen und die ganze Kalibrierung speichern, indem man im Hauptfenster des
Programms auf das Disketten-Icon im Menü auf der linken Seite klickt (Markierung P).
Nachdem die Kalibrierung gespeichert wurde, sollte man den entsprechenden Ordner önen und die Vielzahl an Dateien bestaunen, die erstellt wurden.
Das Programm kann man im Übrigen nun schlieÿen.
Von den ganzen Dateien sind in unserem Fall nur zwei wichtig:
ra_0_Intrinsic.txt
und
StereoCamera_1_Intrinsic.txt.
StereoCame-
Önet man die erste der beiden Dateien, so benden sich in ihr neun Zeilen
mit Zahlen, mit denen man zunächst nichts anfangen kann. Durch die Hilfedatei erfährt man, dass die ersten drei Zeilen zusammen die so genannte
intrinsische Matrix der Kamera darstellen, die vierte Zeile die radialen und
tangentialen Verzerrungskoezienten enthält, Zeile fünf bis sieben die Rotationsmatrix aufweist, die achte Zeile den Translationsvektor enthält und
die neunte Zeile - da bin ich auch drauf gekommen - die Bildgröÿe in Pixel
wiedergibt.
Das gleiche gilt auch für die zweite der beiden Dateien, wobei die Rotationsmatrix und der Translationsvektor der zweiten Kamera wesentlich spannender sind, als die der ersten Kamera, da der Koordinatenursprung auf den
KAPITEL 4.
TUTORIALS
24
Brennpunkt der ersten Kamera gesetzt wird. Sie besitzt also keine Rotation
und keine Verschiebung in Bezug auf das Koordinatensystem.
Die achte Zeile der zweiten Kamera gibt dabei schon mal ein Indiz für die
Richtigkeit der Kalibrierung. Der gröÿte der drei Werte, sollte ungefähr dem
Wert der Distanz zwischen den Kameras in Millimetern angeben, bei mir sind
das 49.734892374, was ungefähr 5 Zentimetern entspricht und das kommt hin,
da meine Kameras ziemlich genau 5 Zentimeter auseinander stehen.
Die Stereo-Kameras sind kalibriert, herzlichen Glückwunsch!
Da die 3x3 Rotationsmatrix der ersten Kamera Einsen auf der Hauptdiagonalen und sonst nur Nullen enthält und es dadurch leider an einigen Stellen
im Programm zu einer Division-durch-Null-Situation kommen kann, sollten
alle betroenen Daten, zum Beispiel auch die Rotationsmatrix der zweiten
Kamera und die Translationsvektoren mit einer ausgedachten Rotationsmatrix, zum Beispiel die der zweiten Kamera, durch Multiplikation transformiert
werden.
4.1.2
Schritt-für-Schritt-Anleitung für Lösung mit OpenCV
Da die zuvor beschriebene Art der Stereo-Kamera-Kalibrierung recht umständlich, und fremde Software mit im Spiel ist, wurde eine benutzerfreundlichere Variante implementiert, die auf OpenCV Funktionen basiert.
Allerdings ist diese Variante weniger exibel, wie man im Folgenden sehen
wird.
Der OpenCV 1.0 Distribution liegt ein Schachbrettmuster bei, welches dem
hier erläuterten Kalibrierungsprogramm unter Verwendung des Dateinamen
pattern.pdf
beigefügt wurde. Das Muster kann auf einer DIN A4 Seite aus-
gedruckt werden und muss zur weiteren Verwendung in dieser Anleitung zu
einem quadratischen Muster geschnitten werden.
Die Kästchen am Rand müssen hierbei nicht quadratisch sein, sie können
also leicht kleiner sein, als die fünf mal fünf inneren Kästchen, die unversehrt
bleiben müssen.
Das Muster sollte auf eine glatte, helle, vorzugsweise weiÿe Fläche geklebt
werden. Ich habe die Glasäche eines leeren, also weiÿen, Bilderrahmens genommen. Entscheidend hierbei ist, dass um die äuÿeren, schwarzen Rechtecke
weiÿe Flächen zu nden sind.
25
KAPITEL 4.
TUTORIALS
Sind zwei Kameras angeschlossen kann man die Kalibrierungs-Software
starten, worauf eine Ausgabe in einem Konsolenfenster erscheint, die erläutert, welches Schachbrettmuster erwartet wird. In unserem Fall ein sieben
mal sieben groÿes Feld, wobei die inneren Kästchen eine Gröÿe von drei mal
drei Zentimeter aufweisen müssen.
Durch Drücken einer Taste erscheinen zwei Fenster, die zeigen, was die beiden Kameras gerade sehen.
Das Schachbrettmuster kann nun so gehalten werden, dass es von beiden Kameras vollständig gesehen werden kann und dass nichts auch nur einen Teil
des Musters verdeckt.
Das Drücken einer beliebigen Taste hält die Bilder der beiden Kameras an
und das Muster kann nun weggelegt werden.
Ein Algorithmus hat just nach diesem Tastendruck versucht, das Schachbrettmuster in beiden Bildern zu nden. Er war erfolgreich, wenn alle 25
inneren Kästchen an allen vier Ecken, bunte, durch eine Linie verbundene
Kreise aufweisen. Der Farbverlauf hierbei ist: rot, orange, gelb, grün, hellblau, dunkel-blau. Sind beide Bilder so dargestellt, dann ist das Bildpaar
verwendbar.
Wenn nur rote Kreise zu sehen, sie wild verstreut, oder weniger als 25 Kreise
zu sehen sind, ist diese Aufnahme und somit beide Aufnahmen unbrauchbar.
In dem Konsolenfenster erscheint die Frage:
Use Stereo frame? (y/n), also
ob das gemachte Stereo-Bild zur Kalibrierung verwendet werden soll, oder
nicht.
Wenn beide Bilder, wie oben beschrieben, verwendbar sind, sollte die Y-Taste
gedrückt werden, ansonsten, wenn eines der beiden unbrauchbar ist, sollte die
N-Taste gedrückt werden.
Ist dies erfolgt erscheint ein neues Menü im Konsolenfenster, welches auf
die Anzahl der bisher verwendbaren Stereo-Bilder hinweist und nun fragt, ob
noch ein Bildpaar gemacht werden soll (A-Taste), oder das Programm mit
(G-Taste) oder ohne (K-Taste) Kalibrierung verlassen werden soll.
Es sollte die A-Taste gedrückt werden und wiederholt, wie vorhin beschrieben, Stereo-Bilder von dem Schachbrettmuster gemacht werden, wobei das
Brett nie zweimal in der gleichen Position und Orientierung sein sollte, da
zwei identische Aufnahmen, der Kalibrierung keine neuen Daten liefern.
Nach sieben bis zehn gelungenen Bildern kann das Programm mittels G-Taste
zur Kalibrierung fortschreiten. Die Ergebnisse sind daraufhin im Programmordner in den Dateien
cam1calibResult.txt beziehungsweise cam2calibResult.txt
KAPITEL 4.
TUTORIALS
26
zu nden.
4.2 Augenmaus
Die Augenmaus an sich, also der Teil des Maus-Systems, welcher die
Steuerung des Mauszeigers mit dem Blick ermöglicht, ist unter Umständen nicht immer voll funktionsfähig. Dem Benutzer soll daher ein leichter
Ausschalt-Mechanismus zur Verfügung gestellt werden, der ihm erlaubt, jeder Zeit wieder auf eine manuelle Steuerung des Mauszeigers zu wechseln.
Im folgenden wird nun geschildert, wie das ein- und ausschalten der Augenmaus prinzipiell funktionieren soll.
4.2.1
Augenmaus ausschalten
In aller Regel sollte die Augenmaus mit dem Betriebssystem gestartet
werden und idealer Weise in der Art funktionieren, dass gar nicht auällt,
dass dieses komplexe Gebilde im Hintergrund läuft.
Wird jedoch festgestellt, dass die Augenmaus nicht einwandfrei funktioniert,
oder führt eine kontinuierliche Zeitverzögerung zu Unbehagen, so soll der Benutzer nicht auch noch damit belastet werden, den Ausknopf zu suchen.
Es bietet sich im Grunde nur eine Tastenkombination an, um die Augenmaus
abzuschalten, da von einer Disfunktion in der Mauszeiger-Steuerung auszugehen ist.
Wurde die Augenmaus manuell abgeschaltet, so wird sie auch beim nächsten
Start des Betriebssystems nicht wieder automatisch eingeschaltet.
Das Maus-System und die dazu gehörige Software wird allerdings schon gestartet. Um dies zu ändern, kann der Benutzer die Option
Einstellungen
im
Menü der Software auswählen und dort die gewünschten Änderungen vornehmen.
4.2.2
Augenmaus einschalten
Für das einschalten würde sich prinzipiell auch die manuelle MauszeigerSteuerung eignen. Da jedoch das Ziel ist, keine Computer-Maus mehr zu
benötigen, bietet sich auch hier eine Tastenkombination an. Im Zweifelsfall
sogar die gleiche Kombination, die auch für das Ausschalten angewendet
wird.
Die Tastenkombination fungiert also als Schalter. Dieser Schalter behält seinen Zustand auch über einen Computer-Neustart hinweg, also gilt auch für
das Einschalten, dass falls der Computer ausgemacht wurde, während die
27
KAPITEL 4.
TUTORIALS
Augenmaus eingeschaltet war, wird die Augenmaus auch bei erneutem Hochfahren des Computers eingeschaltet sein.
KAPITEL 4.
TUTORIALS
28
Kapitel 5
Benutzeroberäche
Dieser Teil des Benutzerhandbuches erläutert die Benutzeroberäche der
Augenmaus-Software.
Alles in diesem Kapitel ist zu diesem Zeitpunkt leider rein konzeptionell,
beschreibt also, wie die Software einmal sein soll und nicht wie sie momentan
tatsächlich ist.
Der Aufbau der Benutzeroberäche ist recht ähnlich zu dem einer Antivirensoftware. Eigentlich soll man nicht merken, dass eine Software läuft,
aber in einem Problemfall sollte die Software dem Benutzer ermöglichen, den
Fehler schnell zu beheben oder, wenn der Benutzer eine Änderung vornehmen möchte, sollte sie ihm dies durch einen leichten Zugang zu den richtigen
Stellen ermöglichen.
Die Benutzeroberäche teilt sich quasi in zwei Hauptkomponenten, die
durch die Benutzung gegeben sind. Zum einen gibt es ein Taskbar-Icon, welches dem Benutzer den Status der Software mitteilt, zum anderen gibt es das
Hauptfenster, welches in verschiedene Bereiche unterteilt ist und im Wesentlichen die Konguration des Maus-Systems ermöglicht. Zum Hauptfenster
gelangt der Benutzer jeder Zeit über das Menü des Taskbar-Icons.
5.1 Das Taskbar-Icon
Jeder Windows-Benutzer kennt sie: Störende Taskbar-Icons, die alle drei
Minuten eine Nachricht in Form einer Sprechblase produzieren.
So ist das Augenmaus-Taskbar-Icon nicht! Es ist schlicht, blinkt nicht, bietet
ein Menü an und geht mit Mitteilungen, wenn überhaupt, sehr sparsam um.
29
KAPITEL 5.
BENUTZEROBERFLÄCHE
30
Das Icon selbst ist ein kleines Auge, welches oen ist, wenn die Software
eingeschaltet ist und geschlossen ist, wenn die Software ausgeschaltet ist.
5.1.1
Menü am Taskbar-Icon
Durch einen Klick auf das Icon mit der rechten Maustaste, beziehungsweise durch das Betätigen einer noch nicht näher spezizierten Tastenkombination auf der Tastatur, erscheint ein Menü beim Taskbar-Icon.
Über das Menü kann die Software unter anderem beendet werden, dann
schlieÿen alle mit dem Maus-System zusammenhängenden Programme und
die Software muss bei Bedarf unter
Start -> Programme
wieder manuell neu
ausgeführt werden.
Des weiteren kann die Augenmaus-Software auch vorübergehend deaktiviert
werden, das heiÿt das Programm läuft zwar noch, aber das Tracking der
Blickrichtung und insbesondere die Kameras sind vorübergehend ausgeschaltet, wodurch der Mauszeiger natürlich nicht mehr neu gesetzt wird. Je nachdem in welchem Zustand sich die Software bendet, zeigt das Menü also
entweder die Auswahl
Augenmaus deaktivieren
oder
Augenmaus aktivieren
an.
Ein schneller Benutzerwechsel wird gegebenenfalls auch über dieses Menü
durchgeführt.
Auÿerdem enthält das Menü eine Auswahl
Einstellungen
mit der man das
Hauptfenster önen kann um Änderungen an den Einstellungen vorzunehmen.
5.1.2
Mitteilungen des Taskbar-Icons
Sobald die Software des Maus-Systems installiert und gestartet wurde
wird ein Wizzard aufgerufen, der den Benutzer durch die Konguration des
Systems leitet. Bricht der Benutzer diesen Wizzard ab, da er das System zum
Beispiel erst später kongurieren möchte, so wird die Software als TaskbarIcon im Zustand
Augenmaus deaktiviert gestartet.
Augenmaus aktivieren
Sobald der Benutzer die Option
wählt, überprüft die
Software systematisch, ob alle zum Betrieb notwendigen Schritte vorgenommen wurden. Ist dies nicht der Fall, dann wird der Benutzer von dem TaskbarIcon mittels einer Sprechblase auf den noch fehlenden Kongurationsteil hingewiesen.
So können zum Beispiel die Kameras angeschlossen, aber noch nicht kalibriert sein. Oder das System weiÿ nach der Kamera-Kalibrierung noch nicht,
wo sich dessen Bildschirm bendet, und so weiter.
31
KAPITEL 5. BENUTZEROBERFLÄCHE
Auÿerdem können während der Laufzeit festgestellte Probleme über das
Taskbar-Icon mitgeteilt werden, wie zum Beispiel, dass das System mehrere
Benutzer erkannt hat, die sich gegenseitig stören. Oder es wird eine zu geringe
Beleuchtung erkannt und gemeldet.
5.2 Das Hauptfenster
Im Hauptfenster soll der Benutzer eine einfach zu bedienende Kongurationsschnittstelle vornden. Neben dem für das WIMP-Design typischen
Aufbau mit Rahmen, Menüleiste, die standardmäÿig Punkte enthält wie:
Datei, Ansicht, Extras, Update
und
Hilfe
und Statuszeile, weist das Fenster
eine im oberen Bereich angeordnete Graphik, eine Art Logo, auf und direkt
darunter einen gröÿeren Bereich für Inhalte.
Der gröÿere Inhaltsbereich enthält Reiter, die die Navigation zu den verschiedenen Ansichten erlaubt. Die Ansichten haben die Titel:
Tracking, Status, Benutzer, Bildschirme
5.2.1
und
Kameras.
Favoriten,
Favoriten
Favoriten sind häug durchgeführte Aktionen zu nden. StandardAugenmaus einschalten und ausschalten, wechseln in einen
experimentellen Modus, der momentan mit Nasenmaus bezeichnet wird und
Unter
mäÿig sind dies
ob bei der Augenmaus nur das linke, nur das rechte, oder beide Augen in die
Berechnungen einieÿen sollen. Bei der Nasenmaus wird lediglich der Kopf
für die Berechnung der Mauszeiger-Position verwendet. Die Nase wird quasi
wie bei Pinocchio verlängert und an der Stelle an der die Nase den Bildschirm
berühren würde bendet sich der Mauszeiger.
5.2.2
Tracking
In der Ansicht
Tracking
werden die momentanen Trackinginformationen,
also wo sich die Augen, die Kameras und der Bildschirm benden, also die
Live-Situation des Maus-Systems, als Gittermodell angezeigt. Die ktive
Kamera, die dieses Szenario erfasst, soll im Übrigen nach belieben positioniert werden können, so dass man die graphischen Ergebnisse aus beliebigen
Blickwinkeln betrachten kann. Möglich wären auch ein paar Standardperspektiven, zwischen denen man hin und her wechseln kann, da vielleicht nicht
alle Blickwinkel auf ein gegebenes Szenario sinnvoll sind.
KAPITEL 5.
5.2.3
Unter
BENUTZEROBERFLÄCHE
32
Status
Status wird angezeigt, ob alle nötigen Vorkehrungen getroen wur-
den, damit das System lauähig ist. Gibt es ein Problem mit einer Einstellung, so wird dies hier deutlich und der Benutzer kann das Problem von hier
aus angehen.
5.2.4
Benutzer
Der Reiter
Benutzer
erlaubt eine Benutzerverwaltung, wobei das Ein-
richten und Speichern eines Benutzers nicht zwingend erforderlich ist, jedoch
bessere Tracking-Ergebnisse liefern kann. Ist ein Benutzer ausgewählt, so
werden die ihn betreenden Daten angezeigt.
5.2.5
Unter
Bildschirme
Bildschirme kann man zunächst einen, später jedoch mehrere Bild-
schirmächen denieren, die der Mauszeiger-Positionierung dienen sollen. Es
wäre zum Beispiel möglich zwei Bildschirme nebeneinander zu stellen und je
nachdem auf welchen Bildschirm ein Benutzer schaut, der Mauszeiger entweder auf dem einen oder dem anderen positioniert wird.
Die Datendarstellung zu den erfassten Bildschirmen, ihre Auösung, Gröÿe,
Position im Raum und das Hinzufügen und Löschen von Bildschirmen erfolgt
hier.
5.2.6
Kameras
Als Letztes können unter der Ansicht
Kameras
die jeweiligen Daten zu
den Kameras eingesehen werden, sowie eine Neukalibrierung durchgeführt
und andere die Kameras betreende Einstellungen vorgenommen werden.
5.2.7
Die Benutzeroberächen-Hilfe
Zu allen Ansichten des Hauptfensters gibt es neben der üblichen HilfeDatei jeweils eine Oberächen-Hilfe, die kurz und präzise erläutert, welche
Optionen dem Benutzer durch die aktuelle Ansicht geboten werden.
Alle Einstellungen können im Menü, über die Option
oder geladen werden. Über die Option
Update
Datei,
gespeichert
soll dem Benutzer eine einfa-
che Möglichkeit geboten werden, die Software zu aktualisieren. Unter
Extras
33
KAPITEL 5. BENUTZEROBERFLÄCHE
sollen unter anderem Einstellungen zur verwendeten Sprache innerhalb der
Software und zum Verhalten der Software in Bezug auf automatisches Starten mit dem Betriebssystem, Abschalten von Maus-System-Nachrichten und
dergleichen.
KAPITEL 5.
BENUTZEROBERFLÄCHE
34
Kapitel 6
Das Modell
Das Modell soll veranschaulichen wie die Blickrichtungsbestimmung prinzipiell funktionieren soll. Es zeigt auf, von welchen Annahmen ausgegangen
wird, welche Vereinfachungen vorgenommen wurden und letzten Endes wie
die Berechnung praktisch ablaufen soll.
Zunächst wird das sehr einfache theoretische Modell beschrieben, welches
unter bestimmten, leider unmöglichen, Umständen ausreichen würde, um das
Problem der Blickrichtungsbestimmung und Mauszeiger-Positionierung zu
lösen.
Daraufhin wird versucht, das notwendigerweise komplexere Modell einfach
zu beschreiben. Auf möglicherweise auftretende Probleme wird in diesem
Bereich nicht näher eingegangen.
6.1 Die einfache Theorie
Stellen Sie sich vor, ihre Augen wären Laserpointer und der Bildschirm
wäre sensitiv für das aus Ihrem Auge austretende Licht. Somit wüsste der
Bildschirm immer genau wo Sie hinschauen.
Um etwas mathematischer zu werden, sagen wir der Bildschirm wäre eine
Ebene im Raum, die durch ihre vier Eckpunkte genau gegeben ist. Und aus
den Augen tritt nun kein Lichtstrahl mehr, sondern ein Vektor, also ein Pfeil,
der im optischen Augendrehpunkt beginnt und genau mittig durch die Iris
aus dem Auge heraus zeigt. Zusätzlich meldet das Auge permanent, wo es
sich gerade im Raum bendet und in welche Richtung dieser Blick-Vektor
zeigt.
Unter diesen Umständen lässt sich das Problem recht einfach vektor-algebraisch
lösen, indem man den Schnittpunkt einer Geraden, nämlich der Blickgeraden,
35
KAPITEL 6.
DAS MODELL
Abbildung 6.1:
36
Minimal-Problem. Diese Abbildung zeigt wie einfach das
Problem zu lösen wäre, wenn das Auge ein Signal versenden würde, welches
genaue Angaben über dessen Orientierung im Raum machte.
mit einer Ebene, nämlich dem Bildschirm, bestimmt. Existiert so ein Schnittpunkt, dann ist dies die Mauszeiger-Position, existiert keiner, so schaut der
Benutzer nicht auf den Bildschirm.
Die Probleme hierbei liegen auf der Hand: Der Bildschirm weiÿ nicht automatisch wo er sich im Raum bendet. Und das Auge teilt erst recht nicht die
aktuelle Position und Blickrichtung mit. Diese Daten gilt es also zu ermitteln.
6.2 Die nicht so einfache Praxis
Wie schon erwähnt ist die Lösung zur Bestimmung der Blickrichtung und
der Mauszeiger-Position nicht so einfach wie das eben dargestellte Modell.
Der Bildschirm ist ein relativ einfach zu erfassendes Gebilde, seine Position
und Gröÿe sind durch die vier Eckpunkte eindeutig gegeben. Wenn man diese
also einmal bestimmt hat, brauchen diese Daten nicht mehr ermittelt werden.
Der Kopf, hingegen dessen Position, stellvertretend für die Position der Augen, ständig ermittelt werden soll, abgesehen davon, dass sich je zwei Köpfe
grundsätzlich, bis auf die Anordnung der Augen, Nase, et cetera unterscheiden, ist ein recht komplexes Gebilde, wenn man von Rechtecken, Kugeln und
Quadern als einfache Gebilde ausgeht.
Es gilt also die Komplexität des Kopfes beziehungsweise des Gesichtes soweit
wie möglich zu reduzieren und dennoch eine Aussage treen zu können, wo
sich das Gesicht im Raum bendet.
37
KAPITEL 6.
DAS MODELL
Als Repräsentation des Gesichts kann ein Dreieck gewählt werden, welches
zum Beispiel durch die beiden Augeninnenwinkel und die Nase gebildet wird.
Wenn man sich dieses Dreieck als tatsächlich vorhandenes, zum Beispiel aus
Karton gefertigtes Dreieck, vorstellt, welches auf das Gesicht in eben beschriebener Position geklebt wird, so stellt man fest, dass es egal ist, wie
der Kopf bewegt wird. Solange man es nicht darauf anlegt, bewegt sich das
Dreieck immer mit und bleibt immer an der gleichen Stelle und ist somit zur
Repräsentation des Gesichtes geeignet.
Rekapitulieren wir also kurz: Wir wissen wo die Bildschirmebene ist und
wir wissen wo das Dreieck, stellvertretend für der Kopf, und somit auch wo
die optischen Augendrehpunkte sind.
Nun gilt es die relativ zum Kopf beweglichen Augen, beziehungsweise deren
Pupillen zu nden. Mittlerweile müssen also fünf Punkte im Gesicht bestimmt
werden, drei für das Dreieck und jeweils einer für jedes Auge.
Wenn man nun weiÿ, wo sich das Dreieck bendet, kann man über dieses
zu den theoretisch fest verankerten, optischen Augendrehpunkten gelangen
und von diesen, durch die Pupillen in Blickrichtung, einen Schnittpunkt mit
der Bildschirmebene bestimmen.
Für das Finden des Gesichtsdreieckes soll eine Kamera eingesetzt werden. Da
eine einzelne Kamera zur Berechnung der räumlichen Position von Punkten
nicht ausreicht, wird eine zweite hinzugezogen.
Jede Kamera liefert ein geringfügig anderes Bild als die jeweils andere Kamera. Da die Kameras kalibriert und untereinander unbeweglich montiert sind
ist es bei vorausgehender Bildverarbeitung möglich, die Position der fünf notwendigen Gesichtspunkte im Raum zu bestimmen.
Der optische Augendrehpunkt im Verhältnis zum Gesichtsdreieck sowie die
Position des Bildschirmes in Bezug auf die Kameras werden in einer Kalibrierungsphase ermittelt und stehen zur Verfügung, so dass alle zur Berechnung
des Blickpunktes auf dem Bildschirm notwendigen Daten vorhanden sind.
KAPITEL 6.
DAS MODELL
38
Kapitel 7
Maus-System Produkt-Struktur
In diesem Abschnitt des Handbuches werden die implementierten C++
Funktionen detailliert beschrieben. Wenn Sie sich als Programmierer für die
Funktionen interessieren, sollten Sie vielleicht eher den ausführlich beschriebenen Referenzteil sichten.
7.1 Stereo-Kamera-Kalibrierung
Die hier verwendete Methode basiert auf der Methode von Zhang [1, 2].
Ein Schachbrett von bekanntem Ausmaÿ wird als planare Ebene in Bildern
der Kamera gesucht. Die Registrierung der Bilddaten ergibt dann intrinsische
Kameraparameter, wie die Position des Bildmittelpunktes und der radialen
Verzerrungskoezienten und extrinsischen Kameraparameter, insbesondere
wie die Kameras zueinander angeordnet sind.
7.1.1
Kalibrierung mit Hilfe von OpenCV
Eine Kamera Kalibrierung mit OpenCV zu realisieren ist nicht sehr umständlich, sobald man einigermaÿen nachvollzogen hat, wie es funktioniert.
In dem von mir implementierten Ansatz werden Stereo-Bilder von den beiden
Kameras geholt, bis der Benutzer auf eine Taste drückt. Ist dies geschehen
werden die Bilder angehalten und das Schachbrettmuster sollte in beiden Bildern der Kameras ganz zu sehen sein.
Die Funktion
cvFindChessBoardCornerGuesses()
versucht unterdessen ein
Schachbrettmuster zu nden. Und die gefundenen Pixel-Positionen der Ecken
der inneren Felder werden mit
cvFindCornerSubPix()
noch optimiert.
Dra-
wEtalon() zeichnet die gefunden Ecken ein, so dass der Benutzer sehen kann
ob alle Ecken richtig gefunden wurden. Ist dies nicht der Fall, so kann er das
39
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
40
Bild verwerfen und ein neues Stereo-Bild von den Kameras holen.
Ein korrekt gefundenes Schachbrettbild wird ebenfalls verworfen, lediglich die
Positionsdaten der Inneren und äuÿeren Ecken des Schachspielfeldes werden
gespeichert.
Hat der Benutzer sieben bis zehn gute Stereo-Bilder von dem Muster ge-
run_calibration() ausgeführt, welches im Wesentlichen die FunkcvCalibrateCamera2(), cvFindExtrinsicCameraParams2() und cvFindFundamentalMat() und zum Beispiel auch cvRodrigues2() aufruft.
Die Ergebnisse werden mittels cvWrite() in eine Datei geschrieben.
macht, wird
tionen
Der weiter interessierte Leser sei an dieser Stelle auf die Beispieldatei zur
Kamera Kalibrierung im OpenCV Programmverzeichnis verwiesen.
7.2 Augen-Maus
Die Softwarekomponente Augen-Maus besteht ihrerseits aus mehreren
Teilen, die sich entweder durch ihren Algorithmus oder, weil sie häuger
wiederverwendet werden, von den anderen unterscheiden.
7.2.1
Tracking
Beim Tracking geht es darum immer wieder die gleichen gesuchte Merkmale, in unserem Fall die fünf Gesichtspunkte, in Bildern einer Bildsequenz
zu nden. Dies soll in einigen Zwischenschritten erreicht werden, welches in
diesem Kapitel näher erläutert wird.
Erzeugung des Stereo-Bildes
Für die Berechnung der räumlichen Koordinaten eines Objekts, dessen
Gröÿe man nicht kennt, kann man zwei oder mehr Kameras einsetzen. Hier
werden zwei Kameras eingesetzt. Für die genaue Berechnung ist es wichtig,
dass die Bilder der zwei Kameras genau gleichzeitig gemacht werden. Dieses
ist bei Computern im Allgemeinen nicht möglich. Darum muss unbedingt
darauf geachtet werden, dass die Bilder, so kurz wie nur möglich, direkt
hintereinander gemacht werden.
OpenCV bietet hierfür die Funktion
cvGrabFrame()
an, die das aktuelle
Bild unverarbeitet zwischenspeichert, welches sehr schnell von statten geht,
so dass man mehrere Aufrufe hintereinander tätigen kann, ohne dabei viel
Zeit zu verlieren.
41
KAPITEL 7.
Mit
MAUS-SYSTEM PRODUKT-STRUKTUR
cvRetrieveFrame() werden die zwischengespeicherten Daten dann so wei-
ter verarbeitet, dass man die Bilder verwenden kann.
getStereoFrame_LLM() ist nun eine Funktion, die die oben genannte Methode für zwei Kameras einsetzt, um möglichst zeitgleiche Bilder zu bekommen.
Umwandeln des Kamerabildes in ein verwendbares Bild
Ein von einer Kamera geholtes Bild weicht bei OpenCV in seinen Eigenschaften von einem regulären Bild in OpenCV ab, besitzt jedoch den gleichen
Datentyp.
Normalerweise wird ein Bild erstellt, initialisiert und am Ende freigegeben.
Und als Verwender macht man die Annahme, dass ein normaler Zugri
darauf möglich ist, dass also links oben auch wirklich links oben ist. Aber
dem ist nicht so. Es hängt unter anderem vom Betriebssystem ab, ob das
Bild nicht doch auf dem Kopf steht. Das fällt einem leider zunächst nicht
auf, da ein Bild, welches auf dem Kopf steht, bei der Anzeige am Bildschirm
automatisch gedreht wird. Aber sobald man zum Beispiel auf den Pixel an der
Stelle (1,1) zugreift und stattdessen bei (Höhe-des-Bildes, 1) landet, kommt
leichte Verwunderung auf, auch wenn dieses nur die Spitze des Eisberges ist.
Man muss das von der Kamera geholte Bild also erstellen, eine Initialisierung mit Null ist nicht nötig, es darf aber auf keinen Fall freigegeben werden.
Darum kümmert sich die Kamera, von der das Bild stammt selbst. Und unter
Windows steht das Bild auf dem Kopf.
Deshalb gibt es die Funktion
setEditableImage_LLM(), die das Originalbild
der Kamera kopiert und in die erwartete Position mittels Spiegelung an der
Horizontal-Achse bringt.
Bild-Entzerrung
Ein Punkt, den man gerade als Anfänger gerne vergisst, ist die Tatsache,
dass Bilder von einer Kamera, abhängig von den Eigenschaften der Linse,
verzerrt sind.
Ohne die vorherige Entzerrung - und darauf möchte ich hier ausdrücklich
hinweisen - ist ein Stereo-Bildpaar nicht zur Bestimmung der räumlichen
Koordinaten geeignet!
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
Glücklicherweise bietet OpenCV hierfür die Funktion
42
cvUndistort2()
an,
die eine schnelle Entzerrung garantiert, auch wenn es zunächst nicht ganz
leicht zu verstehen ist, welche Parameter diese Funktion in welchem Format
haben möchte, und dass diese Parameter aus der Kamera-Kalibrierung hervorgehen.
setUndistortedImage_LLM()
distort2().
ist im Grunde die gleiche Funktion wie
cvUn-
Es sei an dieser Stelle nochmal kurz darauf hingewiesen, dass jede Kamera
individuell kalibriert werden muss, da selbst zwei Kameras gleichen Typs nie
genau baugleich sind!
Finden des Gesichts
Im Bild von der Kamera sind viel zu viele Daten enthalten. Im Grunde
möchten wir zum Beispiel nur wissen, welche Koordinaten ein Auge im Bild
hat, also nur ein (x,y)-Wert.
Stattdessen haben wir ein Bild mit 640 x 480, also 307.200 Pixel mit jeweils
drei Farbwerten, also 921.600 Werte!
Es gilt somit die Informationsfülle zu reduzieren. Ich möchte das in überschaubaren Schritten erledigen, wovon der erste Schritt das Finden des relevanten Gesichts sein soll.
Auch hierfür bietet OpenCV eine sehr zuverlässige Lösung. Auf die Methode an sich gehe ich an dieser Stelle nicht weiter ein, da es den Umfang
sprengen würde, aber die einzelnen Schritte können in der OpenCV DemoDatei
facedetect.c
gut nachvollzogen werden.
So viel sei jedoch erwähnt, die Methode basiert auf Objekterkennung mittels
Haar-Kaskaden. In unserem Fall wird also vorausgesetzt, dass eine HaarKaskade auf Gesichter trainiert wurde.
Die Funktion
setFaceImage_LLM() benutzt nun die in OpenCV bereitge-
stellte Methode, um das relevante Gesicht im Kamerabild zu nden. Da es
sein kann, dass mehrere Gesichter im Kamerabild vorhanden sind und der
Algorithmus in diesem Fall auch mehrere Gesichter ndet, wird die Annahme
gemacht, dass das relevante Gesicht am nächsten zur Kamera ist, also das
gröÿte Gesicht.
Die vereinfachte Annahme, dass das gröÿte Gesicht das relevante Gesicht
ist, bringt einige Probleme mit sich. Wenn zum Beispiel zwei Personen zusammen vor dem Bildschirm sitzen, wird der mit dem gröÿeren Kopf als
43
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
relevant angesehen oder es ndet ein ständiger Wechsel statt.
Dieses und andere damit verbundene Probleme müssen unter Umständen
nochmal angegangen werden, doch im Moment ist die einfachste gleichzeitig
die beste Lösung.
Ist also das relevante Gesicht identiziert worden, dann wird ein kleineres
Bild erstellt, welches nur das relevante Gesicht enthält und dessen Gröÿe
direkt von ihm beziehungsweise von der Nähe des Gesichtes zur Kamera
abhängt.
In diesem kleineren Bild haben wir nun zum einen die relative Gewissheit,
dass in ihm ein Gesicht - und zwar ausschlieÿlich ein Gesicht - enthalten ist,
und zum anderen haben wir die Informationsmenge schon drastisch reduziert.
Bei einer Gesichtsbildgröÿe von 120 x 120 Pixel zum Beispiel haben wir eine
Reduktion von 921.600 Werten auf 43.200 Werte - das ist ja schon mal etwas!
Finden der Pupillen
Wie schon gesagt gilt es die Fülle an Informationen aus dem ursprünglichen Bild von der Kamera zu verringern.
Das Gesicht zu nden leistet dabei schon groÿe Dienste. Nun soll die Informationsmenge durch die folgenden drei Schritte auf den benötigten (x,y)-Wert,
der die Position einer betrachteten Pupillenmitte angibt, reduziert werden:
ˆ
Anhand anatomischer Gegebenheiten wird ein gleichzeitig möglichst
kleiner und exibler Bereich geschätzt, in dem sich zur gleichen Zeit
nicht mehr als ein Auge bendet
ˆ
Anhand von Template Matching, also dem Suchen nach einem Objekt
in einem Bild anhand eines Suchmuster-Bildes, welches man Template
nennt, wird das Auge in diesem Bereich gefunden
ˆ
Anhand anatomischer Gegebenheiten und Ausnutzung der Tatsache,
dass eine Pupille relativ rund ist, wird die Pupillenmitte innerhalb des
gefundenen Auges gesucht
Pupillenbereich schätzen
Da der Gesichtsndungsalgorithmus von OpenCV gröÿeninvariant ist, erhalten wir groÿe oder kleine Gesichtsbilder. Dies gibt dem Benutzer die Möglichkeit, sich im Sichtfeld der Kameras frei zu bewegen, allerdings mit der
Einschränkung, dass sein Gesicht stets den Kameras zugewandt sein muss,
welches aber kein Problem darstellt, da die Kameras unter dem Bildschirm
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
44
positioniert sind und der Benutzer in den relevanten Situationen auf den
Bildschirm schaut.
Des weiteren erlaubt der Algorithmus Kopfneigungen bis zu ca. 30°. Seitwärts
gedrehte Gesichter oder Gesichter auf dem Kopf werden zum Beispiel nicht
gefunden.
Da der Gesichtsndungsalgorithmus homogene Bilder dieser Art liefert,
verlässt ein betrachtetes Auge nie einen gewissen Bereich. Das lässt eine
weitere Eingrenzung und somit eine weitere Informationsreduktion zu.
In diesem weiter eingegrenzten Bereich bewegt sich das Auge jedoch, je nach
Kopfneigung, wie auf einem Halbkreis, wobei das Auge in der Regel zur einen
oder anderen Seite schief abgebildet wird.
Das Auge nden
Da das Auge in dem Bereich jedoch das einzige ist, was wie ein Auge
aussieht, kann seine Position mit einem Bild von einem Auge, welches als
Suchmuster dient, leicht bestimmt werden.
Mit diesem Suchmuster kann man unter anderem der Beleuchtungsvarianz,
bezogen auf den jeweiligen Standort, teilweise entgegenwirken:
Durch das zu Beginn einmalige Anlegen von Augenbildern für einen bestimmten Benutzer und ein bestimmtes Beleuchtungsszenario erhält man eine einfache Art den Algorithmus zu personalisieren und somit zu optimieren.
Damit nur ein Suchmuster angelegt werden muss wird das Bild mit dem
Bereich, in dem sich das Auge bendet, auf eine Normgröÿe gebracht. In der
gleichen Auösung ist auch das Suchmuster abgespeichert.
Das normierte Bild mit dem Pupillenbereich ist dann um so schärfer und
enthält mehr Bildinformationen, je näher sich die Person zu den Kameras
bendet.
Die Pupillenmitte nden
Nachdem das Auge gefunden wurde wird ein Bild erstellt, welches auällige Kanten, also kontraststarke Übergänge von hellen zu dunklen Bereichen,
durch weiÿe Bereiche auf schwarzem Hintergrund darstellt. Das heiÿt, dass
das Bild überall dort, wo das Augenbild Kanten aufweist, helle Bereiche mit
groÿen Zahlenwerten enthält und überall dort wo das Augenbild keine Kanten aufweist schwarze Bereiche mit kleinen Zahlenwerten enthält.
45
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
Es wird der Sobel-Algorithmus als einfacher Kantendetektor-Filter eingesetzt, da davon ausgegangen wird, dass die Pupille zusammen mit dem Augenweiÿ eine rundliche Kante erzeugt, die es zu nden gilt.
Die folgende Methode zur Findung eines Gebildes, welches am ehesten einem Kreis entspricht, ist recht clever und nicht ganz trivial.
Es wird ein Bereich angegeben, in dem der Mittelpunkt des gesuchten Kreises liegen kann. Des weiteren werden ein minimaler und maximaler Radius
festgelegt.
Diese drei Werte einzugrenzen ist auf Grund der normierten Bildgröÿe des
Pupillenbereiches und der damit verbundenen Konstanz des Augenbildes kein
Problem.
Der Algorithmus prüft nun für jeden möglichen Mittelpunkt und jeden
möglichen Radius, indem er die auf dem Umkreis liegenden Helligkeitswerte
addiert, wo der beste Kreis, also der mit der gröÿten Summe, liegt.
Das ist nicht ganz einfach, deshalb zur Veranschaulichung eine Fallunterscheidung:
Ein Kreis wird im Sobel-Bild als weiÿer Kreis auf schwarzem Hintergrund
abgebildet, wobei die weiÿen Pixel hohe, zum Beispiel 200, und die schwarzen Pixel niedrige Zahlenwerte, zum Beispiel Null, enthalten.
Sagen wir nun der aktuelle Mittelpunkt und Radius beschreibt genau den
gesuchten Kreis, dann wird der Umkreis abgelaufen, also genau der weiÿe
Kreis, und alle Zahlenwerte addiert, welche in der Summe einen groÿen Wert
ergeben, da jeder Kreispunkt weiÿ ist und somit einen hohen Zahlenwert enthält.
In einem anderen Fall, in dem der aktuelle Mittelpunkt und Radius eben
nicht den gesuchten Kreis beschreiben, sondern einen Kreis, der zum Beispiel lediglich zwei Schnittpunkte mit dem gesuchten Kreis gemeinsam hat,
ergibt die Summierung der Zahlenwerte auf dem Umkreis einen vergleichsweise kleinen Wert, da die Summanden lediglich an zwei Stellen ungleich Null
sind.
Es wird also derjenige Mittelpunkt und Radius als bester Kreis gewählt,
welcher die gröÿte Summe aufweist. Es fällt leicht, sich vorzustellen, dass
diese Verfahren auch mit unvollständigen Kreisen, zum Beispiel Halbkreisen,
funktioniert.
Eine relativ unbedeutende Sache fehlt nun noch, die aber lediglich der
Beschleunigung des Algorithmus dient. Statt, dass jedes Mal der gesamte
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
46
Umkreis abgelaufen wird, werden acht gleich verteilte Punkte auf dem Umkreis, also Kreisrepräsentanten, abgelaufen.
Man kann dann natürlich andererseits das Pech haben, dass genau an diesen
Stellen hohe Zahlenwerte zu nden sind, aber kein Kreis. Das scheint bei
dieser Anwendung aber keine groÿen Auswirkungen zu haben.
Die Funktion
setPupilCenterPoint_LLM() geht genau nach dieser hier be-
schriebenen Methode vor.
Um anstelle dem einen, sagen wir dem rechten Auge, das andere, also das
linke Auge zu nden, muss lediglich der zu Anfang gesteckte Suchbereich
anders gesetzt werden, und um ein besseres Ergebnis zu erzielen, ein anderes
Bild als Suchmuster verwendet werden.
Es ist nicht zwingend notwendig, dass jeder Benutzer Augenbilder abspeichert, aber es erzielt zuverlässigere Ergebnisse.
Ein zusätzliches Problem kann durch die relativ niedrige Auösung der
Kameras entstehen, zum Beispiel dann, wenn die Bildinformationen in dem
normierten Pupillenbereichsbild so gering sind, dass sich das gesamte Auge
nur noch als dunkler Farbeck abzeichnet. Wenn sich der Benutzer jedoch in
einem angemessenen Abstand zum Bildschirm aufhält bereitet dies bisweilen
keine Schwierigkeiten.
Wenn es nicht dem Normalzustand entspricht, können stark verdrehte Augen Probleme beim Suchen des Auges anhand des Suchmusters bereiten. Da
man aber in der Regel so auf den Bildschirm schaut, dass es angenehm ist, also ohne seltsame Verdrehungen, sollte dies zu keiner weiteren Einschränkung
führen.
Finden weiterer Punkte im Gesicht
Auÿer den Pupillen müssen mindestens noch drei weitere Punkte im Gesicht gefunden werden. Diese Punkte dienen der Bestimmung der Kopfausrichtung des Benutzers. Die Ermittlung der genauen Position des Kopfes
spielt eine wichtige Rolle bei der Bestimmung der Blickrichtung, da die Augenstellung immer auch von der Drehung und Neigung des Kopfes abhängt,
welches leicht durch einen Blick in den Spiegel und bewegen des Kopfes nachvollzogen werden kann.
47
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
Drei Punkte sind notwendig, da sie eine Ebene im Raum aufspannen aus
der ein Koordinatensystem, welches im Folgenden als Gesichtskoordinatensystem bezeichnet wird, erstellt werden kann und für die Orientierung des
Kopfes im Raum charakteristisch ist.
Gesucht sind drei, immer wieder sehr genau bestimmbare Punkte im Gesicht,
die sich auch bei einer Änderung der Mimik gar nicht oder nur kaum bewegen.
Ich habe mich für die die Punkte: Nächster Punkt des Augenweiÿes beider
Augen zur Nase und Hälfte der kürzesten Distanz zwischen den beiden Nasenlöchern entschieden.
Diese Punkte sind zwar relative unbeweglich, jedoch ist momentan noch
kein Algorithmus implementiert, der diese Punkte immer zuverlässig ndet.
Mein Ansatz war es das Finden dieser drei Punkte durch das vorherige Finden der Pupillenmitten zu vereinfachen, indem die Länge und Orientierung
der Gerade zwischen den beiden gefundenen Pupillenmitten, anatomische
Hinweise zur Lokalisierung der gesuchten Punkte liefern würde.
Da jedoch das Finden der Pupillenmitten noch nicht zuverlässig genug funktioniert, konnte darauf noch nicht zurück gegrien werden.
Zumindest die Bestimmung des Nasenpunktes funktioniert recht gut, indem die Nasenlöcher zum Beispiel durch ein Template Matching gefunden
werden können, worauf ein Bild erzeugt wirde, welches nur diese enthält, um
das Bild dann zu binarisieren, Störungen zu entfernen, die Skelette der beiden Nasenlöcher zu bestimmen und eine Linie zweischen den beiden höchsten
Punkten der Skelette zu ziehen, die halbiert wird, um den Nasenpunkt zu bekommen.
Damit andere, von der Bestimmung dieser Gesichtspunkte abhängige Funktionen trotzdem erstellt und getestet werden konnten, wurden die X- und
Y-Werte von jeweils den fünf Punkten: Augen und drei Gesichtspunkte, in
73 Stereo-Bildern von Hand notiert, welches 1460 Zahlenwerten entspricht.
Berechnung der 3D-Punkte
Die Berechnung der Position eines Objektes im Raum kann also durch
ein Pixelpaar, mit je einem Pixel aus jedem Bild eines entzerrten StereoBildpaares, und den intrinsischen und extrinsischen Daten der verwendeten
Kameras bestimmt werden.
Genau dies leistet die Funktion
stereo2World_LLM().
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
48
Sagen wir Sie haben zwei Kameras aufgestellt und kalibriert. Nun nehmen
sie ein Blatt Papier machen in die Mitte ein Kreuz und halten es so vor die
beiden Kameras, dass in beiden Bildern der Kameras nur das weiÿe Blatt
und das Kreuz zu sehen ist.
Sie machen eine Aufnahme von diesem Bildpaar und entzerren die Bilder wie
im Abschnitt
Bild-Entzerrung
beschrieben.
Wenn nun ein Algorithmus oder Sie selbst von Hand, in beiden Bildern jeweils
die X- und Y-Position des Kreuzes bestimmt, können diese vier Werte an
die oben genannte Funktion übergeben werden, welche berechnet wo sich
das Kreuz auf dem Blatt im Raum befand und diese Position anhand eines
dreidimensionalen Vektors zurück gibt.
Für die Anwendung Augenmaus, ist es notwendig die 3D-Koordinaten der
fünf Gesichtspunkte zu bestimmen. Also die Ortsvektoren der Pupillenmitte
des linken und rechten Auges und der restlichen drei Punkte, die der Bestimmung der Kopforientierung dienen.
Nachdem also die 2D-Positionen der fünf Punkte in jedem der beiden Bilder
des Stereo-Bildpaares bestimmt wurden, werden sie paarweise, also linkes Auge aus Bild1 mit linkem Auge aus Bild2, rechtes Auge aus Bild1 mit rechtem
Auge aus Bild2, und so weiter an diese Funktion übergeben, so dass am Ende nur noch fünf 3D-Positionen, im Folgenden als Gesichtsdaten bezeichnet,
weiter verarbeitet werden müssen.
7.2.2
Gesichtsmodell erstellen
Nachdem das Tracking die Gesichtsdaten erstellt hat, kann nun das Gesichtsmodell aufgebaut werden.
Das Gesichtsmodell besteht aus einem Koordinatensystem welches die Orientierung des Kopfes im Raum wiedergibt, den Koordinaten der beiden Pupillenmittelpunkte und noch zwei Vektoren auf die ich später eingehen werde.
Zunächst möchte ich eine in Abbildung 7.1 gezeigte Bezeichnung der Punkte einführen, damit die Schilderung im folgenden einfacher wird. Stellen Sie
sich vor, Sie wären der Bildschirm und blickten direkt in das Gesicht des
Benutzers, dann sähen Sie sein rechtes Auge auf der linken Seite, die Nase
natürlich in der Mitte und sein linkes Auge wäre von Ihnen aus auf der rechten Seite.
Die rechte Pupillenmitte des Benutzers, also die, die von Ihnen aus auf der
linken Seite ist, bezeichne ich nun als silberner Punkt. Die linke Pupillenmitte des Benutzers, also die, die von Ihnen aus auf der rechten Seite ist, wird
49
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
Abbildung 7.1: Merkmale im Gesicht. Diese Abbildung zeigt, wie die Bezeichnung der Merkmale gewählt wurde (von links nach rechts: silbern, grün,
blau, rot, golden).
als goldener bezeichnet. Der Punkt der im Augenweiÿ des rechten Auges des
Benutzers, also von Ihnen aus auf der linken Seite beziehungsweise dem Auge, welches den Silber-Punkt enthält, am nächsten zur Nase hin liegt, wird
mit der Farbe grün bezeichnet, sein gegenüber im Gold-Auge wird mit rot
bezeichnet und der Nasenpunkt wird mit blau bezeichnet.
Nochmal zur Kontrolle: Sie stellen sich das Gesicht des Benutzers vor, halten ein Blatt vor sein Gesicht, so dass es verdeckt ist. Nun ziehen sie das
Blatt langsam nach rechts weg. Das erste Auge, welches Sie sehen ist silbern,
dann kommt die Augeninnenseite mit Namen grün, dann kommt die Nase
mit Namen blau, dann die Augeninnenseite des zweiten Auges mit Namen
rot und zuletzt die Augenmitte des zweiten Auges mit Namen golden.
Erstellen des Gesichtskoordinatensystems
Das Gesichtskoordinatensystem wird nun auf folgende Weise erstellt: Die
X-Koordinatenachse soll von grün nach rot zeigen, also wird der Ortsvektor
von grün vom Ortsvektor von rot subtrahiert.
Die vorläuge Y-Koordinatenaches verläuft von grün nach blau, also wird
auch hier blau minus grün gerechnet.
Die Z-Koordinate soll von grün ins Kopnnere verlaufen, also aus Sicht des
Bildschirms auf den Benutzer, weg vom Bildschirm. Diese erzeugt man, indem
man den Normalenvektor zur X-Achse und vorläugen Y-Achse bestimmt.
Das Ergebnis des Vektorkreuzproduktes ist gegebenenfalls falsch orientiert
welches an einem negativen Z-Wert erkennbar und durch Multiplikation mit
minus eins behoben werden kann.
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
50
Abbildung 7.2: Verwendete Koordinatensysteme. Diese Abbildung zeigt,
welche Ausrichtung die Achsen aller verwendeten Koordinatensysteme grundsätzlich haben, wobei die Z-Achse jeweils als dünnere Linie dargestellt ist.
Verwendet werden ein Weltkoordinatensystem (KS) (a), Kamera-KS (b),
Bildschirm-KS (c) (der Bildschirm wird hier von hinten betrachtet) und
Gesichts-KS(d).
Nun ist die Z-Koordinatenachse orthogonal zur X-Koordinatenachse und zur
vorläugen Y-Koordinatenachse, welches jedoch nicht zwischen X- und YAchse gilt, so dass noch eine neue Ausrichtung der Y-Achse erfolgt.
Hierzu wird die Y-Koordinatenachse als Vektorkreuzprodukt der Z- und XAchse bestimmt, wobei wieder auf das Vorzeichen des Y-Wertes geachtet und
gegebenenfalls mit minus eins multipliziert werden muss, um die Y-Achse
richtig, also nach unten, auszurichten. Für die Wahl der Achsenausrichtung
kann Abbildung 7.2 herangezogen werden.
Eine Normierung der drei achsenrepräsentierenden Vektoren auf die Länge eins folgt ebenfalls.
7.2.3
Berechnung der Blickgeraden
Was geschieht nun mit dem Gesichtskoordinatensystem? Zur Berechnung
des Blickpunktes auf dem Bildschirm wird eine Gerade benötigt die im Folgenden mit
Line of Sight oder als LOS
bezeichnet wird und die Blickrichtung
51
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
repräsentiert.
Ähnlich zu Erde und Erdkern möchte ich den optische Augendrehpunkt als
Augenkern oder Augkern bezeichnen. Die LOS soll konstruiert werden indem
der Augkern, zum Beispiel der des silbernen Auges also der Silberkern, als
Ortsvektor dient und sich der Richtungsvektor aus Silberpunkt minus Silberkern ergibt, wobei
Silberpunkt
den Ortsvektor der Pupillenmitte des silber-
nen Auges bezeichnet.
Das ist nicht ganz einfach, also nochmal rein theoretisch: Wir wandern vom
Weltkoordinatenursprung zum Silberkern, so dass wir uns nun im inneren
des rechten Auge des Benutzers benden, drehen uns um und iegen vom
Silberkern durch den Silberpunkt in Richtung Bildschirm, bis wir mit ihm
kollidieren und somit den Blickpunkt bestimmt haben.
Eine weniger schöne jedoch anschaulichere Erläuterung bietet die folgende
Darstellung. Stellen Sie sich vor der Benutzer hat einen Schaschlikspieÿ in
seinem Auge stecken, der den Silberpunkt und Silberkern genau verbindet.
Wenn der Benutzer nun hin und her schaut, zeigt der Schaschlikspieÿ immer
in die Blickrichtung und ist somit mit der LOS identisch.
Schön und gut, aber was hat das mit dem Gesichtskoordinatensystem zu
tun? Unter der Annahme, dass es diesen relativ statischen Kern des Auges
gibt, hängt dessen Position von der Orientierung des Kopfes ab. Wenn also der Vektor vom Gesichtskoordinatenursprung zum Silber- und Goldkern
bekannt ist, welches die Benutzer-Registrierung geleistet haben sollte, kann
man mit Hilfe des gerade bestimmten Gesichtskoordinatensystem die nötige
Rotation der Kernvektoren bestimmen und vom Grünpunkt aus die Kerne
erreichen.
Die Berechnung verläuft demnach so: Bestimmen des Gesichtskoordinatensystems, laden der benutzerspezischen Vektoren der beiden Augkerne, Rotation dieser Vektoren, bestimmen der Ortsvektoren der LOS für das linke
und rechte Auge, durch Addition von grün und rotiertem Kernvektor, erstellen der Richtungsvektoren durch Silberpunkt minus Ortsvektor-Silberkern
für LOS1 beziehungsweise Goldpunkt minus Ortsvektor-Goldkern für LOS2.
Theoretisch ist das ein recht einfach zu berechnender Ansatz. Praktisch
jedoch hat sich bisher gezeigt, dass kleinste Abweichungen im Vorfeld, zum
Beispiel eine minimale Verschiebung des blauen Punktes, zu sehr groÿen Abweichungen beim Bestimmen des Blickpunktes führt, welches suggeriert, dass
man zukünftig vielleicht mehr als drei Punkte zur Bestimmung der Kopforientierung heranziehen sollte.
KAPITEL 7.
7.2.4
MAUS-SYSTEM PRODUKT-STRUKTUR
52
Blickpunktberechnung - Berechnung des Schnittpunktes der Blickgeraden mit dem Bildschirm
Da die Daten des Bildschirms von der Bildschirm-Lokalisierung in der
Punkt-Richtungsform vorliegen, was auch für die LOS gilt, besteht das Problem zunächst darin, den Schnittpunkt einer Geraden mit einer Ebene im
Raum zu bestimmen.
Dies erfolgt indem wir die Geradengleichung und Ebenengleichung einander
gleich setzen und erhalten somit ein dreizeiliges Gleichungssystem mit drei
Unbekannten, welches folglich lösbar ist.
Nachdem der Schnittpunkt mit Weltkoordinaten (X,Y,Z) in Millimetern
bestimmt wurde, wird ein Vektor von der linken, oberen Ecke des Bildschirms, also dessen (Pixel-)Nullpunkt, zum eben ermittelten Schnittpunkt
konstruiert, indem der Bildschirm-Nullpunkt von dem Schnittpunkt subtrahiert wird.
Wenn der Bildschirm parallel zur X-Y-Ebene des Weltkoordinatensystems
verliefe, könnte man nun die X- und Y-Komponente des Vektors bestimmen
und hätte somit nach einer Umrechnung von Millimetern in Pixel, die Genaue X-Y-Position auf dem Bildschirm.
Da der Bildschirm in unserem Fall jedoch schief zu den Ebenen des Weltkoordinatensystems verläuft, muss der Vektor vorher noch mittels Bildschirmkoordinatensystem rotiert werden.
Nachdem der Vektor rotiert und in einen X- und Y-Vektor geteilt wurde,
können die Längen der Teilvektoren bestimmt werden. Die Längen in Millimeter, werden daraufhin noch in Pixel umgerechnet, indem man sie mit
einem Skalierfaktor, der sich zum Beispiel für die X-Richtung durch die Division von Bildschirmbreite in Pixel durch Bildschirmbreite in Millimeter
ergibt, multipliziert.
Das Gelingen dieser Berechnung hängt maÿgeblich von der Qualität der
Bildschirm-Lokalisierung und somit von der Richtigkeit der Bildschirmebene,
der korrekten Breiten und Höhen des Bildschirms in Pixel und Millimetern
ab.
7.2.5
Mauszeiger-Positionierung
Nach der Bestimmung des Blickpunktes ist die Mauszeiger-Positionierung
ein leichtes Unterfangen. Der Befehl
SetCursorPos(10,758);,
für x=10 und
53
KAPITEL 7.
y=758, mit vorherigem
MAUS-SYSTEM PRODUKT-STRUKTUR
#include <iostream>
und
#include <windows.h>
bewerkstelligt dies unter Windows.
7.3 Bildschirm-Lokalisierung
Die Notwendigkeit einer Bildschirm-Lokalisierung steht auÿer Frage. Für
die Berechnung des Blickpunktes, muss bekannt sein, wo sich die Bildschirmäche bendet.
Dies heraus zu nden gestaltet sich komplizierter als man vielleicht denken mag. Das Hauptproblem besteht darin, dass der Bildschirm sich nicht
im Sichtfeld der Kameras bendet und somit nicht direkt ermittelt werden
kann, wo er sich in Bezug auf das Weltkoordinatensystem bendet.
Die Orientierung des Bildschirms kann also nur indirekt ermittelt werden.
Um dieses zu bewerkstelligen, kann zum Beispiel ein Spiegel herangezogen
werden. Er wird so aufgestellt, dass die Kameras den Bildschirm im Spiegel
sehen, während sie gleichzeitig auf den Spiegel aufgebrachte Markierungen
erkennen und man somit weiÿ, wo sich die Spiegelebene bendet.
Diese verfahren wurde angewendet, wurde aber insgesamt als zu komplex
empfunden, so dass nach einem sowohl mathematisch als auch methodisch
einfacheren Verfahren gesucht wurde.
Ich habe ein Verfahren gesucht, welches, ausgehend von dem bestehenden
Hardwareaufbau, mit alltäglichen Materialien zurecht kommt und welches im
Folgenden beschrieben wird.
7.3.1
Lokalisierungsvorrichtung Basteln
In Abbildung 7.3 sind einige Zwischenschritte der Beschreibung abgebildet.
Es wird versucht mit alltäglichen Gegenständen und Materialien einen Ortsvektor und Normalenvektor als Repräsentanten der Bildschirmebene zu nden.
Bei Normalenvektoren spielen auf jeden Fall rechte Winkel eine Rolle und
der einzige Büroartikel, der garantiert einen rechten Winkel hat ist das Geodreieck, zumindest solange dieses neuwertig ist. Zudem benötigen wir ein
normales Lineal, einen Stift, zwei DIN A4 Blätter und Kleber oder einen
Heftgerät.
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
54
Mit dem Lineal markieren wir zunächst die Mitte des Bildschirms am unteren Rand, wobei es darum geht sehr genau die Mitte zu bestimmen. Abbildung 7.3(a) zeigt, dass dieses gar nicht so einfach ist an den Kameras vorbei
zu kommen.
Jetzt nehmen wir eines der beiden DIN A4 Blätter und legen es quer vor
uns auf den Tisch. Das Geodreieck wird ungefähr mittig mit der langen Seite
an den unteren Blattrand gelegt. Danach ziehen wir mit dem Stift eine Linie
um das Geodreieck. Mit dem Lineal verlängern wir die Linien von den kurzen
Geodreieckseiten. Kariertes Papier kann hier sinnvoll sein, damit die Linien
auch exakt weitergeführt werden können. Wie das ungefähr aussieht zeigt
Abbildung 7.3(b).
Abbildung 7.3(c) zeigt, dass die Verbindungsgeraden C und D gezogen
werden sollen und eine Lasche E angezeichnet werden soll.
Nach dem die Figur besonders an der Kante A sorgfältig ausgeschnitten
wurde, müssen alle Kanten gerade und kräftig vorgefaltet werden, am besten
mit dem Lineal. Danach kann das Papier wie in Abbildung 7.3(d) zusammengeklebt oder -geheftet werden. Das Geodreieck passt nun genau auf die
Grundäche der Konstruktion und dient später der Stabilisierung des Ganzen.
Das würde eigentlich schon reichen, aber das Blatt ist nicht lang genug.
Es wird von den beiden Kameras noch nicht gesehen. Also nehmen wir ein
zweites DIN A4 Blatt und falten es der Länge nach in die Hälfte. Auch hier
ist eine saubere Kante gefragt. Anschlieÿend befestigen wir das Blatt an unserer Konstruktion so, dass die ganze Konstruktion, wie in Abbildung 7.3(e),
eine Höhe von genau einem DIN A4 Blatt hat.
Die Seiten können vorsichtig, durch Schneiden, verkleinert werden, welches
das Gewicht der Konstruktion verringert.
Zusätzlich werden noch zwei Markierungen gesetzt: G und F, wobei die Distanz zwischen den beiden ungefähr 7 cm betragen sollte.
So, das Basteln wäre somit erledigt!
7.3.2
Stereo-Bilder der Konstruktion erstellen
Die Konstruktion mit dem Geodreieck wird nun, wie in Abbildung 7.3(f ),
so an den Bildschirm gehalten, dass sie wie ein Dach für die Kameras ist, mit
der langen Seite des Geodreiecks auf der unteren Kante des Bildschirms und
55
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
der Nullmarkierung genau auf der vorher mittig angebrachten Markierung
am Bildschirm.
So fest gehalten wird ein Stereo-Bild aufgenommen. Danach soll direkt noch
ein Stereo-Bild aufgenommen werden, diesmal jedoch wird die Konstruktion
um 1 cm nach rechts verschoben, welches auf Grund der Linealeinzeichnungen
am Geodreick leicht zu bewerkstelligen ist.
Die aufgenommenen Bilder müssen mit den intrinsischen und extrinsischen
Kameraparametern entzerrt werden.
Die Abbildungen 7.3(g) und 7.3(h) zeigen nun ein aufgenommenes StereoBild, einmal aus der Perspektive von Kamera 2 (Abbildung 7.3(g)) und einmal aus der Perspektive von Kamera 1 (Abbildung 7.3(h)), wobei alles unwesentliche ausgeblendet wurde. Wichtig ist nur, dass man die Markierungen
F und G deutlich erkennt.
Die X- und Y-Koordinaten der G und F Markierungen in allen vier Bildern müssen nun ermittelt werden. Am schnellsten geht dies von Hand im
Programm
Paint
von Windows. Einfach das Bild önen, reinzoomen, das
Rechtecksauswahl-Werkzeug wählen und mit dem Mauszeiger über die Pixel
fahren, die aktuelle Position steht unten rechts in der Statusleiste.
7.3.3
Berechnen der Bildschirmdaten
Wenn alle vorangegangenen Schritte richtig ausgeführt wurden, lassen
sich die Bildschirmdaten nun auf folgende Weise berechnen:
Aus dem Bildkoordinaten der beiden Stereo-Bilder werden mittels der
Funktion
stereo2World_LLM() die 3D-Koordinaten der F und G Markierun-
gen berechnet. Aus der ersten Stereo-Bild wird eine Gerade erstellt, indem
F als Ortsvektor fungiert und G minus F als Richtungsvektor. Die Länge
der Geraden soll genau der Höhe eines DIN A4 Blattes entsprechen. Wurde
das durchgeführt, dann erhalten wir den ersten Ortsvektor der Ebene durch
die Addition des Vektors F und den auf die DIN A4 Höhe skalierten Richtungsvektor. Der Richtungsvektor dient gleichzeitig als Normalenvektor der
Ebene.
Für das zweite Stereo-Bild wiederholt, erhalten wir einen Zweiten Ortsvektor in die Bildschirmebene. Wir erhalten die X-Koordinatenachse des Bildschirms, indem wir den zweiten Ortsvektor vom ersten Ortsvektor in die
Ebene subtrahieren.
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
56
Die Y-Koordinatenachse des Bildschirms erhalten wir aus dem Vektorkreuzprodukt von X-Achse und Normalenvektor, die Z-Achse entspricht dem Normalenvektor.
Fehlen nur noch Breite und Höhe des Bildschirms in Millimetern und die
Angaben zur Auösung. Breite und Höhe kann man schnell Messen, die Auflösung sollte man kennen oder auf dem Desktop mit
schaften
Rechtsklick -> Eigen-
nachschauen.
Bleibt noch die Bestimmung des Bildschirm-Nullpunkt-Vektors, also des
tatsächlichen Ortsvektors des Bildschirm. Dies ist auf Grund der nun bekannten Gröÿen wie folgt zu erreichen: erster Ortsvektor addiert mit auf halbe
Bildschirmbreite skalierter X-Achsen-Vektor addiert mit auf Bildschirmhöhe
minus Geodreieckhöhe skalierter Y-Achsen-Vektor.
Das Ergebnis ist die Bildschirmebene in Punkt-Richtungsform, der Normalenvektor und die Angaben zur Höhe und Breite jeweils in den Einheiten
Millimeter und Pixel.
7.4 Benutzer-Registrierung
Bei der Benutzer-Registrierung geht es darum, die benutzerspezischen
Charakteristiken fest zu halten. Dies ist, je nach Verfahren, unter anderem
das speichern von Bildern von den Augen des Benutzers, oder der Nase, falls
Template Matching-Verfahren eingesetzt werden sollen.
Viel wichtiger jedoch sind zwei benutzerspezische Vektoren, die, Abhängig vom Gesichtskoordinatensystem, auf den Kern des rechten Auges des
Benutzers (Silberkern) oder auf den Kern des linken Auges des Benutzers
(Goldkern) zeigen.
Um dies zu ermitteln, gibt es auch hier mehrere Ansätze. Ein Benutzer
kann zum Beispiel mehrere Stereo-Bilder von sich machen, während er seinen
Kopf still hält, aber am Bildschirm ihm Bekannte Punkte anschaut, zum
Beispiel die Eckpunkte des Bildschirms.
Da bekannt ist wo sich der Bildschirm im Raum bendet, können, unter der
Annahme, dass sich alle LOS im einem relativ zum Kopf recht statischen
Punkt, dem so genannten optischen Augendrehpunkt, LOS (Blickgeraden)
von den bekannten Punkten auf dem Bildschirm durch die Pupillenmitte
konstruiert werden. Mehrere solcher Geraden schneiden sich dann theoretisch
im gesuchten Augenkern.
57
KAPITEL 7.
7.4.1
MAUS-SYSTEM PRODUKT-STRUKTUR
Einfache Benutzer-Registrierung
Auch hier lässt sich das Verfahren vereinfachen. Es werden lediglich zwei
Bilder des Benutzers benötigt, jedoch müssen diese von sehr hoher Qualität
sein und die Gesichtsdaten möglichst genau von Hand notiert werden. Der
Blickpunkt sei bekannt.
Für das erste Bild wird eine LOS erstellt. Für das zweite Bild die LOS des
ersten Bildes in einem zulässigen Bereich abgelaufen und jedes mal eine LOS
erstellt, deren Schnittpunkt mit der Bildschirmebene bestimmt wird.
Es wird die Position auf der ersten LOS gewählt, deren Schnittpunkt am
wenigsten von dem Bekannten Blickpunkt abweicht.
Unter Umständen könnte man den Kopf bei der Aufnahme der zwei StereoBilder xieren, obwohl das gegen die Benutzerfreundlichkeitsprinzipien dieses
Augenmaus-Systems sprechen würde.
7.5 Visualisierung
Die Visualisierung ist ein erst ansatzweise implementierter Teil der AugenmausSoftware, die all diese wilden Berechnungen im Hintergrund sichtbar machen soll.
Die Szene bestehend aus Bildschirm, Kameras und Benutzer, mit den zur
Laufzeit bestimmten Orientierungen, LOS und Blickpunkten, soll dabei aus
einer beliebig positionierbaren ktiven Kamera betrachtet werden können.
Man kann das Ganze also von der linken Seite, von der rechten Seite, von
oben oder von vorne betrachten, woher man auch immer gerade den besten
Blickwinkel haben mag.
7.6 Konguration der Software
Beim Kongurationsteil der Software handelt es sich momentan um einen
konzeptionellen Teil der Maus-Software. Hier geht es darum, dass der Benutzer Einstellungen vornehmen kann, die die Umgebung der Anwendung
betreen, wie zum Beispiel Helligkeitswerte.
Aber auch banale Dinge, wie ob der Benutzer möchte, dass die Software mit
dem Betriebssystem startet oder nicht.
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
58
7.7 Hilfe-System
Auch beim Hilfe-System der Benutzeroberäche handelt es sich um ein
Konzept, da es die Benutzeroberäche, so wie sie entworfen wurde, noch nicht
gibt.
Es soll, wenn es eingeschaltet ist, dem Benutzer bei auftretenden Problemen
mit der Software unter die Arme greifen, zum Beispiel darauf hinweisen, wenn
eine Kamera nicht funktioniert, oder die Beleuchtung zu schwach ist.
7.8 Software-Update
Und nun sind wir hoentlich beim letzten konzeptionellen Teil der Software angelangt: Es soll eine Update-Komponente entwickelt werden, die bei
Bedarf durch den Benutzer ausgeführt werden kann, worauf sie auf einem
Remote-Server anfragt, ob neuere Programmdateien vorhanden sind, die gegebenenfalls herungergeladen und automatisch installiert werden können.
59
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
(a) Mitte markieren
(b) Linien ziehen
(c) Verbinden
(d) Zusammenfügen
(e) Verlängern
(f ) An Mitte positionieren
(g) Sicht Kamera 2
(h) Sicht Kamera 1
Bildschirm-Lokalisierung. Diese Abbildung zeigt Zwischenschritte beim Erstellen (a-e) einer Vorrichtung, mit anschlieÿender Aufnahme von Stereo-Bildern (f-h) für die Bildschirm-Lokalisierung.
Abbildung 7.3:
KAPITEL 7.
MAUS-SYSTEM PRODUKT-STRUKTUR
60
Kapitel 8
Referenzteil
Nach zahllosen Hilfs- und Testfunktionen, wurden alle Funktionen, die
eine bestimmte Häugkeit in der Wiederverwendung aufwiesen und auf ihre Richtigkeit hin überprüft werden konnten, in einer einzigen C++ Hea-
augenmaus.h
zusammengefasst und ausführlich auf Deutsch und in
Englisch mit Hilfe von
dokumentiert. Dies soll es ermöglichen, dass
derdatei
Doxygen
die Funktionen einfach nachvollzogen und angewendet werden können. Der
Funktionsumfang wird erweitert, sobald eine zusätzlich notwendige Funktion
erstellt und getestet wurde.
Ich möchte Ihnen, lieber Leser, an dieser Stelle empfehlen sich den Referenzteil im Internet unter
http://eyebachelor.googlecode.com/files/AugenmausHilfe_deutsch.chm,
in Form einer Kompilierten-HTML-Hilfedatei anzusehen. Dort gibt es Querverweise, kleine Graken und ein übersichtliches Format.
Um das gerade erwähnte Format nicht zu verändern und dieses Dokument
nicht unnötig aufzublähen, wurde darauf verzichtet den Referenzteil hier aufzuführen.
61
KAPITEL 8.
REFERENZTEIL
62
Kapitel 9
Untersuchungen zur Eektivität
ausgewählter Funktionen
Es soll nun auf die Ergebnisse einzelner, zentraler Funktionen eingegangen
werden, um eine Aussage über deren Eektivität machen zu können.
9.1 Eektivität von setPupilCenterPoint_LLM()
setPupilCenterPoint_LLM(),
wurde das gesuchte Merkmal Pupillenmitte des rechten Auges des Benutzers
Zur Untersuchung der Eektivität der Funktion
in 73 Stereo-Bilder von Hand markiert.
Anschlieÿend wurde die Funktion auf den 73 Stereo-Bildern ausgeführt und
dabei die Abweichung von der handnotierten Position in einem Graph festgehalten (Abbildung 9.1 links).
Hierbei wurde die Soll-Position, also die von Hand notierte, mittig als grünes
Kreuz gesetzt und die jeweilige Ist-Position, in rot, mit der jeweiligen Abweichung platziert.
Abbildung 9.1 rechts zeigt, wie oft die jeweilige Position dabei getroen wurde. Die Soll-Position, wurde zum Beispiel kein einziges Mal getroen.
Angesichts dieses Ergebnisses, lässt sich deutlich feststellen, dass diese
Funktion der Anforderung, die exakte Mitte einer Pupille zu nden, nicht
gerecht wird.
Allerdings wurde festgestellt, dass die Funktion bis zum Finden des Auges,
mittels Template Matching, zuverlässig funktioniert. Abbildung 9.2 zeigt den
typischen Fall. Im gleichen Bild wird nochmals deutlich, dass die Pupillenmitte zu nden recht schlecht abschneidet.
63
KAPITEL 9.
UNTERSUCHUNGEN ZUR EFFEKTIVITÄT
AUSGEWÄHLTER FUNKTIONEN
Abbildung 9.1:
setPupilCenterPoint_LLM()
64
Vergleich. Diese Abbil-
dung zeigt, auf der linken Seite die Soll-Position (von Hand notiert) in grün
und Ist-Positionen (Ergebnis der Funktion) in rot und auf der rechten Seite,
wie die 73 berechneten Positionen verteilt sind.
Auge nden mittels Template Matching. Diese Abbildung zeigt, ein typisches Ergebnis der setPupilCenterPoint_LLM()
Funktion: Das Auge wird gut gefunden, die gefundene Pupillenmitte ist unbrauchbar.
Abbildung 9.2:
KAPITEL 9.
65
UNTERSUCHUNGEN ZUR EFFEKTIVITÄT
AUSGEWÄHLTER FUNKTIONEN
9.2 Eektivität der Augenmaus mit handnotierten Daten
Hier soll eine Aussage über die Eektivität der bestehenden Augenmaus
gemacht werden. Da das Tracking und insbesondere das Finden der Pupillenmitten nicht ausreichend gut funktioniert, wurden die gesuchten fünf Gesichtsmerkmale in 73 Stereo-Bilder, zusammen mit den jeweils betrachteten
Bildschirmpositionen, von Hand notiert.
Nach der Durchführung aller für die Augenmaus notwendigen Kalibrierungen, Lokalisierungen und Registrierungen, wurden die berechneten Werte eingesetzt um für die 73 Stereo-Bilder den Blickpunkt und somit die MauszeigerPosition auf dem Bildschirm zu berechnen, wobei das Ergebnis in einem Graphen ins Verhältnis zur tatsächlichen Blickpunkt-Position gebracht wurde.
Das ernüchternd, aber nicht mehr überraschend schlechte Ergebnis wird in
Abbildung 9.3 dargestellt.
Der Grund für dieses schlechte Ergebnis - in Abbildung 9.3(b) trit nicht
einer der 73 Blickpunkte in den Bildschirmbereich - ist vor allem darauf
zurück zu führen, dass es durchweg misslingt vernünftige Blickgerade aufzubauen.
Bei den drei Gesichtsmerkmalen, die die Gesichtsebene aufspannen, braucht
nur ein Merkmal minimal anders berechnet werden, schon verschieben sich
die Vektoren der Augkerne, was auf die Blickgeraden einen unbrauchbarmachenden Einuss hat.
KAPITEL 9.
UNTERSUCHUNGEN ZUR EFFEKTIVITÄT
AUSGEWÄHLTER FUNKTIONEN
66
(a) Blickpunkte für das rechte Auge
(b) Blickpunkte für das linke Auge
(c) Blickpunkte als arithmetisches Mittel beider Augen
Blickpunktbestimmung. Diese Abbildung zeigt den Ergebnisgraphen des Vergleichs zwischen Soll-Blickpunkt und Ist-Blickpunkt, für
das rechte (a) und linke (b) Auge und dem arithmetisches Mittel (c) beider
Augen. Der Bildschirm ist dabei als Rechteck eingezeichnet. Ein gutes Ergebnis würde in allen drei Bildern 73 rote Punkte in der Nähe des Mittelpunktes
aufweisen.
Abbildung 9.3:
Kapitel 10
FAQ
Hier sollen zukünftige Fragen und deren Antworten, die auch für andere
Leser interessant sein könnten festgehalten werden.
10.1 Allgemeine Fragen
Sind die im Rahmen dieser Bachelor-Arbeit entstandenen Artefakte inkl. des Codes frei verfügbar?
- Dieses Projekt ist unter der
GNU General Public License v3
veröentlicht,
dass heiÿt sie ist frei verfügbar wie MySQL, GCC, GIMP, et cetera.
67
KAPITEL 10.
FAQ
68
Kapitel 11
Internetquellen
11.1 Augenmaus-System
Augenmaus Blog (Deutsch, Englisch)
http://eyebachelor.wordpress.com/
Aktuelle Augenmaus Dateien, Dokumentation, et cetera (Deutsch, Englisch)
http://code.google.com/p/eyebachelor/
11.2 Kamera-Kalibrierung
Camera Calibration Tools (Englisch)
http://www.doc.ic.ac.uk/%7Edvs/calib/main.html
Usefull Links and Theory (Englisch)
http://www.vision.caltech.edu/bouguetj/calib_doc
11.3 OpenCV
Online OpenCV Library (Englisch)
http://opencvlibrary.sourceforge.net
OpenCV Yahoo Group (Englisch)
http://groups.yahoo.com/group/OpenCV
69
KAPITEL 11.
INTERNETQUELLEN
70
11.4 Nützliches
Ermöglicht Suche nach OpenCV Funktionen mit Einblick (Englisch)
http://www.koders.com
Mathematik des Kamera Modells verständlich erklärt (Englisch)
(Quelle der Abbildung 7.2)
http://www.nowpublishers.com/product.aspx?product=
CGV&doi=0600000001&section=xintroduction
Mehr über Epipolargeometrie, et cetera (Englisch)
http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/
LECT10/node3.html
Kapitel 12
Schlusswort
Die Untersuchungen haben gezeigt, dass der gegebene Aufbau nicht einmal für handnotierte Daten ausreicht, um den Blickpunkt zu berechnen und
die Mauszeiger-Positionierung somit fehlschlägt.
Groÿer Nachholbedarf, abgesehen von der graphischen Benutzeroberäche,
besteht bei der Implementierung eines funktionierenden Trackings. Gegebenenfalls müssen hochauösendere Kameras verwendet werden damit die
3D-Koordinaten genauer bestimmt werden können, sowie eine ausgefeiltere
Kopfrepräsentation konzipiert werden damit sie nicht so sehr von einem einzelnen Merkmal abhängig ist.
Die Benutzer-Registrierung könnte zudem Anfangs einmalig statisch von einer separaten Kamera durchgeführt werden, um bessere Vektoren zu den
jeweiligen optischen Augendrehpunkten zu generieren.
Wenn sich herausstellt, dass die Varianz in den Positionen der optischen Augendrehpunkte einen zu hohen Einuss auf das Ergebnis hat, muss unter
Umständen ein grundsätzlich anderer Ansatz in Erwägung gezogen werden,
der eventuell weg von LOS-Vektoren geht...
...mir fällt da gerade was ein ;-)
Vielen Dank, für Ihr entgegengebrachtes Interesse!
71
KAPITEL 12.
SCHLUSSWORT
72
Kapitel 13
Glossar
Augenmaus - Die Soft- und Hardware, die es dem Benutzer ermöglicht den
Mauszeiger mit dem Blick zu steuern.
LOS - Line of Sight (Blickgerade).
Maus-System
- Die Soft- und Hardware, die es dem Benutzer ermöglicht
den Mauszeiger mit dem Blick zu steuern und jene, die eine Kalibrierung
und/oder Konguration des Ganzen ermöglicht.
Stereo-Bild
- Das sind zwei Bilder der gleichen Szene, zur gleichen Zeit,
aber aus einer zu einander leicht verschobenen Perspektive.
Stereo-Kamera - Ist der Apparat, der es ermöglicht Stereo-Bilder aufzunehmen, in unserem Fall bestehend aus zwei Web-Kameras, die unter einander
fest montiert sind.
73
KAPITEL 13.
GLOSSAR
74
Kapitel 14
Erklärung
Ich erkläre, dass das Thema dieser Arbeit nicht identisch ist mit dem Thema
einer von mir bereits für ein anderes Examen eingereichten Arbeit.
Ich erkläre weiterhin, dass ich die Arbeit nicht bereits an einer anderen Hochschule zur Erlangung eines akademischen Grades eingereicht habe.
Ich versichere, dass ich die Arbeit selbständig verfasst und keine anderen
als die angegebenen Quellen benutzt habe. Die Stellen der Arbeit, die anderen Werken dem Wortlaut oder dem Sinn nach entnommen sind, habe ich
unter Angabe der Quellen der Entlehnung kenntlich gemacht. Dies gilt sinngemäÿ auch für gelieferte Zeichnungen, Skizzen und bildliche Darstellungen
und dergleichen.
Ort, Datum
Unterschrift
75
Index
Auswertung Augenmaus-System
Eektivität, 65
Hardware
selbst zusammenbauen, 11
Kamera-Kalibrierung,
siehe Stereo-Kamera-
Kalibrierung
Software
Bezugsquelle, 69
Dokumentation, 61
Struktur im Detail, 39
Stereo-Kamera-Kalibrierung
Methode, 39
Schritt-für-Schritt-Anleitung, 18
Tracking
Ablauf im Detail, 40
Eektivität, 63
76
Literaturverzeichnis
[1] Z. Zhang,
A exible new technique for camera calibration. IEEE Transac-
tions on Pattern Analysis and Machine Intelligence, vol. 22, no. 11, pp.
1330-1334, 2000.
Flexible Camera Calibration By Viewing a Plane From Unknown Orientations. International Conference on Computer Vision (IC-
[2] Z. Zhang,
CV'99), Corfu, Greece, pp. 666-673, 1999.
[3] W. Burger, M.J. Burge,
Digitale Bildverarbeitung. Springer-Verlag, Ber-
lin, Heidelberg, 2. Auage, 2006.
77