In diesem Abschnitt der Arbeit werden die Hauptfunktionen der GUI vorgestellt und erklärt.
Beim Design der GUI wurde besonders darauf geachtet, dass die GUI übersichtlich und leicht zu benutzen ist.
Daher können verschiedene Funktionen sowohl mit der Tastatur, als auch über Buttons aktiviert werden, je nachdem wie es dem Nutzer am besten gefällt.

Die GUI wurde zudem so entworfen, dass die Annotation möglichst automatisch erfolgen kann. Der Nutzer muss die automatischen Annotationen dann nur noch leicht anpassen.
Das ist möglich, da im Prozess des maschinellen Lernens das verwendete unfertig trainierte System recht schnell schon Vorhersagen darüber treffen kann, wo sich auf 
einem neuen Bild vermutlich Objekte befinden. Diese Vorhersagen werden in dieser Arbeit als Vorabannotationen bezeichnet.
Für diesen Zweck enthält die GUI einen Client, der über ein Netzwerk (z.B. Internet) nach Vorabannotationen fragen kann.
Dabei wird das Bild an einen Server gesendet, welcher mit dem lernenden System kommuniziert. 
Der Server antwortet schließlich mit einem segmentierten Bild, auf dem alle Pixel mit der gleichen Farbe zu einem erkannten Objekt gehören.
Aus diesem Bild extrahiert der Client dann die Eckpunkte der Objekte.
Auf diese Weise muss der Nutzer der GUI nur noch die erkannten Objekte anpassen. Dafür benötigt die GUI also nicht nur Funktionen zur Erstellung von Annotationen, 
sondern auch Funktionen zur nachträglichen Veränderung von Annotationen.

Um eine leicht benutzbare GUI zu entwerfen, müssen die verschiedenen grafischen Oberflächen gut strukturiert und durchdacht sein.
Wenn es zum Beispiel zu viele verschiedene Knöpfe oder zu viele verschiedene Oberflächen gibt, dann verliert der Nutzer sehr schnell den Überblick.
Wenn es aber zu wenig verschiedene Oberflächen gibt, dann ist die Steuerung oft zu kompliziert, da alle Funktionen auf einer Oberfläche angeboten werden müssen.
Die im Rahmen dieser Arbeit entworfene GUI bietet für folgende Funktionen eigene Oberflächen:

\begin{compactenum}[(i)]
 \item Das Erstellen und Verändern von annotierten Objekten (Hauptoberfläche \ref{sec:hauptansicht})
 \item Das Erstellen von Masken für die Kameras (Maskenoberfläche \ref{sec:maskenansicht})
 \item Das Zuweisen von Objekt-IDs für dieselben Objekte auf unterschiedlichen Bildern (Objekt-Zuweisungsoberfläche \ref{sec:objektZuweisungsansicht})
 \item Das Verwalten von verschiedenen Objektklassen, welche in einer Sequenz annotiert werden sollen (Klassenoberfläche \ref{sec:klassenAnsicht})
\end{compactenum}
In den folgenden Abschnitten wird auf das Design dieser Oberflächen näher eingegangen und es werden ihre Funktionalitäten erläutert.

\section{Hauptoberfläche}\label{sec:hauptansicht}
Dies ist die Oberfläche, die der Nutzer beim Starten der Anwendung zu Gesicht bekommt.
Ihre volle Funktionalität erhält die Oberfläche jedoch erst, 
sobald der Nutzer eine Sequenz zum Annotieren geladen hat.
Im oberen Bereich befindet sich dafür eine Leiste mit Befehlen, wie zum Beispiel das Laden und Speichern einer Sequenz.
Auch einige Anzeigeoptionen können über diese Leiste gesteuert werden.
Die Leiste wurde dort platziert, weil es bei vielen anderen GUIs genauso gemacht wird (zum Beispiel bei den OpenOffice Anwendungen). 
Der Nutzer ist es also schon durch andere Anwendungen gewohnt in diesem Bereich eine solche Leiste vorzufinden. 
Die Oberfläche darunter ist in drei weitere Oberflächen aufgeteilt:
\begin{compactenum}[(i)]
\item Eine Arbeitsfläche \ref{sec:arbeitsansicht}
\item Einen Navigationsbaum \ref{sec:objectBaum}
\item Ein Hilfstext \ref{sec:hilfstext}
\item Eine Werkzeugpalette \ref{sec:werkzeuge}
\end{compactenum}

Die Arbeitsfläche nimmt den größten Teil der Hauptoberfläche ein, da hier die Bilder angezeigt werden, welche annotiert werden sollen.
Dabei sollen auch große originale Bilder noch gut erkennbar sein.
Links oben befindet sich die Werkzeugpalette, damit der Nutzer immer sehen kann welches Werkzeug momentan aktiviert ist und welche Werkzeuge er zur Verfügung hat.
Links unten befindet sich der Navigationsbaum, mit dem der Nutzer eine Übersicht über alle Bilder und Kameras der geöffneten Sequenz erhält.
Rechts unten befindet sich ein Hilfstext, der dem Nutzer eine Hilfestellung zum ausgewählten Werkzeug gibt.
Ein Bild hiervon befindet sich in Abbildung \ref{fig:hauptansicht}.

\graphicsfigure{bilder/hauptansicht}{Die Hauptansicht der GUI}{fig:hauptansicht}{0.75\textwidth}

\section{Arbeitsfläche}\label{sec:arbeitsansicht}
Die Arbeitsfläche ist die Fläche, mit der der Nutzer am meisten interagieren muss, da hier viele Annotationsprozesse stattfinden.
Je nach dem welches Werkzeug aus der Werkzeugpalette ausgewählt ist, kann der Nutzer hier neue Objekte erstellen, 
einzelne Eckpunkte verschieben oder löschen oder ganze Objekte kopieren.
Damit der Nutzer das korrekt tun kann, wird hier im Hintergrund das Bild aus der Sequenz angezeigt, welches gerade annotiert wird.
Auf dem Bild werden die Umrisse und Eckpunkte annotierter Objekte angezeigt. 
Dabei ist es möglich die Eckpunkte einzelner Objekte auf dem Bild auszublenden, 
um einen besseren Überblick über die anderen Objekte zu erhalten. 

Die Interaktion mit der Arbeitsfläche findet überwiegend mit der Maus statt. 
Dabei wird je nach ausgewähltem Werkzeug in grün eine Vorschau angezeigt, damit der Nutzer sehen kann, was er ändern würde.
Auf diese Weise können viele Fehler, die beim Annotieren auftreten könnten, verhindert werden, wodurch viel Zeit erspart werden kann.
In Abbildung \ref{fig:arbeitsansicht} ist die Arbeitsfläche mit der Vorschau für das Einfügen eines Objektes zu sehen.

\graphicsfigure{bilder/arbeitsansicht}{Die Arbeitsfläche der GUI}{fig:arbeitsansicht}{0.50\textwidth}

\section{Navigationsbaum}\label{sec:objectBaum}
Der Navigationsbaum dient dazu, dem Nutzer einen Überblick über die gesamte Sequenz zu verschaffen, die er momentan annotiert.
Dafür wird die Sequenz als aufklappbarer Baum angezeigt. Dadurch weiß der Nutzer, welche Bilder zu welcher Kamera gehöhren.
Durch einen Klick auf ein Bild kann der Nutzer das Bild in der Arbeitsfläche anzeigen lassen und es anschließend annotieren.
Das momentan ausgewählte Bild ist in dem Baum markiert und die Objekte auf dem Bild werden in dem Baum angezeigt.

Des Weiteren zeigt der Objektbaum dem Nutzer an, welche Bilder noch nicht fertig annotiert wurden, und welche Bilder noch nie betrachtet worden sind.
Bilder, die noch nicht betrachtet wurden, werden mit dunkelgrauem Hintergrund angezeigt.
Bilder, die noch nicht fertig annotiert sind bekommen auf der linken Seite ein Warndreieck.
Dabei wird ein Bild von der GUI genau dann als unfertig annotiert betrachtet, wenn noch keine Objekt-IDs vergeben wurden, 
oder wenn die gleiche ID ungewollt mehreren Objekten zugewiesen wurde.
In Abbildung \ref{fig:objektbaum} ist ein Beispiel mit noch nicht annotierten Bildern und unfertig annotierten Bildern zu sehen.
\graphicsfigure{bilder/objectbaum}{Der Navigationsbaum der GUI}{fig:objektbaum}{0.50\textwidth}

Mit Hilfe der rechten Maustaste kann der Nutzer auf dem Navigationsbaum ein Menü erscheinen lassen.
Dieses Menü zeigt dem Nutzer, je nach dem auf welchem Objekt der Klick erfolgt ist, spezifische Operationen.
Beim Klicken auf eine Kamera kann der Nutzer die Maskenoberfläche \ref{sec:maskenansicht} aufrufen und so die Maske der Kamera verändern.
Beim Klicken auf ein Bild kann der Nutzer manuell Vorabannotationen vom Annotationsserver abfragen.
Beim Klicken auf ein Objekt kann der Nutzer die Objekt-ID und Objektklasse festlegen oder das Objekt löschen.

\section{Hilfstext}\label{sec:hilfstext}
Unter der Arbeitsfläche wird in der GUI immer ein Hilfstext eingeblendet, 
der den Nutzer darüber informiert, auf welche Weise er die Arbeitsfläche mit dem ausgewählten Werkzeug bedienen kann.
Dies erleichtert die Bedienung der GUI für unerfahrene Nutzer.
Auch kann dadurch Zeit eingespart werden, da die unerfahrenen Nutzer einfach nur lesen müssen und nicht erst einen erfahrenen Nutzer fragen müssen.

\section{Werkzeugpalette}\label{sec:werkzeuge}
Die Werkzeugpalette dient dem Nutzer zur Auswahl der verschiedenen Werkzeuge. 
Dabei bietet jedes Werkzeug dem Nutzer eine andere Möglichkeit die Annotation einer Bildsequenz zu bearbeiten order zu erstellen.
Das momentan ausgewählte Werkzeug wird dabei mit grauem Hintergrund markiert.
Jedes Werkzeug hat ein Icon, mit dem es dargestellt wird.
Außerdem hat jedes Werkzeug einen Namen, der erscheint, falls der Nutzer über einen längeren Zeitraum mit der Maus darüber verweilt.
In Abbildung \ref{fig:werkzeuge} ist ein Bild der Wergzeugpalette.
Im Folgenden werden die verschiedenen Werkzeuge kurz vorgestellt.
\graphicsfigure{bilder/werkzeuge}{Werkzeuge der GUI}{fig:werkzeuge}{0.50\textwidth}
  
\subsection{Vergrößern}\label{subsec:vergroessern}
Dieses Werkzeug ermöglicht es dem Nutzer das momentan angezeigte Bild in der Arbeitsansicht zu vergrößern, 
so dass bestimmte Details besser erkennbar werden. Dadurch können die Objekte dann viel genauer annotiert werden.
Der Nutzer kann sich den Bereich, den er vergrößert sehen möchte, dabei selbst aussuchen, indem er diesen Bereich in der Arbeitsfläche mit der linken Maustaste markiert.

\subsection{Verkleinern}\label{subsec:verkleinern}
Dies ist das Gegenstück zum Vergrößern. Wenn man das Bild mit dem Vergrößern-Werkzeug vergrößert hat, 
kann man es mit diesem Werkzeug wieder verkleinern. Dabei wird es mit nur einem Klick auf das Werkzeug so verkleinert, 
dass wieder alles komplett sichtbar ist. Dieses Werkzeug bleibt nach der Benutzung nicht aktiviert, 
da der Nutzer das Bild nur einmal verkleinern braucht, damit wieder alles sichtbar ist.

\subsection{Nächstes Bild}\label{subsec:nächstesBild}
Dieses Werkzeug erlaubt es, zum nachfolgenden Bild in der Sequenz zu wechseln.
Genau wie beim Verkleinern-Werkzeug ist dies eine einmalige Operation, so dass das Werkzeug nicht aktiviert bleibt und direkt nach der 
Benutzung wieder das vorherige Werkzeug aktiviert ist.

\subsection{Vorheriges Bild}\label{subsec:vorherigesBild}
Mit diesem Werkzeug ist es möglich, zum vorherigen Bild in der Sequenz zu wechseln. 
Die Werkzeuge Nächstes Bild und Vorheriges Bild können auch über die Pfeiltasten aktiviert werden.
Auch dieses Werkzeug ist eine einmalige Operation.

\subsection{Objekt zerteilen}\label{subsec:objektZerteilen}
Durch die Vorabannotationen kann es vorkommen, dass zwei verschiedene Objekte fälschlicherweise als ein einzelnes Objekt erkannt werden.
In diesem Fall ist es hilfreich, wenn ein Objekt in zwei Objekte zerteilt werden kann.
Dafür gibt es dieses Werkzeug. Ist dieses Werkzeug ausgewählt, so kann der Nutzer in der Arbeitsfläche zwei 
Eckpunkte eines Objektes auswählen, an denen es zerteilt werden soll.

\subsection{Löschen}\label{subsec:löschen}
Mit diesem Werkzeug ist es möglich einzelne Eckpunkte oder ganze Objekte zu löschen.
Dafür kann man in der Arbeitsfläche einen Bereich markieren, in dem alle Eckpunkte gelöscht werden sollen. 
Entstehen dadurch Objekte mit weniger als 3 Eckpunkten, werden diese Objekte entfernt, da ein Objekt mit nur zwei Ecken kein sinnvolles Objekt darstellt.

\subsection{Verschieben}\label{subsec:verschieben}
Mit diesem Werkzeug ist es möglich die Eckpunkte der Objekte in der Arbeitsansicht zu verschieben, 
oder neue Eckpunkte einzufügen. Dabei wird der Eckpunkt, der verschoben wird, grün markiert. Befindet sich die Maus nicht nah genug an einem Eckpunkt, 
so wird an dem nächstgelegenen Randpunkt eines Objektes ein neuer Eckpunkt hinzugefügt, der dann gleich verschoben werden kann.

\subsection{Neues Objekt}\label{subsec:newObject}
Dieses Werkzeug dient dazu neue Objekte zu annotieren. Dafür kann der Nutzer jeden Eckpunkt eines Objektes der Reihenfolge nach anklicken. 
Um das neue Objekt zu vollenden kann der Nutzer einmal auf den Startpunkt klicken. 
Während dieses Prozesses wird eine Vorschau des Polygons des neuen Objektes mit grün gestrichelten Linien angezeigt, damit der Nutzer einen Fehler schnell erkennen kann.
Falls ein Eckpunkt unabsichtlich gesetzt wurde, kann er mit der rechten Maustaste wieder entfernt werden.

\subsection{Kopieren und Einfügen}\label{subsec:kopyAndPaste}
Mit diesem Werkzeug können Objekteigenschaften bildübergreifend kopiert und eingefügt werden. 
Dafür kann der Nutzer in der Arbeitsansicht zunächst ein Objekt auswählen, welches kopiert werden soll. 
Auf einem anderen Bild der Sequenz kann der Nutzer dann andere Objekte auswählen, 
die die Eigenschaften des kopierten Objektes übernehmen sollen. So lässt sich einfach die 
Objekt-ID und die Klasse der Objekte auf nachfolgenden Bildern festlegen. Der Nutzer kann auch das gesamte kopierte Objekt in ein 
anderes Bild einfügen, indem er dort auf eine leere Stelle klickt, wo sich das Objekt befinden soll. 
Während dieses Vorgangs kann der Nutzer auch das kopierte Objekt mit der rechten Maustaste drehen und es so den Bewegungen anpassen, die das Objekt in der Bildsequenz macht.
Durch dieses Werkzeug kann der Nutzer viel Zeit sparen, da nicht jedes Objekt auf jedem Bild neu annotiert werden muss.

\subsection{Verstecken}\label{subsec:verstecken}
Mit diesem Werkzeug kann man Objekte verstecken, so dass sie von den anderen Werkzeugen ignoriert werden. 
Außerdem können versteckte Objekte wieder sichtbar gemacht werden. 
Versteckte Objekte werden in der Arbeitsansicht ausgegraut angezeigt. 
Die Eckpunkte von versteckten Objekten werden nicht angezeigt.
Dieses Werkzeug ist vor allem dann nützlich, wenn sich mehrere Objekte direkt nebeneinander befinden, so dass es schwierig ist die Eckpunkte auseinanderzuhalten.

\section{Maskenoberfläche}\label{sec:maskenansicht}
Diese Oberfläche dient dem Nutzer dazu Masken für Kameras zu erstellen. 
Sie kann über den Objektbaum für eine bestimmte Kamera aufgerufen werden. 
In dieser Oberfläche kann der Nutzer schwarze oder weiße Polygone zeichnen, 
wobei in den schwarzen Bereichen später keine Objekte vorkommen dürfen. 

Beim Öffnen der Ansicht, wird die aktuelle Maske der Kamera geladen und angezeigt. 
Existiert noch keine Maske für die ausgewählte Kamera, wird eine komplett weiße Maske erstellt, da standardmäßig überall auf einem Bild Objekte sein könnten.
Um dem Nutzer das Zeichnen der Maske zu vereinfachen, wird im Hintergrund der Ansicht das erste 
Bild der Kamera aus der Sequenz angezeigt. Der Nutzer braucht also nur noch den Bereich des 
Bildes mit schwarzen Polygonen zu markieren, auf dem sich keine Objekte befinden können.

Die Angabe von Masken ist vor allem wegen den Vorabannotationen hilfreich. 
Ohne eine Maske müssten auf vielen Bildern immer wieder die gleichen fälschlicherweise erkannten Objekte per Hand gelöscht werden.
Mit einer Maske geschieht dies meist automatisch und es kann viel Zeit erspart werden.
In Abbildung \ref{fig:maskenansicht} befindet sich ein Bild der Maskenoberfläche.
\graphicsfigure{bilder/maskenansicht}{Maskenoberfläche der GUI}{fig:maskenansicht}{0.50\textwidth}

\section{Objekt-Zuweisungsoberfläche}\label{sec:objektZuweisungsansicht}
Neben dem \glq Kopieren und Einfügen\grq{ } Werkzeug, kann man die Objekt-ID eines Objektes auch mit der 
Objekt-Zuweisungsoberfläche anpassen. Diese Oberfläche ist notwendig, 
da neu vorkommende Objekte zu Beginn eine ID zugewiesen bekommen müssen und diese nicht von anderen Objekten kopiert werden kann. 
Außerdem erleichtert die Oberfläche das Zuweisen der Objekt-IDs nach einem Kamerawechsel, 
da hier weit auseinanderliegende Bilder einer Sequenz miteinander verglichen werden müssen.
Die Objekt-Zuweisungoberfläche bietet dem Nutzer daher die Möglichkeit das Objekt mit allen bereits bekannten 
Objekten zu vergleichen und so das passende Objekt zu finden.

Für diesen Zweck ist die Ansicht in zwei Teile geteilt. Links befindet sich das Objekt, 
dem die richtige ID zugewiesen werden soll und rechts befinden sich andere Objekte aus vorherigen 
Bildern zum Vergleich. Der Nutzer kann rechts ein Objekt auswählen, 
welches er vergleichen will. Dazu gibt es eine Liste mit allen Objekt-IDs. 
Wird eine dieser Objekt-IDs ausgewählt, so wird das Objekt auf dem letzten Bild mit der 
ID zum Vergleich angezeigt. 

Da die Bilder einer Bildsequenz unscharf sein können, kann es vorkommen, dass das Objekt, welches als Vergleich angezeigt wird, nicht gut zu erkennen ist.
Für diesen Fall gibt es zwei Knöpfe, um durch die Sequenz zu navigieren. Der Eine bewirkt dabei, dass das ausgewählte 
Objekt aus einem Bild weiter vorne in der Sequenz zum Vergleich angezeigt wird. 
Der Andere zeigt das Objekt auf einem Bild weiter hinten in der Sequenz an.
In Abbildung  \ref{fig:objektzuweisung} befindet sich ein Bild der Objekt-Zuweisungsoberfläche.
\graphicsfigure{bilder/objektzuweisung}{Objekt-Zuweisungsoberfläche der GUI}{fig:objektzuweisung}{0.50\textwidth}

\section{Klassenoberfläche}\label{sec:klassenAnsicht}
Diese Oberfläche dient zur Übersicht und zur Bearbeitung der verschiedenen Annotationsklassen, deren Objekte in der Sequenz annotiert werden sollen. 
Sie kann vom Nutzer im Menü der GUI unter der Kategorie Optionen geöffnet werden.
Die Oberfläche zeigt eine Liste mit allen Klassen an, die in der Sequenz vorkommen. 
Der Nutzer kann eine Klasse umbenennen, neue Klassen hinzufügen oder Klassen löschen.
Beim Löschen einer Klasse erhalten alle Objekte dieser Klasse automatisch die Klasse zugewiesen, welche sich in der Liste ganz oben befindet.
\graphicsfigure{bilder/klassenansicht}{Klassenoberfläche der GUI}{fig:klassenAnsicht}{0.50\textwidth}
