\subsection{Preprocessing}
\label{algorithmen_preprocessing}

Beim sogenannten "Preprocessing" werden die zu verarbeitenden Bilder für die Texterkennung vorbereitet, um die Qualität der erkannten Textdaten zu verbessern.

Verwendet man moderne Tesseract-Implementierungen, sind in diesen oft bereits rudimentäre Bildverarbeitungswerkzeuge verfügbar \mcite{todo}. Mit diesen Werkzeugen werden die eingespeisten Bilder -- sofern nicht bereits im richtigen Format -- automatisch für die Texterkennung vorbereitet. Ohne weitere Einstellungen zu treffen, bewirkt diese Bildverarbeitung zwar ein Umwandeln der Eingangsgrafiken in ein meist gut für Tesseract geeignetes Bild, nichtsdestotrotz ist es jedoch sinnvoll, die Bildverarbeitungsschritte individuell auf die erwarteten Eingangsdaten anzupassen, um sich den in \autoref{annahmen_bild_optimal} definierten optimalen Tesseract-Eingangsdaten anzunähern.

Die folgenden Preprocessing-Schritte basieren auf der empfohlenen Vorgehensweise zur Verbesserung der Output-Qualität laut Tesseract-Dokumentation \mcite{tessdoc}. Gemäß den obigen Annahmen werden jedoch weder perspektivische Fehler, noch ein eventuelles Rauschen korrigiert. Konkret werden folgende Bildverarbeitungsschritte verglichen:

\subsubsection{Resampling}
\label{algorithmen_resampling}

Bei Resampling wird die Bildauflösung durch "Neuabtastung" verändert. Um die für Tesseract optimale \mcite{tessdoc} Mindestauflösung von 300 dpi zu gewährleisten, muss das Eingangsbild, sofern es die Mindestauflösung unterschreitet, zunächst entsprechend vergrößert werden.

Da Tesseract auf klare und scharfe Kontraste angewiesen ist, um Text korrekt zu identifizieren, eignen sich nicht alle von ImageMagick zur Verfügung gestellten Skalierungsmethoden für die Weiterverarbeitung. Wie in Abbildung \ref{fig:algorithmen_resampling_vergleich} zu sehen, neigen einige Filter besonders beim Hochskalieren dazu, Unschärfen oder Artefakte zu erzeugen, die die Genauigkeit der Texterkennung negativ beeinflussen können.

\begin{figure}[ht]
  \centering
  \subcaptionbox
    {Original}
    {\fbox{\includegraphics[width=0.15\textwidth]{include/resampling/source.png}}}
  \hspace{0.005\textwidth}
  \subcaptionbox
    {Nearest-Neighbor}
    {\fbox{\includegraphics[width=0.24\textwidth]{include/resampling/Nearest.png}}}
  \hspace{0.005\textwidth}
  \subcaptionbox
    {Hermite}
    {\fbox{\includegraphics[width=0.24\textwidth]{include/resampling/Hermite.png}}}
  \hspace{0.005\textwidth}
  \subcaptionbox
    {Lanczos}
    {\fbox{\includegraphics[width=0.24\textwidth]{include/resampling/Lanczos.png}}}
  \caption{Ein Vergleich unterschiedlicher Resampling-Filter. Bei Anwendung des Lanczos-Filters bleiben Details und Konturen vergleichsweise gut erhalten und der Text ist gut lesbar.}
  \label{fig:algorithmen_resampling_vergleich}
\end{figure}

Nach einigen Tests hat sich gezeigt, dass Bilder, die mittels des Spline-Verfahrens oder der Hermite-Interpolation skaliert wurden, natürlich für das menschliche Auge ansprechender wirken. Tesseract jedoch profitiert stark von klaren Texten und hohen Kontrasten, weswegen diese Art des Resamplings keine ideale Basis für das Preprocessing bietet. Deswegen wird für die weiteren Schritte die Interpolation nach Lanczos für das Resampling verwendet. 

\subsubsection{Rahmen}
\label{algorithmen_rahmen}

Befindet sich Text zu nah am Rand des Bildes, kommt es vor, dass dieser nicht richtig erkannt werden kann. Ebenso kann auch ein zu großer einfärbiger Rahmen am Rand des Bildes dazu führen, dass Bildsektionen fälschlicherweise als "leer" erkannt und übersprungen werden, wodurch der zu erkennende Text nicht in die Ergebnisdaten mit aufgenommen wird.

\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=.4\textwidth]{include/bsp_rahmen_groß.png}}
  \caption{Ein im Verhältnis zur Bildgröße zu großer einfärbiger Rahmen}
  \label{}
\end{figure}

\subsubsection{Binarisierung}
\label{algorithmen_binarisierung}

Das Erzeugen eines Binärbildes ist durch Anwendung von Segmentierungsverfahren möglich. Schwellenwertverfahren (\engl{Thresholding}) bilden eine Untergruppe der Segmentierungsverfahren und werden genutzt, um Graustufenbilder Pixel für Pixel in binarisierte Ergebnisbilder mit zwei Segmenten, also einem Vordergrund und einem Hintergrund umzuwandeln. Der dazu notwendige Schwellenwert kann entweder fix definiert oder anhand von verschiedensten Algorithmen ermittelt werden. Ziel ist es, durch die Binarisierung textuelle Bildinhalte unabhängig von der eigentlichen Vorder- und Hintergrundfarbe mit ausreichendem Kontrast darzustellen. Somit ist das Texterkennungssystem in der Lage, die einzelnen Textelemente und deren Inhalte besser zu identifizieren und zu verarbeiten.

ImageMagick bietet eine Vielzahl an Thresholding-Algorithmen, deren Eignung in \autoref{vergleich} verglichen wird.

\subsubsubsection{Feste Schwellenwertmethode}
\label{thresholding_fixed}

Ein häufig für die Bildsegmentierung genutztes Verfahren ist die feste Schwellenwertmethode, auf Englisch auch "Fixed Thresholding" genannt. Bei diesem Bildverarbeitungsverfahren wird ein manuell vordefinierter Grenzwert auf einzelne Pixelwerte angewandt. Liegt der Pixelwert über dem festgelegten Schwellenwert, gilt er als Teil des Vordergrunds, andernfalls als Hintergrund. Somit können Objekte, also die einzelnen Buchstaben in den Grafikdateien, von ihrem Hintergrund getrennt werden.

Das fixe Thresholding benötigt durch seine Simplizität einen relativ geringen Berechnungsaufwand und weist daher eine hohe Performance auf. Allerdings ergibt es sich oft, dass die eigentlich bunten grafischen Elemente der Benutzeroberfläche aufgrund ihrer Helligkeit über dem Schwellenwert liegen. Dadurch werden sie, genau wie der Text, als Vordergrund wahrgenommen und die gesamte Fläche wird einfärbig. Somit kann jeglicher Text innerhalb dieser Fläche nicht vom Texterkennungssystem erkannt werden und die Qualität und Menge der erkannten Textdaten wird stark reduziert.

\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/zrs_ZAMS_windrose_002.png}}
  \hfill
  \fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/ThresholdProcessor(60\%).00.zrs_ZAMS_windrose_002.png}}}
  \caption{Anwendung des festen Schwellenwertverfahrens auf einen Beispielscreenshot. Bei einem passenden Schwellenwert und nur geringfügig verschiedenen Farbflächen ist der Textinhalt gut vom Hintergrund abgrenzbar. Der Schwellenwert  im gezeigten Bild beträgt 60 \%.}
  \label{thresholding_fixed_vergleich_gut}
\end{figure}

\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/editor_startpage_project-exist_001.png}}
  \hfill
  \fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/ThresholdProcessor(80\%).00.editor_startpage_project-exist_001}}}
  \caption{Anwendung des festen Schwellenwertverfahrens auf einen Beispielscreenshot. Bei einem falsch gewählten Schwellenwert oder komplexen UI-Elementstrukturen ist der Text nicht erkennbar. Der Schwellenwert im gezeigten Bild beträgt 80 \%.}
  \label{thresholding_fixed_vergleich_schlecht}
\end{figure}

\subsubsubsection{Adaptive Schwellenwertmethode}
\label{thresholding_adaptive}

Die adaptive Schwellenwertmethode gehört zu den halbautomatischen Schwellenwertalgorithmen. Bei diesem Verfahren wird der Schwellenwert auf Basis der lokalen Eigenschaften eines Bildbereichs angepasst, der durch die sogenannte "Blockgröße" definiert wird. Innerhalb eines Blocks wird schließlich dynamisch ein fixer Schwellenwert ermittelt. Dadurch können im Gegensatz zur \hyperref[thresholding_fixed]{festen Schwellenwertmethode} verschiedenfarbige Texte auf Hintergründen unterschiedlicher Helligkeit besser abgegrenzt werden und die Menge an erkanntem Text wird erhöht.

\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/zrs_REPORTS_EfficencyClass_009.png}}
  \hfill
  \fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/ThresholdAdaptiveProcessor(20_20).00.zrs_REPORTS_EfficencyClass_009.png}}}
  
  \caption{Anwendung der adaptiven Schwellenwertmethode auf einen Beispielscreenshot. Die Blockgröße ist gut an den Bildinhalt angepasst und alle Details bleiben erhalten. Dieses Verfahren punktet hier besonders bei den Farbigen "Energy Labels", deren Textinhalte sonst mittels keinem anderen Verfahren komplett erkannt wurden.}
  \label{thresholding_adaptive_vergleich_gut}
\end{figure}

\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/zrs_ZAMS_OLEDB-server_001.png}}
  \hfill
  \fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/ThresholdAdaptiveProcessor(04_04).00.zrs_ZAMS_OLEDB-server_001.png}}}
  \caption{Anwendung der adaptiven Schwellenwertmethode auf einen Beispielscreenshot. Die bei unangepasster Blockgröße entstehenden Artefakte schränken die Funktionsweise des Texterkennungssystems deutlich ein.}
  \label{thresholding_adaptive_vergleich_schlecht}
\end{figure}

\subsubsubsection{Dreiecks-Schwellenwertmethode}
\label{thresholding_triangle}

Das Dreiecks-Schwellenwertverfahren verwendet das Histogramm eines Bildes, um einen globalen Schwellenwert zu ermitteln. Innerhalb des Histogramms wird eine Linie vom Höchstwert (\engl{Peak}) zum Minimum gezeichnet und ermittelt die Normale mit der maximalen Länge. Dieses Verfahren erzielt die besten Ergebnisse, wenn die zu extrahierenden Elemente Intensitätswerte aufweisen, die an der Basis des ermittelten Peaks liegen. Für Screenshots von UI-Elementen mit komplexer Struktur und farblich stark variierenden Komponenten ist es eher nicht geeignet.

\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/historian_assistent_001.png}}
  \hfill
  \fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/AutoThresholdProcessor(Triangle).00.historian_assistent_001.png}}}
  \caption{Anwendung der Dreiecks-Schwellenwertmethode auf einen Beispielscreenshot. Gleichen sich die Inhalte farblich, werden einige Details extrahiert. Durch kleinste Farbvariationen im Bild weicht der Schwellenwert jedoch vom Optimum ab und die Texte sind nur schwer zu erkennen.}
  \label{thresholding_triangle_vergleich_gut}
\end{figure}

\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/driver_brpvi_offlineimport_004.png}}
  \hfill
  \fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/AutoThresholdProcessor(Triangle).00.driver_brpvi_offlineimport_004.png}}}
  \caption{Anwendung der Dreiecks-Schwellenwertmethode auf einen Beispielscreenshot. Bereits bei mäßiger Variation der Helligkeit verschwinden die ersten Details.}
  \label{thresholding_triangle_vergleich_schlecht}
\end{figure}

\subsubsubsection{Schwellenwertmethode nach Otsu}
\label{thresholding_otsu}

Bei dem Schwellenwertverfahren nach Otsu wird der globale Schwellenwert für ein Bild anhand des jeweiligen Histogramms ermittelt. Aufgrund dieser Eigenschaften funktioniert das Verfahren am besten, wenn das Histogramm des Bildes eine bimodale Verteilung aufweist, also zwei klare Spitzen hat.


\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=0.49\textwidth]{include/images_external/Bimodal-histogram.png}}
  \caption{Beispiel eines bimodalen Histogramms \mcite{bimodal-histogram}}
  \label{bimodal_histogram}
\end{figure}

Enthält ein Bild jedoch starkes Hintergrundrauschen, funktioniert die Schwellenwertermittlung nur unzuverlässig. Weist es lokale Helligkeitsunterschiede auf, wie es bei grafischen Oberflächen mit ihren unterschiedlich eingefärbten Oberflächensektionen oft der Fall ist, entstehen Dank der Bestimmung eines einzelnen globalen Wertes für das gesamte Bild ähnliche Probleme wie bei der \hyperref[thresholding_fixed]{fixen Schwellenwertmethode}.

\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/runtime_function_create_002.png}}
  \hfill
  \fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/AutoThresholdProcessor(OTSU).00.runtime_function_create_002.png}}}
  \caption{Anwendung der Schwellenwertmethode nach Otsu auf einen Beispielscreenshot. Wird ein passender Schwellenwert ermittelt, lässt sich der Text gut vom Hintergrund trennen.}
  \label{thresholding_otsu_vergleich_gut}
\end{figure}

\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/editor_windows_position_006.png}}
  \hfill
  \fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/AutoThresholdProcessor(OTSU).00.editor_windows_position_006.png}}}
  \caption{Anwendung der Schwellenwertmethode nach Otsu auf einen Beispielscreenshot. Bei komplexen Strukturen im User-Interface gehen aufgrund des globalen Schwellenwerts Details verloren.}
  \label{thresholding_otsu_vergleich_schlecht}
\end{figure}

\subsubsubsection{Schwellenwertmethode nach Kapur}
\label{thresholding_kapur}

Die Schwellenwertmethode nach Kapur, Sahoo und Wong zielt darauf ab, einen Schwellenwert zu finden, der die Entropie zwischen den Vorder- und Hintergrundregionen maximiert. 

% TODO kurzer Mathematischer Exkurs??

Dieses Schwellenwertverfahren liefert gute Ergebnisse bei Bildern mit starker Varianz der Vorder- und Hintergrundkontraste \bzw einer breiten Helligkeitsverteilung. 

\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/editor_startpage_project-exist_001.png}}
  \hfill
  \fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.editor_startpage_project-exist_001.png}}}
  \caption{Anwendung der Schwellenwertmethode nach Kapur auf einen Beispielscreenshot. Trotz der vielen verwendeten Farben wird der Inhalt gut dargestellt.}
  \label{thresholding_kapur_vergleich_gut}
\end{figure}

\begin{figure}[ht]
  \centering
  \fbox{\includegraphics[width=0.49\textwidth]{include/screenshots/worldview_zoom_steps_001.png}}
  \hfill
  \fbox{\includegraphics[width=0.49\textwidth]{\detokenize{include/results/AutoThresholdProcessor(Kapur).00.worldview_zoom_steps_001.png}}}
  \caption{Anwendung der Schwellenwertmethode nach Kapur auf einen Beispielscreenshot. Trotz der eigentlich einfach erscheinenden Oberfläche erzeugt das Verfahren Artefakte, die die Texterkennung deutlich erschweren.}
  \label{thresholding_kapur_vergleich_schlecht}
\end{figure}