Finish documentation

This commit is contained in:
2025-07-05 10:34:54 +02:00
parent 5c7067e255
commit 0ba97576a9
31 changed files with 578 additions and 114 deletions

View File

@@ -31,7 +31,24 @@ Geben Sie Ihren Code an und beschreiben Sie ihn. Geben Sie nur relevante Code Be
\lstset{caption={Segmentierung und Bildmodifizierung, Aufgabe 1}}
\begin{lstlisting}
# Your code!
def _23_SegmentUndBildmodifizierung (self, img, save_binary_mask = False):
# Convert BGR -> HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# Area 1: H = 0-10 (strong Rot)
lower_red1 = np.array([0, 100, 50])
upper_red1 = np.array([0, 255, 255])
# Area 2: H = 169-179 (red-violet)
lower_red2 = np.array([171, 100, 50])
upper_red2 = np.array([179, 255, 255])
# Create binary mask for both red areas
mask1 = cv2.inRange(hsv, lower_red1, upper_red1)
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
# Combine both masks
mask = cv2.bitwise_or(mask1, mask2)
\end{lstlisting}
\subsubsection{Bin<EFBFBD>rmaske}
@@ -52,12 +69,36 @@ img = cv2.drawContours(img, [c], -1, color=255, -1)
Geben Sie Ihren Code an und beschreiben Sie ihn. Geben Sie nur relevante Code Bereiche an!
\lstset{caption={Segmentierung und Bildmodifizierung, Aufgabe 2}}
\begin{lstlisting}
# Your code!
def _23_SegmentUndBildmodifizierung (self, img, save_binary_mask = False):
# ...
# Optimizing mask with opening and closing
kernel = np.ones((5, 5), np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
# Select biggest connected area
cnts, _ = cv2.findContours(mask, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
if cnts:
c = max(cnts, key=cv2.contourArea)
new_mask = np.zeros_like(mask)
cv2.drawContours(new_mask, [c], -1, color = 255, thickness = -1)
mask = new_mask
else:
mask = np.zeros_like(mask)
\end{lstlisting}
\paragraph*{Aufgabe 3}
Welche Probleme oder Fehler k<>nnen in der Bin<69>rmaske vorkommen, die mit den Ma<4D>nahmen beseitigt werden sollen?
\color{blue}
Durch das Opening und Closing k<>nnen sich zwei Bereiche miteinander verbinden, die jedoch nicht zusammengeh<65>ren. Die Wahl des gr<67><72>ten zusammenh<6E>ngenden Segments kann relevante Bereiche auch einfach auslassen, wenn das Opening und Closing diesen nicht zu gr<67><72>ten Bereich zusammengef<65>hrt hat.
\color{black}
\subsubsection{Bildmodifizierung}
Nach dem Fertigstellen der vorherigen Aufgabenstellungen sollten Sie nun eine Bin<69>rmaske erhalten, welche den \glqq magischen Umhang\grqq\ segmentiert. Die letzte Aufgabe befasst sich mit der Bildmodifizierung, welche den Eindruck verschwindender Objekte vermittelt.
@@ -74,8 +115,33 @@ Solange kein Bild in der Variable gespeichert ist, soll das Eingangsbild direkt
Geben Sie Ihren Code an und beschreiben Sie ihn. Geben Sie nur relevante Code Bereiche an!
\lstset{caption={Segmentierung und Bildmodifizierung, Aufgabe 4}}
\begin{lstlisting}
# Your code!
def _23_SegmentUndBildmodifizierung (self, img, save_binary_mask = False):
# ...
# Return image if no background is set
if self.background is None:
return img
# 3-channel mask for binary operations
mask_3ch = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
# Background are: Get from save background image
background_part = cv2.bitwise_and(self.background, mask_3ch)
# Foreground area: Extract from current image
foreground_part = cv2.bitwise_and(img, cv2.bitwise_not(mask_3ch))
# Merge both areas
output = cv2.add(background_part, foreground_part)
return output
\end{lstlisting}
\paragraph*{Aufgabe 5}
Geben Sie ein Bild (z.B. Screenshot) an, in dem die Funktion Ihres \glqq magischen Umhangs\grqq\ gezeigt wird!
Geben Sie ein Bild (z.B. Screenshot) an, in dem die Funktion Ihres \glqq magischen Umhangs\grqq\ gezeigt wird!
\begin{figure}
\centering
\includegraphics[width=10cm]{fig/Endergebnis.png}
\caption{Endergebnis}
\label{fig:histogram-endergebnis}
\end{figure}