Bildkompression mit SVD
This commit is contained in:
parent
94ccd12cfe
commit
bc4602eb7d
44
src/FHGR_CDS_Nume_E_PYNU_SVD_Bildkompression.py
Normal file
44
src/FHGR_CDS_Nume_E_PYNU_SVD_Bildkompression.py
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user