Files
digitale-bildverarbeitung-l…/Abgabe/sections/a2.tex
2025-07-05 10:34:54 +02:00

216 lines
8.6 KiB
TeX

\newpage
\subsection{Farbanalyse}
Die Zugrundeliegende Aufgabe ist die Detektion des \glqq magischen Umhangs\grqq , der Objekte verschwinden lassen kann. Der Umhang kann durch eine einfarbige Decke modelliert werden. Sollte keine einfarbige Decke vorhanden sein, kann ebenfalls ein einfarbiges Blatt Papier zur Hilfe genommen werden.
Das Ziel des Arbeitspakets \glqq Farbanalyse\grqq\ ist es, die farblichen Eigenschaften der Szene, sowie des \glqq magischen Umhangs\grqq\ zu untersuchen. Dafür sollen die Histogramme einzelner Farbkanäle mit und ohne Umhang erstellt und analysiert werden.
\textbf{Hinweis:} Versuchen Sie von nun an die Position der Kamera nicht mehr zu verändern!
\subsubsection{RGB}
Einzelne Pixel werden durch drei Werte repräsentiert. Jeweils ein Wert $I_k(x, y) \in \{0, \ldots, 255 \}$ mit $k\in \{R, G, B\}$ beschreibt die einfallende Lichtmenge für die Farben Rot, Grün und Blau. In OpenCV werden Bilder im BGR Format repräsentiert. Die Verteilung der Farbwerte kann durch ein Histogramm dargestellt werden. Ein Histogramm
\begin{equation}
h(v) = |I_v|
\end{equation}
beschreibt die Anzahl der Menge Pixel $I_v$ im Bild, welche den Wert $v$ haben. In OpenCV kann das Histogramm mit der Funktion \textit{cv2.calcHist(image, [Kanal], None, [histSize], histRange, False)} berechnet werden. Dabei gibt \textit{histSize} die Anzahl der Intervalle und $\textit{histRange} = (0, 256)$ die obere und untere Schrank für den zu betrachtenden Wertebereich an.
Implementieren Sie in Ihren Algorithmus eine Funktion, mit dem Sie per Mausklick das aktuelle Bild speichern können. Des Weiteren soll bei Betätigung des Mausklicks ein Histogramm für jeden Farbkanal des RGB-Bilder erstellt und abgespeichert werden. Mit Hilfe des Code-Schnipsel in Code \ref{lst:Histogramm} kann ein Histogramm angezeigt oder gespeichert werden!
\begin{lstlisting}[caption={Histogrammberechnung mit \textit{matplotlib}},label={lst:Histogramm}]
import cv2
from matplotlib import pyplot as plt
channel = 0 #[0:B, 1:G, 2:R]
hist_size = 256
hist_range = [0,256]
histr = cv2.calcHist([img], [channel], None, [hist_size], hist_range)
plt.plot(histr, color = "b")
plt.xlim([0,256])
plt.savefig('the_path_to_store.png')
plt.show()
\end{lstlisting}
Nehmen Sie mit dem fertig implementierten Code ein Bild und die Histogramme in der von Ihnen präferierten Szene auf. Nehmen Sie sich darauf den \glqq magischen Umhang\grqq zur Seite und halten ihn sehr gut sichtbar vor die Kamera. Nehmen Sie auch jetzt ein Bild mit den Histogrammen auf. Die Kamera sollte sich zwischen den beiden Bildern nicht bewegen.
\paragraph*{Aufgabe 1}
Geben Sie Ihren Code an und beschreiben Sie ihn. Geben Sie nur relevante Code Bereiche an! Geben sie zusätzlich die aufgenommenen Bilder und die erstellten Histogramme an.
\lstset{caption={Farbanalyse, Aufgabe 1}}
\begin{lstlisting}
def _221_RGB(self, img, colorspectrum = "bgr"):
# Names of the colors in histogram
channels = ["b", "g", "r"]
# Calc histogram
for index, channel_name in enumerate(channels):
hist = cv2.calcHist([img], [index], None, [256], [0, 256])
plt.plot(hist, color=channel_name)
plt.xlim([0, 256])
# Save histogram, clear cache
plt.savefig(f"results/{datetime.datetime.now()
.strftime('%Y-%m-%d_%H:%M:%S')}_histogram_{colorspectrum}.png")
plt.clf()
\end{lstlisting}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_b_1.png}
\caption{Histogram B-Kanal ohne Umhang}
\label{fig:histogram-b-kanal-ohne}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_b_2.png}
\caption{Histogram B-Kanal mit Umhang}
\label{fig:histogram-b-kanal-mit}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_g_1.png}
\caption{Histogram G-Kanal ohne Umhang}
\label{fig:histogram-g-kanal-ohne}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_g_2.png}
\caption{Histogram G-Kanal mit Umhang}
\label{fig:histogram-g-kanal-mit}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_r_1.png}
\caption{Histogram R-Kanal ohne Umhang}
\label{fig:histogram-r-kanal-ohne}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_r_2.png}
\caption{Histogram R-Kanal mit Umhang}
\label{fig:histogram-r-kanal-mit}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/screenshot_1.png}
\caption{Foto ohne Umhang}
\label{fig:histogram-foto-ohne-umhang}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/screenshot_2.png}
\caption{Foto mit Umhang}
\label{fig:histogram-foto-mit-umhang}
\end{figure}
\paragraph*{Aufgabe 2}
Interpretieren Sie die Veränderungen zwischen den Histogrammen mit und ohne \glqq magischen Umhang\grqq . Verhalten sich die einzelnen Kanäle gleich? Lassen sich Bereiche in den Histogrammen herausstellen, die dem Umhang zuzuordnen sind? Diskutieren Sie Ihre Beobachtungen.
\color{blue}
Im Bild mit dem Umhang ist im Vergleich zu dem Bild ohne Umhang ein leichter Blaustich zu erkennen. Das könnte den Anstieg der Anzahl der grünen und blauen Intensitäten im Bereich 50 bis 100 erklären. Im Histogramm der Farbe rot lässt sich ein Bereich zwischen 200 und 250 erkennen, der der Umhang sein könnte. Ansonsten sehen Histogramme mit und ohne Umhang sehr ähnlich aus,
was auch zu erwarten war und erwünscht ist.
\color{black}
\subsubsection{HSV}
Erweitern Sie ihren vorherigen Code um eine Farbkonvertierung in den HSV-Farbraum. Führen Sie die Konvertierung vor Erstellung der Histogramme durch und wiederholen Sie die Schritte aus dem vorherigen Aufgabenteil.
\paragraph*{Aufgabe 3}
Geben sie die aufgenommenen Bilder und die erstellten Histogramme an.
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_hsv_H_20250630-190409.png}
\caption{Histogram H-Kanal ohne Umhang}
\label{fig:histogram-h-kanal-ohne}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_hsv_H_20250630-190511.png}
\caption{Histogram H-Kanal mit Umhang}
\label{fig:histogram-h-kanal-mit}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_hsv_S_20250630-190409.png}
\caption{Histogram S-Kanal ohne Umhang}
\label{fig:histogram-s-kanal-ohne}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_hsv_S_20250630-190511.png}
\caption{Histogram S-Kanal mit Umhang}
\label{fig:histogram-s-kanal-mit}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_hsv_V_20250630-190409.png}
\caption{Histogram V-Kanal ohne Umhang}
\label{fig:histogram-v-kanal-ohne}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/hist_hsv_V_20250630-190511.png}
\caption{Histogram V-Kanal mit Umhang}
\label{fig:histogram-v-kanal-mit}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/screenshot_20250630-190409.png}
\caption{Foto ohne Umhang}
\label{fig:histogram-foto-ohne-umhang2}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/screenshot_20250630-190511.png}
\caption{Foto mit Umhang}
\label{fig:histogram-foto-mit-umhang2}
\end{figure}
\paragraph*{Aufgabe 4}
Interpretieren Sie die Veränderungen zwischen den Histogrammen mit und ohne \glqq magischen Umhang\grqq . Verhalten sich die einzelnen Kanäle gleich? Lassen sich Bereiche in den Histogrammen herausstellen, die dem Umhang zuzuordnen sind? Diskutieren Sie Ihre Beobachtungen.
\color{blue}
Im H-Kanal ist ein guter Spike um den Wert 175 zu erkennen, nach Verwendung des Umhangs, was etwa 350 Grad entspricht und somit der
Farbe rot-orangener Bereich. Auch ein Anstieg im Bereich 0 Grad ist zu erkennen was dem reinen rot entspricht. Die Farbe rot bzw. der Umhang lässt sich also im Farbwertkanal gut erkennen. Der Sättigungs- und Helligkeitskanal sind in dieser Aufgabe eher irrelevant, da es nur um die Farbe geht.
\color{black}
\paragraph*{Aufgabe 5}
Versuchen Sie mit den gegebenen Histogrammen Wertebereiche zu finden, mit denen Sie den \glqq magischen Umhang\grqq\ segmentieren könnten. Formulieren Sie eine Regel in dem Format
\begin{equation}
\label{equ:segrule}
S_\textnormal{Umhang} = \{ I(x, y)\ |\ \\ R_\textnormal{min} < I_R(x, y) < R_\textnormal{max} \ \ \textnormal{und} \ \ \ldots \} \quad ,
\end{equation}
wobei $S_\textnormal{Umhang}$ die Binärmaske beschreibt und $R_\textnormal{min}$ und $R_\textnormal{max}$ beispielhafte Schwellwerte für den Rot-Kanal sind.
\color{blue}
Für den RGB-Raum wäre das 200-250 für den Rot-Kanal
Für den HSV-Raum wäre das 160-200 für den H-Kanal
\color{black}
\paragraph*{Aufgabe 6}
Worauf muss geachtet werden, wenn mit dem H-Kanal des HSV-Farbraums gearbeitet wird?
\color{blue}
H (Hue) ist zirkulär: Rot ist bei 0 und 360 Grad!
\color{black}