From bc4602eb7d922072f2e53a7a0f6228b007ec7c36 Mon Sep 17 00:00:00 2001 From: zimmersandro Date: Tue, 2 Jun 2026 21:42:26 +0200 Subject: [PATCH] Bildkompression mit SVD --- ...HGR_CDS_Nume_E_PYNU_SVD_Bildkompression.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/FHGR_CDS_Nume_E_PYNU_SVD_Bildkompression.py diff --git a/src/FHGR_CDS_Nume_E_PYNU_SVD_Bildkompression.py b/src/FHGR_CDS_Nume_E_PYNU_SVD_Bildkompression.py new file mode 100644 index 0000000..f175edc --- /dev/null +++ b/src/FHGR_CDS_Nume_E_PYNU_SVD_Bildkompression.py @@ -0,0 +1,44 @@ +# Python +# AUEM +# 2026-05-06 +# Begin +# -------------------------------------------------------------------------------------- +# Python initialisieren: +from PIL import Image, ImageOps +import matplotlib.pyplot as pl +import numpy as np + +# Parameter: +N = 10 +sc_r = 100 +pr = 3 +fig = 1 +# Import: +img = Image.open("./Bild.JPG") +img_sw = ImageOps.grayscale(img) +A = np.asarray(img_sw) +# Berechnungen; +[U, S, Vt] = np.linalg.svd(A) +U_red = U[:, :N] +S_red = S[:N] +Vt_red = Vt[:N, :] +A_red = U_red @ np.diag(S_red) @ Vt_red +G = A.size +G_red = U_red.size + S_red.size + Vt_red.size +r = G_red / G +# Anzeige der Bilder: +fh = pl.figure(fig) +pl.imshow(A, cmap="gray") +fig = fig + 1 +fh = pl.figure(fig) +pl.imshow(A_red, cmap="gray") +# Ausgabe: +print("--------------------------------------------------") +print(__file__) +print("--------------------------------------------------") +print(f"Groesse original: G = {G}") +print(f"Groesse komprimiert: G_red = {G_red}") +print(f"Datenkompression: r = {r*sc_r:#.{pr}g}%") +print("--------------------------------------------------") +# -------------------------------------------------------------------------------------- +# End