1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| from PIL import Image
# CONVERTIR LISTE EN INTEGER
def t2i(tup):
liste = list(tup) # Eventuelle conversion en liste si l'entree est un tuple
n0 = int(liste[0]/255)
n1 = int(liste[1]/255)
n2 = int(liste[2]/255)
return n0+n1+n2
n = (0,0,0)
b = (255,255,255)
# SQUELETTISATION
def squelettiser(img):
imgskel=Image.new(img.mode, img.size)
largeur=img.size[0]-2
hauteur=img.size[1]-2
for y in range(2,hauteur):
for x in range(2,largeur):
# VOISINAGE DE P0
P0 = img.getpixel((x,y))
P1 = img.getpixel((x,y+1))
P2 = img.getpixel((x-1,y+1))
P3 = img.getpixel((x-1,y))
P4 = img.getpixel((x+1,y-1))
P5 = img.getpixel((x,y-1))
P6 = img.getpixel((x+1,y-1))
P7 = img.getpixel((x+1,y))
P8 = img.getpixel((x+1,y+1))
# NOMBRE DE VOISINS BLANCS DE P0
N_P0 = t2i(P1) + t2i(P2) + t2i(P3) + t2i(P4) + t2i(P5) + t2i(P6) + t2i(P7) + t2i(P8)
H_P0 = 0 # Nombre de transitions du blanc vers le noir du pixel P0
H1_P0 = 0 # Voir les dernières conditions
H3_P0 = 0
N_P0 = 0
condition1 = 0
condition2 = 0
condition3 = 0
condition4 = 0
condition5 = 0
# NOMBRE DE TRANSITIONS BLANC => NOIR
if P0 == n:
if P8 == b and P1 == n:
H_P0 = H_P0 + 1
if P1 == b and P2 == n:
H_P0 = H_P0 + 1
if P2 == b and P3 == n:
H_P0 = H_P0 + 1
if P3 == b and P4 == n:
H_P0 = H_P0 + 1
if P4 == b and P5 == n:
H_P0 = H_P0 + 1
if P5 == b and P6 == n:
H_P0 = H_P0 + 1
if P6 == b and P7 == n:
H_P0 = H_P0 + 1
if P7 == b and P8 == n:
H_P0 = H_P0 + 1
# CONDITION 1
if 1 <= N_P0 <= 6:
condition1 = 1
# CONDITION 2
if condition1 and H_P0 == 1:
condition2 = 1
# CONDITION 3
if condition2 and t2i(P1) + t2i(P3) + t2i(P5) + t2i(P7) >= 1:
condition3 = 1
# CONDITION 4
if P1 == b:
H1_P0 = 1
if condition3 and (H1_P0 == 1 or P3 == n):
condition4 = 1
# CONDITION 5
if P3 == b:
H3_P0 = 1
if condition4 and (H3_P1 == 1 or P1 == n):
condition5 = 1
# EFFACER PIXEL P0
if condition5:
img.putpixel((x,y),b)
else:
img.putpixel((x,y),n)
else:
img.putpixel((x,y),b)
data=list(img.getdata())
imgskel.putdata(data)
imgskel.save("Image_Squelette.png") |
Partager