143 lines
5.7 KiB
TeX
143 lines
5.7 KiB
TeX
\newpage
|
|
\subsection{Vorverarbeitung}
|
|
Um die folgende Verarbeitung der Bilder zu vereinfachen und robuster zu gestalten, sollen Sie den Videostream mit einem Preprocessing vorverarbeiten.
|
|
Binden Sie dafür die Datei \textit{./CV-App/algorithms/invis\_cloak.py} in den Algorithmus ein, wie in der Einleitung beschrieben.
|
|
Die folgenden Aufgabenstellungen sind in den dafür vorgesehenen Funktionen zu bearbeiten.
|
|
%Erstellen Sie dafür einen neuen Algorithmus, wie in der Einleitung beschrieben.
|
|
|
|
\subsubsection{Rauschreduktion}
|
|
Jeder Farbwert eines Pixels $I_k(x, y) \in \{0, \ldots, 255 \}$ mit $k\in \{R, G, B\}$ wird auf dem Kamerasensor durch einen elektrischen Halbleiter physikalisch gemessen. Je nach Sensorqualität und Lichtbedingungen wirkt dabei ein unterschiedlich ausgeprägtes Rauschen auf die Farbwerte ein, sodass der zur Verfügung stehende Farbwert als Summe
|
|
|
|
\begin{equation}
|
|
I_k(x, y) = I^*_k(x, y) + r(x, y)
|
|
\end{equation}
|
|
|
|
aus realem Farbwert $I^*_k(x, y) $ und statistischem Rauschen $r(x,y)$ modelliert werden kann. Das Rauschen $r$ kann als normalverteilt um den Mittelwert $0$ angenommen werden. Unter den Annahmen, dass die Kamera statisch montiert ist und in der aufgenommenen Szene keine Veränderung passiert, kann der Zusammenhang
|
|
|
|
\begin{equation}
|
|
\overline{I}_{k,t}(x, y) = \lim_{N\rightarrow \infty} \frac{1}{N + 1} \sum_{n=0}^N I^*_{k,t-n}(x, y) + r_{t-n}(x, y) \stackrel{!}{=} I^*_{k,t}
|
|
\end{equation}
|
|
|
|
für die Mittelwertbildung über lange Zeiträume formuliert werden. Dabei beschreibt $t$ den Zeitpunkt, zu dem der entsprechende Wert gemessen wurde.
|
|
|
|
Um die Bildqualität zu erhöhen, soll der Einfluss von $r$ reduziert werden. Es soll dafür angenommen werden, dass die Kamera statisch ist und kaum Bewegung in zwei aufeinander folgenden Bildern vorhanden ist.
|
|
Implementieren Sie die Mittelwertbildung mit einer variablem Bildreihe $N$ (default: $N=1$) und geben Sie das Bild aus. \\
|
|
Um zu prüfen wie das Bild auf Pixelebene arbeitet, kann die Variable \textit{plotNoise} in der Funktion \textit{process()} auf \textit{True} gesetzt werden.
|
|
Es werden zwei zusätzliche Plots ausgegeben, in der ein Bildausschnitt des Zentrums vor- und nach der Rauschunterdrückung vergrößert dargestellt werden.
|
|
|
|
\pagebreak
|
|
|
|
\paragraph*{Aufgabe 1}
|
|
Geben Sie Ihren Code an und beschreiben Sie ihn. Geben Sie nur relevante Code Bereiche an!
|
|
\lstset{caption={Vorverarbeitung, Aufgabe 1}}
|
|
\begin{lstlisting}
|
|
def _211_Rauschreduktion(self, img):
|
|
self.picture_buffer.append(img)
|
|
|
|
if len(self.picture_buffer) < self.n:
|
|
# If number of buffered images < defined buffer size n,
|
|
# return current image
|
|
return img
|
|
elif len(self.picture_buffer) > self.n:
|
|
# If number of buffered images > defined buffer size n,
|
|
# remove oldest image
|
|
self.picture_buffer.pop(0)
|
|
|
|
# Reduce noise, return result image
|
|
return np.mean(self.picture_buffer, axis=0).astype(np.uint8)
|
|
\end{lstlisting}
|
|
|
|
\paragraph*{Aufgabe 2}
|
|
Nennen Sie Vor und Nachteile, wenn $N$ vergrößert werden würde. Sollte $N$ in dieser Anwendung vergrößert werden?
|
|
|
|
\color{blue}
|
|
Vorteile:
|
|
|
|
\begin{itemize}
|
|
\item Je größer die Anzahl der Bilder N, desto besser kann das Rauschen verringert werden
|
|
\item Gut für statische Szenen
|
|
\end{itemize}
|
|
|
|
Nachteile:
|
|
|
|
\begin{itemize}
|
|
\item Höherer Speicheraufwand
|
|
\item Höheres N folgt in mehr zeit um den Mittelwert zu berechnen
|
|
\item Bewegungen werden verschmiert
|
|
\end{itemize}
|
|
|
|
\color{black}
|
|
|
|
\paragraph*{Aufgabe 3}
|
|
Beschreiben Sie eine weitere Methode zur Rauschreduktion. Diskutieren Sie dabei Vor- oder Nachteile!
|
|
|
|
\color{blue}
|
|
|
|
Wiener-Filter
|
|
|
|
Vorteile:
|
|
|
|
\begin{itemize}
|
|
\item Bessere Ergebnisse als ein Mittelwert-Filter
|
|
\item Bewegungen werden nicht verschmiert, da nur ein Bild benötigt wird
|
|
\end{itemize}
|
|
|
|
|
|
Nachteile:
|
|
|
|
\begin{itemize}
|
|
\item Mathematisch aufwendiger
|
|
\item Abhängig von Annahme der Rauschart
|
|
\end{itemize}
|
|
|
|
|
|
\color{black}
|
|
|
|
|
|
\subsubsection{Histogramm Spreizung}
|
|
Pixel können in unserer Anwendung Werte von $I_k(x,y) \in \{ 0, \ldots , 255 \}$ annehmen. Dieser Wertebereich wird nicht zwangsläufig ausgenutzt. Um das zu ändern, soll eine Histogramm Spreizung auf den Helligkeitsinformationen der Pixel durchgeführt werden.
|
|
|
|
Implementieren Sie zusätzlich zur Rauschreduktion eine Histogramm Spreizung, indem sie (1) das Rausch-reduzierte Eingangsbild in den HSV-Farbbereich transformieren und (2) die Rechenvorschrift~\ref{equ:histogramm-equalization} auf den V-Kanal anwenden. Transformieren Sie das Bild dann (3) wieder in den RGB Farbraum.
|
|
|
|
\begin{equation}
|
|
\label{equ:histogramm-equalization}
|
|
I_V^{\textnormal{new}}(x,y) = \frac{I_{V}(x,y) - \min I_{V}}{\max I_{V} - \min I_{V}} \cdot 255
|
|
\end{equation}
|
|
|
|
\textbf{Hinweis:} Nutzen Sie die Befehle \textit{cv2.cvtColor(img, cv2.COLOR\_BGR2HSV)} beziehungsweise \textit{cv2.cvtColor(img, cv2.COLOR\_HSV2BGR)}.
|
|
|
|
|
|
\paragraph*{Aufgabe 4}
|
|
Geben Sie Ihren Code an und beschreiben Sie ihn. Geben Sie nur relevante Code Bereiche an!
|
|
\lstset{caption={Vorverarbeitung, Aufgabe 4}}
|
|
\begin{lstlisting}
|
|
def _212_HistogrammSpreizung(self, img):
|
|
# Convert brg image to hsv image
|
|
hsv_image = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
|
|
|
|
# Get hsv parts
|
|
h, s, v = cv2.split(hsv_image)
|
|
|
|
# Calc histogram spread
|
|
v = cv2.equalizeHist(v)
|
|
|
|
# Merge histogram spread to image
|
|
hsv_stretched = cv2.merge([h, s, v])
|
|
|
|
# Convert hsv image to brg and store result to member variable
|
|
self.middle_value_picture = cv2.cvtColor(hsv_stretched,
|
|
cv2.COLOR_HSV2BGR)
|
|
|
|
# Return brg result image
|
|
return self.middle_value_picture
|
|
\end{lstlisting}
|
|
|
|
\paragraph*{Aufgabe 5}
|
|
Warum ist es sinnvoll, den gesamten Wertebereich für die Darstellung von Videos in Multimedia-Anwendungen auszunutzen?
|
|
|
|
\color{blue}
|
|
|
|
Damit wird der Kontrast des Bildes verbessert. Das kann eine Hilfe beim
|
|
Schwellwertverfahren sein.
|
|
|
|
\color{black} |