Module knn.plusProchesVoisins
Compléter le programme pour qu'il associe à une image de test la valeur (3 ou 7) du plus proche voisin ; le programme doit au final afficher 'cette image est un 7' ou 'cette image est un 3'
Adaptez votre programme pour qu'il associe maintenant à une image de test la valeur majoritaire parmi les 5 plus proches voisins. Attention à ne pas effacer le travail de la question précédente, soit en créant une nouvelle fonction (une pour le plus proche, une pour les 5 plus proches), soit en faisant les modifications dans un nouveau fichier.
Expand source code
#!/usr/bin/python3
#-*- coding: utf8 -*-
"""
**Compléter le programme** pour qu'il associe à une image de test la valeur (3 ou 7) du plus proche
voisin ; le programme doit au final afficher 'cette image est un 7' ou 'cette image est un 3'
**Adaptez votre programme** pour qu'il associe maintenant à une image de test la valeur majoritaire
parmi les 5 plus proches voisins. Attention à ne pas effacer le travail de la question précédente,
soit en créant une nouvelle fonction (une pour le plus proche, une pour les 5 plus proches), soit en
faisant les modifications dans un nouveau fichier.
"""
pass
import sys
import copy
#On fait les imports selon le contexte
if __name__=="__main__":
from distance import *
else:
from knn.distance import *
def isDistanceMin(image2test:list,imageMin:list,imagesref:list)->bool:
"""
Fonction booléenne qui renvoie True si la distance entre image2test et imageMin
est inférieure ou égale à chaque distance entre image2test et un élément de imagesref
**Paramètres**
* image2test est une liste d'entiers dont le premier élément est un '?'
* imageMin est une liste dont il faut tester si la distance à image2test est minimale
* imagesref est l'échantillon d'images de référence
**Préconditions**
* image2test, imageMin et les éléments de imagesref sont les listes
* image2test et les éléments de imagesref ont le même nombre de pixels
* image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément
**Postconditions**
* la sortie est un booléen
**Sortie**
* Un booléen
"""
pass
#Préconditions
assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste"
assert isinstance(imageMin,list),"l'image candidate n'est pas sous forme de liste"
assert len(image2test[1:])==len(imageMin[1:]),"image2test et imageMin n'ont pas le même nombre de pixels"
for i in range(len(imagesref)):
assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste"
assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels"
for i in range(1,len(image2test)):
if (int(image2test[i]) not in range(256) or int(imageMin[i]) not in range(256)):
raise ValueError("L'un des deux premiers paramètres au moins n'est pas un code de dégradés de gris")
for j in range(len(imagesref)):
for i in range(1,len(imagesref[j])):
if(int(imagesref[j][i]) not in range(256)):
raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.")
#Préconditions
# a priori c'est la plus petite distance
isTrue = True
i = 0
while (i<len(imagesref) and isTrue):
if distance(image2test[1:],imageMin[1:])>distance(image2test[1:],imagesref[i][1:]):
isTrue = False
i = i+1
#Postconditions
assert isinstance(isTrue,bool),"isTrue n'est pas un booléen"
#Postconditions
return isTrue
def plusProcheVoisin(image2test:list,imagesref:list)->list:
"""
Fonction qui renvoie, parmi un echantillon de référence, le plus proche voisin d'une liste à tester.
**Paramètres**
* image2test est une liste d'entiers dont le premier élément est un ?
* imagesref est une liste de listes dont le premier élément vaut 3 ou 7
**Préconditions**
* image2test et les éléments de imagesref sont les listes
* image2test et les éléments de imagesref ont le même nombre de pixels
* image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément
**Postconsitions**
* La sortie est un tableau de deux éléments
* le premier est une liste dont tous les éléments sont des codes entre 0 et 255
* le second un entier compris entre 0 et la taille de imagesref
* La distance avec image2test est minimale
**Sorties**
Un tableau contenant :
* le plus proche voisin parmi les images de référence
* son indice dans imagesref
"""
pass
# Préconditions
assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste"
for i in range(len(imagesref)):
assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste"
assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels"
for i in range(1,len(image2test)):
if (int(image2test[i]) not in range(256)):
raise ValueError("L'un des éléments de imge2test au moins n'est pas un code de dégradés de gris")
for j in range(len(imagesref)):
for i in range(1,len(imagesref[j])):
if(int(imagesref[j][i]) not in range(256)):
raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.")
# Préconditions
nbRefs = len(imagesref) # nombre d'images de référence
ppv = [imagesref[0],0] # on initialise avec la premiere image
# On teste toutes les images si on en trouve une plus proche on change ppv
for i in range(nbRefs):
if distance(image2test[1:],imagesref[i][1:])<distance(image2test[1:],ppv[0][1:]):
ppv = [imagesref[i],i]
# Postconditions
assert len(ppv)==2,"la sortie n'a pas deux éléments"
assert isinstance(ppv[0],list),"le premier élément de la sortie n'est pas une liste"
for i in range(1,len(ppv[0])):
assert (int(ppv[0][i]) in range(256)),"l'un des éléments de la liste de sortie n'est pas un code de gris"
assert isinstance(ppv[1],int),"le second élément de la sortie n'est pas un entier"
assert ppv[1] in range(len(imagesref))
assert isDistanceMin(image2test,ppv[0],imagesref)
# Postconditions
return ppv
def affichage3ou7(image:list)->str:
"""
Fonction qui renvoie une chaine de caractère selon le plus proche voisin
**Paramètres**
* image : une liste contenant le plus proche voisin d'une image à tester
**Préconditions**
* image est une liste
* le premier élément de image vaut 3 ou 7
**Postconsitions**
* la sortie est une chaine qui vaur ' est un 3' ou ' est un 7'
**Sortie**
* Une chaine de caractère indiquant ce qu'est l'image, un 3 ou un 7
"""
pass
# Préconditions
assert isinstance(image,list),"image n'est pas une liste"
assert (image[0][0] == '3' or image[0][0] == '7'),"image n'est pas une image de l'échantillon de référence"
for i in range(1,len(image)):
if (int(image[i]) not in range(256)):
raise ValueError("L'un des éléments de image au moins n'est pas un code de dégradés de gris")
# Préconditions
is3ou7 = ' est un '+image[0][0]
# Postconditions
assert (is3ou7 == " est un 3" or is3ou7 == " est un 7"),"l'écart n'est pas un entier"
# Postconditions
return is3ou7
def cinqPlusProchesVoisins(image2test:list,imagesref:list)->list:
"""
Fonction qui renvoie, parmi un echantillon de référence, les 5 plus proches voisins d'une liste à tester.
**Paramètres**
* image2test une liste d'entiers sauf le premier élément qui est '?'
* imagesref une liste de listes dont le premier élément est '3' ou '7'
**Préconditions**
* image2test et les éléments de imagesref sont les listes
* image2test et les éléments de imagesref ont le même nombre de pixels
* image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément
**Postconsitions**
* La sortie est un tableau de cinq éléments
* chaque élément est une liste dont tous les éléments sauf le premier sont des codes entre 0 et 255
**Sorties**
Un tableau de tableaux contenant :
* les 5 plus proches voisins parmi les images de référence
* leurs indices dans imagesref
"""
pass
# Préconditions
assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste"
for i in range(len(imagesref)):
assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste"
assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels"
for i in range(1,len(image2test)):
if (int(image2test[i]) not in range(256)):
raise ValueError("L'un des éléments de imge2test au moins n'est pas un code de dégradés de gris")
for j in range(len(imagesref)):
for i in range(1,len(imagesref[j])):
if(int(imagesref[j][i]) not in range(256)):
raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.")
# Préconditions
references = copy.deepcopy(imagesref)
i=0
five_ppv = []
while i<5:
five_ppv.append(plusProcheVoisin(image2test,references))
references.pop(five_ppv[i][1])
i +=1
# Postconditions
assert len(five_ppv) == 5,"la sortie ne contient pas 5 éléments"
for i in range(len(five_ppv)):
for j in range(1,len(five_ppv[i])):
if (int(five_ppv[i][j]) not in range(256)):
raise ValueError("L'un des éléments des cinq plus proches voisins au moins n'est pas un code de dégradés de gris")
# Postconditions
return five_ppv
def plusDe3ou7(five_ppv_image2test:list)->str:
"""
Fonction qui renvoie une chaine selon la valeur majoritaire parmi les 5 plus proches voisins d'une liste à tester
**Paramètres**
* five_ppv_image2test la liste des 5 plus proches voisins d'une liste à tester
**Préconditions**
* five_ppv_image2test est une liste de 5 listes
* chacune des listes est une liste de codes de gris
* le premier éléments de chaque liste est un 3 ou un 7
**Postconsitions**
* la sortie est une chaine qui vaur ' est un 3' ou ' est un 7'
**Sortie**
* Une chaine de caracteres
"""
pass
# Préconditions
assert len(five_ppv_image2test) == 5,"la liste en entrée ne contient pas 5 éléments"
for i in range(len(five_ppv_image2test)):
assert (five_ppv_image2test[i][0][0] == '3' or five_ppv_image2test[i][0][0] == '7'),"le premier élément de la liste "+str(i+1)+" n'est pas un 3 ou un 7"
for j in range(1,len(five_ppv_image2test[i])):
if (int(five_ppv_image2test[i][j]) not in range(256)):
raise ValueError("L'un des éléments des cinq éléments de l'entrée au moins n'est pas un code de dégradés de gris")
# Préconditions
nb_3 = 0
nb_7 = 0
maxDe3ou7 = ' est un '
for i in range(len(five_ppv_image2test)):
if five_ppv_image2test[i][0][0]=='3':
nb_3 +=1
if five_ppv_image2test[i][0][0]=='7':
nb_7 +=1
if (nb_3>nb_7):
maxDe3ou7 +='3'
else:
maxDe3ou7 +='7'
# Postconditions
assert (maxDe3ou7 == " est un 3" or maxDe3ou7 == " est un 7"),"l'écart n'est pas un entier"
# Postconditions
return maxDe3ou7
if __name__=="__main__":
# On récupère les images de référence
train = open("ressources/training","r")
l = train.readlines()
listetraining = [ligne.split() for ligne in l]
# Test isDistanceMin()
# Une image du lot à tester
img2test = ['3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '38', '43', '105', '255', '253', '253', '253', '253', '253', '174', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '43', '139', '224', '226', '252', '253', '252', '252', '252', '252', '252', '252', '158', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '178', '252', '252', '252', '252', '253', '252', '252', '252', '252', '252', '252', '252', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '109', '252', '252', '230', '132', '133', '132', '132', '189', '252', '252', '252', '252', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '4', '29', '29', '24', '0', '0', '0', '0', '14', '226', '252', '252', '172', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '85', '243', '252', '252', '144', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '88', '189', '252', '252', '252', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '91', '212', '247', '252', '252', '252', '204', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '32', '125', '193', '193', '193', '253', '252', '252', '252', '238', '102', '28', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '45', '222', '252', '252', '252', '252', '253', '252', '252', '252', '177', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '45', '223', '253', '253', '253', '253', '255', '253', '253', '253', '253', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '31', '123', '52', '44', '44', '44', '44', '143', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '15', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '86', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '5', '75', '9', '0', '0', '0', '0', '0', '0', '98', '242', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '61', '183', '252', '29', '0', '0', '0', '0', '18', '92', '239', '252', '252', '243', '65', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '208', '252', '252', '147', '134', '134', '134', '134', '203', '253', '252', '252', '188', '83', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '208', '252', '252', '252', '252', '252', '252', '252', '252', '253', '230', '153', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '49', '157', '252', '252', '252', '252', '252', '217', '207', '146', '45', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '7', '103', '235', '252', '172', '103', '24', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
# La même image légèrement modifiée
img2testModif = ['3', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '38', '43', '105', '255', '253', '253', '253', '253', '253', '174', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '43', '139', '224', '226', '252', '253', '252', '252', '252', '252', '252', '252', '158', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '178', '252', '252', '252', '252', '253', '252', '252', '252', '252', '252', '252', '252', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '109', '252', '252', '230', '132', '133', '132', '132', '189', '252', '252', '252', '252', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '4', '29', '29', '24', '0', '0', '0', '0', '14', '226', '252', '252', '172', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '85', '243', '252', '252', '144', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '88', '189', '252', '252', '252', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '91', '212', '247', '252', '252', '252', '204', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '32', '125', '193', '193', '193', '253', '252', '252', '252', '238', '102', '28', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '45', '222', '252', '252', '252', '252', '253', '252', '252', '252', '177', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '45', '223', '253', '253', '253', '253', '255', '253', '253', '253', '253', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '31', '123', '52', '44', '44', '44', '44', '143', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '15', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '86', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '5', '75', '9', '0', '0', '0', '0', '0', '0', '98', '242', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '61', '183', '252', '29', '0', '0', '0', '0', '18', '92', '239', '252', '252', '243', '65', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '208', '252', '252', '147', '134', '134', '134', '134', '203', '253', '252', '252', '188', '83', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '208', '252', '252', '252', '252', '252', '252', '252', '252', '253', '230', '153', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '49', '157', '252', '252', '252', '252', '252', '217', '207', '146', '45', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '7', '103', '235', '252', '172', '103', '24', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
# un test qui doit retourner True
assert(isDistanceMin(img2test,img2test,listetraining) == True)
# un test qui doit retourner False
assert(isDistanceMin(img2test,img2testModif,listetraining) == False)
# Test plusProcheVoisin()
# Une image du lot à tester
img_2_test = ['?', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '84', '185', '159', '151', '60', '36', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '222', '254', '254', '254', '254', '241', '198', '198', '198', '198', '198', '198', '198', '198', '170', '52', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '67', '114', '72', '114', '163', '227', '254', '225', '254', '254', '254', '250', '229', '254', '254', '140', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '17', '66', '14', '67', '67', '67', '59', '21', '236', '254', '106', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '83', '253', '209', '18', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '22', '233', '255', '83', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '129', '254', '238', '44', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '59', '249', '254', '62', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '133', '254', '187', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '9', '205', '248', '58', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '126', '254', '182', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '75', '251', '240', '57', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '19', '221', '254', '166', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '3', '203', '254', '219', '35', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '38', '254', '254', '77', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '31', '224', '254', '115', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '133', '254', '254', '52', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '61', '242', '254', '254', '52', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '121', '254', '254', '219', '40', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '121', '254', '207', '18', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
# Son plus proche voisin
img_2_test_ppv = ['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '46', '179', '254', '186', '104', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '87', '244', '254', '253', '253', '253', '253', '193', '118', '118', '118', '192', '155', '63', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '234', '253', '235', '137', '174', '186', '253', '254', '253', '253', '253', '253', '254', '135', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '219', '253', '142', '0', '0', '3', '57', '214', '247', '253', '253', '253', '244', '78', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '32', '58', '23', '0', '0', '0', '0', '0', '49', '193', '253', '253', '195', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '58', '224', '254', '231', '76', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '214', '253', '253', '155', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '41', '241', '253', '237', '66', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '201', '253', '253', '164', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '38', '254', '253', '253', '41', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '25', '231', '255', '254', '116', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '85', '253', '254', '228', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '55', '217', '253', '254', '68', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '130', '253', '253', '169', '18', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '16', '235', '253', '253', '23', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '178', '254', '254', '193', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '35', '232', '253', '234', '46', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '156', '253', '253', '183', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '156', '253', '253', '102', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '96', '238', '154', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
# Ses 5 plus proches voisins dans un tableau
img_2_test_five_ppv = [
[['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '46', '179', '254', '186', '104', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '87', '244', '254', '253', '253', '253', '253', '193', '118', '118', '118', '192', '155', '63', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '234', '253', '235', '137', '174', '186', '253', '254', '253', '253', '253', '253', '254', '135', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '219', '253', '142', '0', '0', '3', '57', '214', '247', '253', '253', '253', '244', '78', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '32', '58', '23', '0', '0', '0', '0', '0', '49', '193', '253', '253', '195', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '58', '224', '254', '231', '76', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '214', '253', '253', '155', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '41', '241', '253', '237', '66', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '201', '253', '253', '164', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '38', '254', '253', '253', '41', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '25', '231', '255', '254', '116', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '85', '253', '254', '228', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '55', '217', '253', '254', '68', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '130', '253', '253', '169', '18', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '16', '235', '253', '253', '23', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '178', '254', '254', '193', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '35', '232', '253', '234', '46', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '156', '253', '253', '183', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '156', '253', '253', '102', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '96', '238', '154', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 154],
[['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '16', '109', '109', '109', '212', '253', '255', '253', '253', '253', '192', '150', '149', '109', '63', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '63', '222', '252', '252', '252', '252', '252', '253', '252', '252', '252', '253', '252', '252', '252', '238', '72', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '73', '252', '252', '252', '252', '252', '252', '253', '241', '241', '231', '253', '252', '252', '252', '253', '231', '52', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '31', '108', '108', '108', '108', '108', '108', '108', '77', '78', '46', '108', '108', '211', '252', '253', '252', '71', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '37', '252', '253', '252', '71', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '21', '181', '252', '253', '189', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '73', '252', '252', '253', '76', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '155', '252', '252', '253', '35', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '47', '233', '253', '253', '145', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '233', '252', '252', '210', '20', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '105', '253', '252', '252', '108', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '21', '206', '253', '252', '231', '46', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '99', '253', '255', '222', '41', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '63', '242', '252', '253', '138', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '16', '181', '252', '252', '237', '30', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '109', '252', '252', '252', '62', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '171', '253', '253', '108', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '253', '252', '252', '148', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '232', '252', '252', '252', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '47', '148', '148', '108', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 108],
[['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '54', '255', '240', '115', '0', '0', '0', '0', '103', '121', '32', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '91', '108', '209', '253', '253', '253', '241', '242', '241', '170', '251', '253', '244', '132', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '35', '229', '253', '253', '253', '243', '159', '159', '205', '253', '169', '209', '234', '253', '213', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '94', '253', '253', '253', '253', '114', '0', '0', '19', '39', '4', '47', '217', '253', '213', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '94', '253', '253', '253', '221', '20', '0', '0', '0', '0', '0', '81', '253', '253', '177', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '75', '245', '253', '242', '98', '0', '0', '0', '0', '0', '0', '109', '253', '253', '80', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '110', '213', '168', '0', '0', '0', '0', '0', '0', '86', '241', '253', '216', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '228', '253', '253', '115', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '70', '242', '253', '250', '63', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '64', '247', '253', '253', '116', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '122', '254', '254', '174', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '248', '253', '253', '46', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '5', '164', '254', '253', '120', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '57', '253', '254', '253', '26', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '8', '175', '253', '254', '132', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '56', '253', '253', '165', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '7', '175', '253', '253', '113', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '6', '133', '253', '252', '226', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '54', '253', '253', '233', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '54', '253', '239', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 52],
[['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '26', '247', '152', '83', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '216', '235', '195', '251', '204', '164', '121', '79', '79', '79', '44', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '156', '189', '2', '8', '26', '95', '125', '153', '165', '181', '210', '239', '91', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '21', '242', '189', '0', '0', '0', '0', '0', '0', '0', '0', '6', '92', '254', '113', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '74', '254', '87', '0', '0', '0', '0', '0', '0', '0', '0', '0', '2', '194', '241', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '7', '21', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '6', '206', '249', '43', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '22', '254', '252', '57', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '22', '254', '241', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '114', '254', '166', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '23', '246', '254', '112', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '112', '254', '240', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '25', '244', '254', '155', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '5', '145', '254', '227', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '44', '254', '243', '53', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '17', '207', '252', '150', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '3', '113', '254', '224', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '48', '254', '241', '78', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '18', '206', '254', '184', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '139', '254', '226', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '53', '254', '254', '71', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 170],
[['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '60', '255', '203', '146', '110', '38', '38', '38', '94', '146', '146', '146', '119', '23', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '151', '253', '253', '253', '253', '253', '253', '253', '253', '253', '253', '253', '253', '150', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '56', '248', '248', '249', '249', '248', '248', '248', '192', '139', '139', '200', '253', '150', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '20', '24', '0', '0', '0', '0', '0', '0', '154', '253', '150', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '244', '253', '150', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '244', '253', '54', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '61', '250', '241', '35', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '181', '253', '106', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '55', '250', '252', '76', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '129', '253', '226', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '18', '235', '253', '102', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '132', '253', '203', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '22', '242', '253', '85', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '133', '253', '205', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '200', '253', '194', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '200', '253', '194', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '200', '253', '194', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '200', '253', '194', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '200', '253', '236', '137', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '30', '194', '253', '212', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 59]
]
# Un test qui doit retourner True
assert (plusProcheVoisin(img_2_test,listetraining)[0] == img_2_test_ppv)
# Test de affichage3ou7()
assert(affichage3ou7(plusProcheVoisin(img_2_test,listetraining)[0]) == " est un 7")
# Test de cinsPlusProchesVoisins
assert(cinqPlusProchesVoisins(img_2_test,listetraining) == img_2_test_five_ppv)
# Test de plusDe3ou7()
assert(plusDe3ou7(cinqPlusProchesVoisins(img_2_test,listetraining)) == " est un 7")
Functions
def affichage3ou7(image: list) ‑> str
-
Fonction qui renvoie une chaine de caractère selon le plus proche voisin
Paramètres
- image : une liste contenant le plus proche voisin d'une image à tester
Préconditions
- image est une liste
- le premier élément de image vaut 3 ou 7
Postconsitions
- la sortie est une chaine qui vaur ' est un 3' ou ' est un 7'
Sortie
- Une chaine de caractère indiquant ce qu'est l'image, un 3 ou un 7
Expand source code
def affichage3ou7(image:list)->str: """ Fonction qui renvoie une chaine de caractère selon le plus proche voisin **Paramètres** * image : une liste contenant le plus proche voisin d'une image à tester **Préconditions** * image est une liste * le premier élément de image vaut 3 ou 7 **Postconsitions** * la sortie est une chaine qui vaur ' est un 3' ou ' est un 7' **Sortie** * Une chaine de caractère indiquant ce qu'est l'image, un 3 ou un 7 """ pass # Préconditions assert isinstance(image,list),"image n'est pas une liste" assert (image[0][0] == '3' or image[0][0] == '7'),"image n'est pas une image de l'échantillon de référence" for i in range(1,len(image)): if (int(image[i]) not in range(256)): raise ValueError("L'un des éléments de image au moins n'est pas un code de dégradés de gris") # Préconditions is3ou7 = ' est un '+image[0][0] # Postconditions assert (is3ou7 == " est un 3" or is3ou7 == " est un 7"),"l'écart n'est pas un entier" # Postconditions return is3ou7
def cinqPlusProchesVoisins(image2test: list, imagesref: list) ‑> list
-
Fonction qui renvoie, parmi un echantillon de référence, les 5 plus proches voisins d'une liste à tester.
Paramètres
- image2test une liste d'entiers sauf le premier élément qui est '?'
- imagesref une liste de listes dont le premier élément est '3' ou '7'
Préconditions
- image2test et les éléments de imagesref sont les listes
- image2test et les éléments de imagesref ont le même nombre de pixels
- image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément
Postconsitions
- La sortie est un tableau de cinq éléments
- chaque élément est une liste dont tous les éléments sauf le premier sont des codes entre 0 et 255
Sorties Un tableau de tableaux contenant :
- les 5 plus proches voisins parmi les images de référence
- leurs indices dans imagesref
Expand source code
def cinqPlusProchesVoisins(image2test:list,imagesref:list)->list: """ Fonction qui renvoie, parmi un echantillon de référence, les 5 plus proches voisins d'une liste à tester. **Paramètres** * image2test une liste d'entiers sauf le premier élément qui est '?' * imagesref une liste de listes dont le premier élément est '3' ou '7' **Préconditions** * image2test et les éléments de imagesref sont les listes * image2test et les éléments de imagesref ont le même nombre de pixels * image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément **Postconsitions** * La sortie est un tableau de cinq éléments * chaque élément est une liste dont tous les éléments sauf le premier sont des codes entre 0 et 255 **Sorties** Un tableau de tableaux contenant : * les 5 plus proches voisins parmi les images de référence * leurs indices dans imagesref """ pass # Préconditions assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste" for i in range(len(imagesref)): assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste" assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels" for i in range(1,len(image2test)): if (int(image2test[i]) not in range(256)): raise ValueError("L'un des éléments de imge2test au moins n'est pas un code de dégradés de gris") for j in range(len(imagesref)): for i in range(1,len(imagesref[j])): if(int(imagesref[j][i]) not in range(256)): raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.") # Préconditions references = copy.deepcopy(imagesref) i=0 five_ppv = [] while i<5: five_ppv.append(plusProcheVoisin(image2test,references)) references.pop(five_ppv[i][1]) i +=1 # Postconditions assert len(five_ppv) == 5,"la sortie ne contient pas 5 éléments" for i in range(len(five_ppv)): for j in range(1,len(five_ppv[i])): if (int(five_ppv[i][j]) not in range(256)): raise ValueError("L'un des éléments des cinq plus proches voisins au moins n'est pas un code de dégradés de gris") # Postconditions return five_ppv
def isDistanceMin(image2test: list, imageMin: list, imagesref: list) ‑> bool
-
Fonction booléenne qui renvoie True si la distance entre image2test et imageMin est inférieure ou égale à chaque distance entre image2test et un élément de imagesref
Paramètres
- image2test est une liste d'entiers dont le premier élément est un '?'
- imageMin est une liste dont il faut tester si la distance à image2test est minimale
- imagesref est l'échantillon d'images de référence
Préconditions
- image2test, imageMin et les éléments de imagesref sont les listes
- image2test et les éléments de imagesref ont le même nombre de pixels
- image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément
Postconditions
- la sortie est un booléen
Sortie
- Un booléen
Expand source code
def isDistanceMin(image2test:list,imageMin:list,imagesref:list)->bool: """ Fonction booléenne qui renvoie True si la distance entre image2test et imageMin est inférieure ou égale à chaque distance entre image2test et un élément de imagesref **Paramètres** * image2test est une liste d'entiers dont le premier élément est un '?' * imageMin est une liste dont il faut tester si la distance à image2test est minimale * imagesref est l'échantillon d'images de référence **Préconditions** * image2test, imageMin et les éléments de imagesref sont les listes * image2test et les éléments de imagesref ont le même nombre de pixels * image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément **Postconditions** * la sortie est un booléen **Sortie** * Un booléen """ pass #Préconditions assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste" assert isinstance(imageMin,list),"l'image candidate n'est pas sous forme de liste" assert len(image2test[1:])==len(imageMin[1:]),"image2test et imageMin n'ont pas le même nombre de pixels" for i in range(len(imagesref)): assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste" assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels" for i in range(1,len(image2test)): if (int(image2test[i]) not in range(256) or int(imageMin[i]) not in range(256)): raise ValueError("L'un des deux premiers paramètres au moins n'est pas un code de dégradés de gris") for j in range(len(imagesref)): for i in range(1,len(imagesref[j])): if(int(imagesref[j][i]) not in range(256)): raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.") #Préconditions # a priori c'est la plus petite distance isTrue = True i = 0 while (i<len(imagesref) and isTrue): if distance(image2test[1:],imageMin[1:])>distance(image2test[1:],imagesref[i][1:]): isTrue = False i = i+1 #Postconditions assert isinstance(isTrue,bool),"isTrue n'est pas un booléen" #Postconditions return isTrue
def plusDe3ou7(five_ppv_image2test: list) ‑> str
-
Fonction qui renvoie une chaine selon la valeur majoritaire parmi les 5 plus proches voisins d'une liste à tester
Paramètres
- five_ppv_image2test la liste des 5 plus proches voisins d'une liste à tester
Préconditions
- five_ppv_image2test est une liste de 5 listes
- chacune des listes est une liste de codes de gris
- le premier éléments de chaque liste est un 3 ou un 7
Postconsitions
- la sortie est une chaine qui vaur ' est un 3' ou ' est un 7'
Sortie
- Une chaine de caracteres
Expand source code
def plusDe3ou7(five_ppv_image2test:list)->str: """ Fonction qui renvoie une chaine selon la valeur majoritaire parmi les 5 plus proches voisins d'une liste à tester **Paramètres** * five_ppv_image2test la liste des 5 plus proches voisins d'une liste à tester **Préconditions** * five_ppv_image2test est une liste de 5 listes * chacune des listes est une liste de codes de gris * le premier éléments de chaque liste est un 3 ou un 7 **Postconsitions** * la sortie est une chaine qui vaur ' est un 3' ou ' est un 7' **Sortie** * Une chaine de caracteres """ pass # Préconditions assert len(five_ppv_image2test) == 5,"la liste en entrée ne contient pas 5 éléments" for i in range(len(five_ppv_image2test)): assert (five_ppv_image2test[i][0][0] == '3' or five_ppv_image2test[i][0][0] == '7'),"le premier élément de la liste "+str(i+1)+" n'est pas un 3 ou un 7" for j in range(1,len(five_ppv_image2test[i])): if (int(five_ppv_image2test[i][j]) not in range(256)): raise ValueError("L'un des éléments des cinq éléments de l'entrée au moins n'est pas un code de dégradés de gris") # Préconditions nb_3 = 0 nb_7 = 0 maxDe3ou7 = ' est un ' for i in range(len(five_ppv_image2test)): if five_ppv_image2test[i][0][0]=='3': nb_3 +=1 if five_ppv_image2test[i][0][0]=='7': nb_7 +=1 if (nb_3>nb_7): maxDe3ou7 +='3' else: maxDe3ou7 +='7' # Postconditions assert (maxDe3ou7 == " est un 3" or maxDe3ou7 == " est un 7"),"l'écart n'est pas un entier" # Postconditions return maxDe3ou7
def plusProcheVoisin(image2test: list, imagesref: list) ‑> list
-
Fonction qui renvoie, parmi un echantillon de référence, le plus proche voisin d'une liste à tester.
Paramètres
- image2test est une liste d'entiers dont le premier élément est un ?
- imagesref est une liste de listes dont le premier élément vaut 3 ou 7
Préconditions
- image2test et les éléments de imagesref sont les listes
- image2test et les éléments de imagesref ont le même nombre de pixels
- image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément
Postconsitions
- La sortie est un tableau de deux éléments
- le premier est une liste dont tous les éléments sont des codes entre 0 et 255
- le second un entier compris entre 0 et la taille de imagesref
- La distance avec image2test est minimale
Sorties Un tableau contenant :
- le plus proche voisin parmi les images de référence
- son indice dans imagesref
Expand source code
def plusProcheVoisin(image2test:list,imagesref:list)->list: """ Fonction qui renvoie, parmi un echantillon de référence, le plus proche voisin d'une liste à tester. **Paramètres** * image2test est une liste d'entiers dont le premier élément est un ? * imagesref est une liste de listes dont le premier élément vaut 3 ou 7 **Préconditions** * image2test et les éléments de imagesref sont les listes * image2test et les éléments de imagesref ont le même nombre de pixels * image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément **Postconsitions** * La sortie est un tableau de deux éléments * le premier est une liste dont tous les éléments sont des codes entre 0 et 255 * le second un entier compris entre 0 et la taille de imagesref * La distance avec image2test est minimale **Sorties** Un tableau contenant : * le plus proche voisin parmi les images de référence * son indice dans imagesref """ pass # Préconditions assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste" for i in range(len(imagesref)): assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste" assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels" for i in range(1,len(image2test)): if (int(image2test[i]) not in range(256)): raise ValueError("L'un des éléments de imge2test au moins n'est pas un code de dégradés de gris") for j in range(len(imagesref)): for i in range(1,len(imagesref[j])): if(int(imagesref[j][i]) not in range(256)): raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.") # Préconditions nbRefs = len(imagesref) # nombre d'images de référence ppv = [imagesref[0],0] # on initialise avec la premiere image # On teste toutes les images si on en trouve une plus proche on change ppv for i in range(nbRefs): if distance(image2test[1:],imagesref[i][1:])<distance(image2test[1:],ppv[0][1:]): ppv = [imagesref[i],i] # Postconditions assert len(ppv)==2,"la sortie n'a pas deux éléments" assert isinstance(ppv[0],list),"le premier élément de la sortie n'est pas une liste" for i in range(1,len(ppv[0])): assert (int(ppv[0][i]) in range(256)),"l'un des éléments de la liste de sortie n'est pas un code de gris" assert isinstance(ppv[1],int),"le second élément de la sortie n'est pas un entier" assert ppv[1] in range(len(imagesref)) assert isDistanceMin(image2test,ppv[0],imagesref) # Postconditions return ppv