import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
def zlicz_roznice_srednia_RGB(obraz, wsp):
t_obraz = np.asarray(obraz)
h, w, d = t_obraz.shape
zlicz = 0
for i in range(h):
for j in range(w):
if np.mean(t_obraz[i, j, :]) > wsp:
zlicz = zlicz + 1
procent = zlicz / (h * w)
return zlicz, procent
def zlicz_roznice_suma_RGB(obraz, wsp):
t_obraz = np.asarray(obraz)
h, w, d = t_obraz.shape
zlicz = 0
for i in range(h):
for j in range(w):
if sum(t_obraz[i, j, :]) > wsp:
zlicz = zlicz + 1
procent = zlicz / (h * w)
return zlicz, procent
# Zadanie 1
# a.
print("Zadanie 1a")
diff = Image.open('diff.png')
black_image = Image.new('RGB', diff.size, (0, 0, 0))
stats = np.array(diff).flatten()
print(f"Średnia: {np.mean(stats)}, Minimum: {np.min(stats)}, Maksimum: {np.max(stats)}")
print("_________________________________________________________________________________")
# b.
plt.hist(stats, bins=50, color='orange', alpha=0.7)
plt.savefig('histogram1.png')
plt.close()
# c.
print("Zadanie 1c")
for wsp in [15, 20, 50, 100, 140]:
diff_count, diff_percentage = zlicz_roznice_srednia_RGB(diff, wsp)
print(f"Dla wsp={wsp}, liczba różnic: {diff_count}, procent różnic: {diff_percentage * 100}%")
print("_________________________________________________________________________________")
# d.
print("Zadanie 1d")
for wsp in [30, 60, 120, 140, 180]:
diff_count, diff_percentage = zlicz_roznice_suma_RGB(diff, wsp)
print(f"Dla wsp={wsp}, liczba różnic: {diff_count}, procent różnic: {diff_percentage * 100}%")
print("_________________________________________________________________________________")
def zlicz_roznice_srednia_RGB(obraz, wsp):
t_obraz = np.asarray(obraz)
h, w, d = t_obraz.shape
zlicz = 0
for i in range(h):
for j in range(w):
if np.mean(t_obraz[i, j, :]) > wsp:
zlicz = zlicz + 1
procent = zlicz / (h * w)
return zlicz, procent
def zlicz_roznice_suma_RGB(obraz, wsp):
t_obraz = np.asarray(obraz)
h, w, d = t_obraz.shape
zlicz = 0
for i in range(h):
for j in range(w):
if sum(t_obraz[i, j, :]) > wsp:
zlicz = zlicz + 1
procent = zlicz / (h * w)
return zlicz, procent
# Zadanie 2
# a.
obraz = Image.open('obraz.jpg')
obraz.save('obraz1.jpg')
# b.
for i in range(2, 6):
obraz = Image.open(f'obraz{i - 1}.jpg')
obraz.save(f'obraz{i}.jpg')
# c.
obraz = Image.open('obraz.jpg')
obraz5 = Image.open('obraz5.jpg')
diff_pixels = np.count_nonzero(np.array(obraz) != np.array(obraz5))
print(f"Liczba różnych pikseli między obrazem a obrazem5: {diff_pixels}")
# d.
obraz4 = Image.open('obraz4.jpg')
diff_pixels_4_5 = np.count_nonzero(np.array(obraz4) != np.array(obraz5))
print(f"Liczba różnych pikseli między obrazem4 a obrazem5: {diff_pixels_4_5}")
# e.
for i in range(1, 6):
original = Image.open('obraz.jpg')
saved = Image.open(f'obraz{i}.jpg')
diff = np.count_nonzero(np.array(original) != np.array(saved))
print(f"Różnice między oryginałem a obrazem{i}: {diff}")
# Zadanie 3
def odkoduj(obraz1, obraz2):
t_obraz1 = np.asarray(obraz1)
t_obraz2 = np.asarray(obraz2)
diff_pixels = np.where(t_obraz1 != t_obraz2, 255, 0).astype(np.uint8)
return Image.fromarray(diff_pixels, 'L')
jesien = Image.open('jesien.jpg')
zakodowany1 = Image.open('zakodowany1.bmp')
kod = odkoduj(jesien, zakodowany1)
kod.save('kod.bmp')
zakodowany2 = Image.open('zakodowany2.bmp')
kod2 = odkoduj(jesien, zakodowany2)
kod2.save('kod2.bmp')