Bildkompression mit SVD

This commit is contained in:
Sandro Zimmermann 2026-06-02 21:42:26 +02:00
parent 94ccd12cfe
commit bc4602eb7d

View File

@ -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