\subsection{Vorverarbeitung}
\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{tessdoc}. 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 ein Umwandeln der Eingangsgrafiken in ein meist gut für Tesseract geeignetes Bild. Es ist jedoch zu beachten, dass die Bildverarbeitungsschritte individuell auf die erwarteten Eingangsdaten anzupassen sind. So können die Bilddaten den in \autoref{annahmen_bild_optimal} definierten optimalen Tesseract-Eingangsdaten angenähert werden.

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 Interpolation verändert. Interpolation beschreibt die Methode, fehlende Pixelwerte zwischen bekannten Punkten mittels eines festgelegten Verfahrens zu ergänzen. Abhängig vom gewählten Verfahren ist das Ergebnis meist ein glattes und kontinuierliches Bild. Um die für Tesseract optimale Mindestauflösung von 300 dpi \mcite{tessdoc} 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 ist, 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. Durch die Aufteilung der Fehler auf mehrere Pixel bleiben Details und Konturen bei Anwendung des Lanczos-Filters vergleichsweise gut erhalten und der Text ist gut lesbar.}
  \label{fig:algorithmen_resampling_vergleich}
\end{figure}

Nach einigen Tests fällt auf, dass Bilder, die mittels des Spline-Verfahrens \mcite{briand2018theory,unser1999splines} oder der Hermite-Interpolation \mcite{seta2009digital} skaliert wurden, weiche Konturen ohne harte Farbübergänge aufweisen. Tesseract profitiert jedoch 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 \mcite{fadnavis2014image} für das Resampling verwendet.

\subsubsection{Rahmen}
\label{algorithmen_rahmen}

Befindet sich Text zu nah am Rand des Bildes, wird dieser nicht immer richtig erkannt. Ebenso kann auch ein zu großer einfärbiger Rahmen am Rand des Bildes die Texterkennung stören. Bei Rahmengrößen wie in \autoref{fig:rahmen_groß} kommt es vor, 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{fig:rahmen_groß}
\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 fest definiert oder anhand von verschiedensten Algorithmen automatisch \bzw halbautomatisch ermittelt werden. Ziel ist es, durch die Binarisierung textuelle Bildinhalte unabhängig von der eigentlichen Vorder- und Hintergrundfarbe mit ausreichendem Kontrast darzustellen. Dadurch 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, von denen in \autoref{vergleich} folgende verglichen werden:

\begin{itemize}
  \item Feste Schwellenwertmethode
  \item Adaptive Schwellenwertmethode
  \item Dreiecks Schwellenwertmethode
  \item Schwellenwertmethode nach Otsu
  \item Schwellenwertmethode nach Kapur
\end{itemize}

\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 das gesamte Bild angewandt. Liegt ein Pixelwert über dem festgelegten Schwellenwert, gilt dieser als Teil des Vordergrunds, andernfalls als Hintergrund \mcite{sahoo1988survey}. Somit können Objekte, also die einzelnen Buchstaben in den Grafikdateien, von ihrem Hintergrund getrennt werden.

Das fixe Thresholding benötigt durch den fest definierten Schwellenwert einen geringen Berechnungsaufwand und weist eine hohe Performance auf. Besonders bei Screenshotdateien kann es vorkommen, 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 können jegliche Texte innerhalb dieser Fläche nicht vom Texterkennungssystem erkannt werden und die Qualität und Menge der erkannten Daten wird stark reduziert. Der Unterschied der Ergebnisdaten ist besonders im Vergleich von \autoref{thresholding_fixed_vergleich_gut} \bzw \autoref{thresholding_fixed_vergleich_schlecht} ersichtlich.

\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 manuell festgelegte sogenannte "Blockgröße" definiert wird. Diese bestimmt die Seitenlänge des Rechtecks, innerhalb dessen  ein fester Schwellenwert ermittelt wird \mcite{sahoo1988survey}. Durch diese dynamische Berechnung 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, wie in \autoref{thresholding_adaptive_vergleich_gut} ersichtlich. Wird die Blockgröße falsch gewählt, können jedoch Artefakte auftreten, welche bei entsprechender Menge, wie im Falle von \autoref{thresholding_adaptive_vergleich_schlecht}, die Texterkennung negativ beeinflusst.

\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 die Häufigkeitsverteilung der Helligkeitswerte eines Bildes, um einen globalen Schwellenwert zu ermitteln \mcite{zack1977automatic}. Werden diese Helligkeitswerte in einem Diagramm dargestellt, spricht man von einem Histogramm, wie in \autoref{unimodal_histogram} zu sehen. Für das Thresholding wird innerhalb des Histogramms eine Linie vom Höchstwert (\engl{Peak}) zum Minimum gezeichnet und die Normale mit der maximalen Länge ermittelt. 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/images_external/unimodal-histogram.png}}
  \caption{Beispiel eines unimodalen Histogramms mit einem deutlichen Spitzenwert \mcite{unimodal-histogram}}
  \label{unimodal_histogram}
\end{figure}

\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}

Das Schwellenwertverfahren nach Otsu ermittelt einen globalen Schwellenwert durch Einteilung des Bildes in zwei Klassen (Vordergrund und Hintergrund). Dazu wird für jede Position des Schwellenwerts im Histogramm die Varianz der beiden dadurch entstehenden Klassen ermittelt. Der Schwellenwert ist dann optimal, wenn die Varianz der jeweiligen Klassen minimal ist \mcite{otsu1979threshold}. Aufgrund dieser Eigenschaften funktioniert das Verfahren am besten, wenn das Histogramm des Bildes wie in \autoref{bimodal_histogram} 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 oder weist es lokale Helligkeitsunterschiede auf, wie es bei grafischen Oberflächen mit ihren unterschiedlich eingefärbten Oberflächensektionen oft der Fall ist, wird ein Schwellenwert ermittelt, der nicht immer für alle Inhalte des Bildes optimal ist. Dank der Bestimmung eines einzelnen globalen Wertes für das gesamte Bild entstehen ähnliche Probleme wie bei der \hyperref[thresholding_fixed]{fixen Schwellenwertmethode}. Die Texterkennung liefert Ergebnisse mit geringem Informationsgehalt. Die Unterschiede zwischen den Ergebnissen für gut geeignete Bilder im Vergleich zu Bildern mit großen lokalen Unterschieden sind in \autoref{thresholding_otsu_vergleich_gut} \bzw \autoref{thresholding_otsu_vergleich_schlecht} ersichtlich.

\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 \mcite{otsu1979threshold} 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 \mcite{otsu1979threshold} 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 \mcite{kapur1985new} zielt darauf ab, einen Schwellenwert zu finden, der die Entropie zwischen den Vorder- und Hintergrundregionen maximiert. Wie in \autoref{thresholding_kapur_vergleich_gut} und \autoref{thresholding_kapur_vergleich_schlecht} zu sehen, liefert die Verwendung dieses Schwellenwertverfahrens 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}