Initial commit with project files

This commit is contained in:
2025-06-27 14:34:11 +02:00
commit 7ea3207e63
310 changed files with 9331 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
# Übung 3: Diskretisierung und Quantisierung
In dieser Übung wird die Quantisierung und Diskretisierung von Bildern betrachtet. In den folgenden Abbildungen sind beide
Methoden visualisiert.
Quantisierung | Diskretisierung
:---:|:---
![](https://upload.wikimedia.org/wikipedia/commons/thumb/7/70/Quantized.signal.svg/2880px-Quantized.signal.svg.png) | ![](https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Zeroorderhold.signal.svg/2880px-Zeroorderhold.signal.svg.png)
[Link zum Bild](https://upload.wikimedia.org/wikipedia/commons/thumb/7/70/Quantized.signal.svg/2880px-Quantized.signal.svg.png) | [Link zum Bild](https://upload.wikimedia.org/wikipedia/commons/thumb/1/15/Zeroorderhold.signal.svg/2880px-Zeroorderhold.signal.svg.png)
## Aufgabe a) Diskretisierung
In der Datei [a.py](a.py) wird ein Bild geladen. Das Bild hat die Größe 1526 x 1600 (Breite x Höhe).
Diskretisieren Sie das Bild mit dem Faktor *k* **ohne** und **mit** Verwendung der Funktion `cv2.resize()`. Dabei kann
*k* die Werte 4, 8, und 13.5 annehmen. Zeigen Sie die Bilder für den direkten Vergleich an! Achten Sie dabei darauf,
dass die Bilder in der gleichen Größe dargestellt werden.
## Aufgabe b) Quantisierung
In der Datei [b.py](b.py) wird ein Bild geladen. Das Bild ist im BGR-Farbraum repräsentiert und hat eine 8-Bit Quantisierung
(Wertebereich {0, ..., 255}.
Führen Sie folgende Schritte durch:
1. Quantisieren Sie das Bild in den Wertebereich {0, ..., 127}
2. Quantisieren Sie das Bild aus Schritt 1 in den Wertebereich {0, ..., 3}
3. Quantisieren Sie das Bild aus Schritt 2 zurück in den Wertebereich {0, ..., 255}
Zeigen Sie die Bilder aus allen Schritten für den direkten Vergleich an:
- Wie bewerten Sie die Qualität der Bilder?
- Was fällt auf?

22
1_Grundlagen/ü3/a.py Normal file
View File

@@ -0,0 +1,22 @@
import numpy as np
import cv2
# Hiermit kann die Methode für die Berechnung ausgewählt werden
METHOD = "MANUELL" # OpenCV
# Einlesen des Bildes
filepath = "../../data/flower.jpeg"
img = cv2.imread(filepath)
h, w, c = img.shape
print("Originale Breite:", w)
print("Originale Höhe:", h)
scales = [4, 8, 13.5]
images = []
# todo Methode MANUELL implementieren und 'images' mit diskretisierten Bildern füllen
# todo Methode OpenCV implementieren und 'images' mit diskretisierten Bildern füllen
# todo Bilder darstellen

13
1_Grundlagen/ü3/b.py Normal file
View File

@@ -0,0 +1,13 @@
import numpy as np
import cv2
# Hiermit kann die Methode für die Berechnung ausgewählt werden
METHOD = "MANUELL" # OpenCV
# Einlesen des Bildes
filepath = "../../data/lena.png"
img = cv2.imread(filepath)
h, w, c = img.shape
# todo Schritte 1-3 implementieren!

46
1_Grundlagen/ü3/l_a.py Normal file
View File

@@ -0,0 +1,46 @@
import numpy as np
import cv2
# Hiermit kann die Methode für die Berechnung ausgewählt werden
METHOD = "MANUELL" # OpenCV, MANUELL
# Einlesen des Bildes
filepath = "../../data/flower.jpeg"
img = cv2.imread(filepath)
h, w, c = img.shape
print("Originale Breite:", w)
print("Originale Höhe:", h)
scales = [4, 8, 13.5]
images = []
for scale in scales:
new_w, new_h = round(w / scale), round(h / scale)
if METHOD == "OpenCV":
new_image = cv2.resize(img, (new_w, new_h))
# Frage 1: Welche Interpolations-Methode wird hier verwendet?
elif METHOD == "MANUELL":
new_image = np.zeros((new_h, new_w, c), dtype=np.uint8)
for x in range(new_w):
for y in range(new_h):
x_projected, y_projected = min(w - 1, round(x * scale)), min(h - 1, round(y * scale))
new_image[y, x] = img[y_projected, x_projected]
# Frage 1: Welche Interpolations-Methode wird hier verwendet?
# Frage 2: Welches Mapping wird hier verwendet (For- oder Backwardmapping)?
else:
raise Exception("Da ist wohl ein Fehler unterlaufen!")
images.append(new_image)
# Bilder darstellen
show_w, show_h = 1200, 1200
img = cv2.resize(img, (show_w, show_h))
cv2.imshow("Original", img)
for scale, image in zip(scales, images):
image = cv2.resize(image, (show_w, show_h))
cv2.imshow("Scale %s" % scale, image)
cv2.waitKey(0)

36
1_Grundlagen/ü3/l_b.py Normal file
View File

@@ -0,0 +1,36 @@
import numpy as np
import cv2
# Einlesen des Bildes
filepath = "../../data/lena.png"
img = cv2.imread(filepath)
'''
Anwendung der Schritte:
0. Für die Berechnung werden die Bilder in das kontinuierliche np.float64 konvertiert.
1. In Wertebereich {0, ..., 127}
2. In Wertebereich {0, ..., 3}
3. In Wertebereich {0, ..., 255}
'''
img_step0 = img.astype(np.float64)
img_step1 = np.round(127 * np.copy(img_step0) / 255)
img_step2 = np.round(3 * np.copy(img_step1) / 127)
img_step3 = np.round(255 * np.copy(img_step2) / 3)
'''
Für die Darstellung von np.float64 Bildern wird der Wertebereich von {0, ..., n_max} in [0, 1] projeziert.
Dabei entspricht der Wert 1 dem ehemaligen Maximum n_max.
'''
img_step0 = img_step0 / 255
img_step1 = img_step1 / 127
img_step2 = img_step2 / 3
img_step3 = img_step3 / 255
cv2.imshow("Schritt 0", img_step0)
cv2.imshow("Schritt 1", img_step1)
cv2.imshow("Schritt 2", img_step2)
cv2.imshow("Schritt 3", img_step3)
cv2.waitKey(0)