Die Huffman-Kodierung ist eine verlustfreie Entropiekodierung, die eine Kompression um den Faktor $\sim{3}$ ermöglicht. Dabei ist er ein präfixfreier Code. In seiner einfachsten Implementierung werden die vorkommenden Zeichen nach ihrer Häufigkeit sortiert. Das am häufigsten vorkommende Zeichen erhält die Kodierung \code{1}, das zweithäufigste \code{01}, das dritthäufigste \code{001}, usw.
\autocap{fig:huffman} zeigt eine Huffman-Tabelle, wie sie zur Kodierung verwendet werden kann.
Herr Lausen hat nach obigem Muster die Huffman Kodierung vorgenommen. Hierbei handelt es sich um eine sehr ineffiziente Art, Huffman zu verwenden. An dieser Stelle sei auf andere Vorlesungen\footnote{\url{http://www.ziegenbalg.ph-karlsruhe.de/materialien-homepage-jzbg/cc-interaktiv/huffman/codierung.htm}} verwiesen, die dieses Thema ausführlicher behandeln.
Die \enquote{Lauflänge} an gleicher Zeichen, also die Anzahl aufeinanderfolgender gleicher Zeichen wird gespeichert. Verwendet wird dies \ua beim Fax. Aus \code{SSSSSWWWWWWWSSS} wird hierdurch \code{5 7 3}.
Bei natürlichen Bilder kann dies auch sinnvoll sein, da der Himmel \zB eine ähnliche Helligkeit besitzt (siehe \autoref{sec:jpeg}).
\section{JPEG}\label{sec:jpeg}\index{JPEG}
\ac{JPEG} ist ein Format zum Speichern \textit{natürlicher} Bilder.
Bei üblichen Bildern werden pro Pixel drei Farben (rot, grün, blau) gespeichert, wodurch sich pro Pixel ein Speicherbedarf von 24~Bit ergibt. Gute Scanner verwenden pro Subpixel sogar 16~Bit und damit 48~Bit pro Pixel.
\subsection{Konvertierung in ein geeignetes Farbmodell}\index{Farbraum}
Anstatt pro Pixel 24~Bit zu speichern, kann der RGB Farbraum auch nach YCbCr umgewandelt werden. Nehmen wir $4\times4$ Pixel:
Es wird die Helligkeit Y (für Gamma) für jedes Pixel abgespeichert, zusätzlich kommt noch 1~Byte für die Farbkomponente Cb (Blue-Yellow Chrominance) und 1~Byte für Cr (Red-Green Chrominance) hinzu.\index{YCbCr}
Wie sich aus \autoref{fig:jpeg_YCbCr} ergibt, werden somit anstatt $3\times4\times8=96$~Bit nur $6\times8=48$~Bit gespeichert, was eine Speicherverbesserung von 50\% mit sich bringt.
\autoref{fig:ycbcr_anschaulich} veranschaulicht die Unterteilung in diese Farben. Anstatt des YCbCr Farbraums wird oft auch YUV verwendet.\index{YUV}
Y ist dabei wieder die Luminanz und U und V bilden den eigentlichen Farbwert. \autoref{fig:yuv_anschaulich} veranschaulicht dies.
% Von https://www.tu-chemnitz.de/informatik/ThIS/downloads/courses/ws02/datkom/JPEG_Kompression.pdf
\begin{align*}
\hat{G}^q_{uv} = INT[\frac{G_{uv}}{q_{uv}}] \\
q_{uv} = \begin{bmatrix}
1 & 2 & 4 &\cdot&\cdot&\cdot\\
2 & 1 & 4 &\cdot&\cdot&\cdot\\
2 & 8 & 8 &\cdot&\cdot&\cdot\\
\cdot&\cdot&\cdot& 1 &\cdot&\cdot\\
\cdot&\cdot&\cdot&\cdot& 1 &\cdot\\
\cdot&\cdot&\cdot&\cdot&\cdot& 0
\end{bmatrix}
\end{align*}
In den meisten Bildern sind viele Koeffizienten nahezu 0. Setzt man diese zu 0, dann ist dies nach der Dekompression kaum bemerkbar! Weiterhin sind einige Koeffizienten wichtiger als andere!
So ist \zB die Grundhelligkeit und der Helligkeitsverlauf am wichtigsten (niedrige Frequenzen).
Weniger wichtig ist die Textur des Bildes (mittlere Frequenzen).
Sehr feine hochfrequente Details sind nahezu nicht beobachtbar und unwichtig.
Die Koeffizienten werden also durch unterschiedlich starke Quantisierung \enquote{gleich wichtig} gemacht.
Die Quantisierung erfolgt mit einer Quantisierungsmatrix $q$ (siehe Formel oben). Jeder Koeffizient der DCT-Matrix wird durch einen entsprechenden Wert (aus der Quantisierungsmatrix) geteilt.
Es gibt keine vorgeschriebenen Standardtabellen für Quantisierungsmatrizen.
Somit lässt sich die Bildqualität über die Quantisierung steuern.
Dies hat zur Folge, dass die genutzte Quantisierungsmatrix im Bild mit transportiert werden muss, um es an anderer Stelle wieder dekodieren zu können.
Dies erhöht zwar den Speicherbedarf, aber erhöht auch die Flexibilität des Standards und wird somit ohne weiteres geduldet.
Ist $q_{uv}$ überall 1, dann hat das Bild die beste Qualität, da die Amplituden unverändert bleiben.
% Stammt aus: https://www.tu-chemnitz.de/informatik/ThIS/downloads/courses/ws02/datkom/JPEG_Kompression.pdf
Die DC-Koeffizienten (Matrixinhalt an Position $1,1$) benachbarter Blöcke unterscheiden sich nur wenig und werden daher als Differenz zum Vorgängerblock übertragen.
Die Koeffizienten werden im Zick-Zack angeordnet, was gleichzeitig einer Anordnung nach Ihrer Wichtigkeit entsprechend der visuellen Wahrnehmung entspricht. \autoref{fig:jpeg_serialisierung} stellt dies dar.
Anschließend folgt eine Lauflängenkodierung der serialisierten Matrix. Das funktioniert aufgrund der langen Nullketten sehr gut. Siehe \autoref{sec:rlc} und die vorhergehende Matrix.
Wenn ein Bild mehrere Male als JPEG mit unterschiedlichen Quantisierungsmatrizen gespeichert wird, so ergeben sich Artefakte, die dem Moirè Effekt ähnlich sind.
\section{Analogien eines Bildes}
\subsection{Histogramm}\index{Histogramm}
Man kann in einem Histogramm den Mittelwert der Grauwerte, die Anzahl der Einträge, die Streuung, die Anzahl der vorkommenden Helligkeitsklassen und die Spannweite ablesen.
\medskip
\begin{Hinweis}
Zu sagen, ein \enquote{Histogramm zeige die Häufigkeiten von Grauwerten} ist falsch!
Dies wurde von Herrn Lausen \textit{mehrmals} in aller Deutlichkeit erwähnt. Korrekt ist:
\enquote{Ein Histogramm ist die Darstellung der Besetzungshäufigkeit von Helligkeitsklassen in einem Bild.}
\end{Hinweis}
\subsubsection{Histogramm bei RGB}
Die einzelnen Farbkanäle können auch dazu verwendet werden, Objekte aufgrund ihrer Farbe zu identifizieren.
Somit ergibt sich für jede der drei Farben ein Histogramm, wie in \autoref{fig:histogramm_rgb} zu sehen ist.
Dies bedeutet, dass eine Verdopplung der Helligkeit nicht gleich einer Verdopplung der wahrgenommenen Helligkeit entspricht.
Die Gamma-Korrektur spreizt die Grauwerte in dem oberen oder unteren Wertebereich und staucht sie dafür in dem jeweils anderen.
In \autoref{fig:gamma} ist eine solche Korrektur abgebildet.
Die x-Achse repräsentiert das Originalbild $I$ und die y-Achse das veränderte $I' = I^\gamma$. Bei $\gamma < 1$ wird das Bild heller, bei $\gamma > 1$ wird es dunkler. Diese Umrechnung funktioniert nur, wenn die Werte im Bereich $[0, 1]$ liegen. Somit besteht die vollständige Umrechnung aus:
Eine Kompression kann auf das Histogramm Einfluss haben. Ein Bild mit nur einem Grauwert hat nach der Dekompression plötzlich deutlich mehr Grauwerte im Histogramm. Dies liegt an der Funktionsweise von JPEG mit \ac{DCT}.
\section{LSI-Filter}\index{LSI-Filter}
In der Bildverarbeitung werden häufig \ac{LSI}-Filter verwendet (z)u deutsch \enquote{lineare Verschiebungsinvarianz}).