Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
3.8 kB
2
Indexable
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')