|
|
@@ -1,6 +1,6 @@
|
|
|
from PIL import Image
|
|
|
from numpy import asarray, ndarray, array, uint8, delete
|
|
|
-import random
|
|
|
+from random import choice
|
|
|
|
|
|
# image = Image.open("images/hibou.jpg")
|
|
|
|
|
|
@@ -52,8 +52,13 @@ def tab_image_blanche(longueur: int, hauteur: int) -> ndarray:
|
|
|
# On crée autant de lignes que de pixels de hauteur, et autant de pixels que de hauteur
|
|
|
tab = [ [255] * longueur] * hauteur
|
|
|
return array(tab)
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+def tab_image_noir(longueur: int, hauteur: int) -> ndarray:
|
|
|
+ """Génère un tableau contenant des pixels blancs avec les dimensions données"""
|
|
|
+ # On crée autant de lignes que de pixels de hauteur, et autant de pixels que de hauteur
|
|
|
+ tab = [ [0] * longueur] * hauteur
|
|
|
+ return array(tab)
|
|
|
+
|
|
|
def get_longueur_img(tab_img: ndarray) -> int:
|
|
|
"""Renvoie la longueur du tableau à deux dimensions (représentant une image) donné"""
|
|
|
return len(tab_img[0])
|
|
|
@@ -92,6 +97,7 @@ def visible(clou1: tuple, clou2: tuple) -> bool:
|
|
|
return clou1[2] != clou2[2]
|
|
|
|
|
|
def clou_choisi_al(liste_clous : list) -> tuple:
|
|
|
+ """On choisie un clou aléatoirement"""
|
|
|
return random.choice(liste_clous)
|
|
|
|
|
|
def tracer_droite(clou1: tuple, clou2: tuple, image: list) -> list:
|
|
|
@@ -102,29 +108,49 @@ def tracer_droite(clou1: tuple, clou2: tuple, image: list) -> list:
|
|
|
|
|
|
pass
|
|
|
|
|
|
-def zone(image) -> list:
|
|
|
- lst =[]
|
|
|
- lst_coor_angle_zone=[]
|
|
|
+def lst_zone(image) -> list:
|
|
|
+ """Renvoie une liste avec les coordonées de chaques zones"""
|
|
|
+ lst = []
|
|
|
hauteur = get_hauteur_img(image)
|
|
|
- longeur = get_longueur_img(image)
|
|
|
- pass
|
|
|
-
|
|
|
-def erreur_moyenne_zone(image1, image2, zone):
|
|
|
-
|
|
|
- pass
|
|
|
+ longueur = get_longueur_img(image)
|
|
|
+ pas = 10
|
|
|
+ for i in range(0,longueur,pas):
|
|
|
+ for j in range(0,hauteur, pas):
|
|
|
+ lst += [(i,j)] #prends les coordonnées du pixel en haut à gauche de chaque zone
|
|
|
+ return lst
|
|
|
+
|
|
|
+def erreur_moyenne_zone(image1, image2, zone : tuple, longueur : int) -> float:
|
|
|
+ """Renvoie l'erreur moyenne pour une zone"""
|
|
|
+ haut = get_hauteur_img(image1)
|
|
|
+ long = get_longueur_img(image1)
|
|
|
+ coo1 = zone[0]
|
|
|
+ coo2 = zone[1]
|
|
|
+ pix1 = image1[coo1][coo2]
|
|
|
+ pix2 = image2[coo1][coo2]
|
|
|
+ diff = abs(pix1 - pix2)
|
|
|
+ for i in range(coo1, coo1+longueur):
|
|
|
+ for j in range(coo2, coo2+longueur):
|
|
|
+ if i != 0 and j != 0:
|
|
|
+ if i > long and j > haut:
|
|
|
+ pix1 = image1[i][j]
|
|
|
+ pix2 = image2[i][j]
|
|
|
+ diff += abs(pix1 - pix2)
|
|
|
+ return (diff / (longueur * longueur *255)) * 100
|
|
|
|
|
|
def erreur(image1, image2, zones : list) -> float:
|
|
|
+ """Renvoie l'erreur moyenne entre les deux images"""
|
|
|
moy = 0
|
|
|
for i in range(len(zones)):
|
|
|
- moy += erreur_moyenne_zone(image1, image2,zone[i])
|
|
|
- return moy
|
|
|
- pass
|
|
|
+ moy += erreur_moyenne_zone(image1, image2,zones[i])
|
|
|
+ return moy/len(zones)
|
|
|
|
|
|
image = import_image("images/hibou.jpg")
|
|
|
print(image)
|
|
|
|
|
|
image_blanche = tab_image_blanche(get_longueur_img(image), get_hauteur_img(image))
|
|
|
|
|
|
+image_noir = tab_image_noir(get_longueur_img(image), get_hauteur_img(image))
|
|
|
+
|
|
|
print(image_blanche)
|
|
|
|
|
|
img = Image.fromarray(uint8(image_blanche))
|
|
|
@@ -148,7 +174,8 @@ for i in range(0, len(c)):
|
|
|
im_test = Image.fromarray(uint8(test))
|
|
|
im_test.show()
|
|
|
|
|
|
-
|
|
|
+l_zones = lst_zone(image)
|
|
|
+print(erreur_moyenne_zone(image, image_blanche,l_zones[500],10))
|
|
|
### TODO ###
|
|
|
|
|
|
# On peut essayer de regarder des clous aléatoire plutôt que de tout tester
|