Filtre image couleurs

III/Différents filtres et modifications sur une image

Le traitement d'images est une discipline de l'informatique et des mathématiques appliquées qui étudie les images numériques et leurs transformations, dans le but d'améliorer leur qualité ou d'en extraire de l'information.

Exercice :

Rajouter une bordure à une image Koeberle.jpg

1
from PIL import Image
2
Image_Depart='Koeberle.jpg'
3
4
imageSource=Image.open(Image_Depart)
5
imageSource.show()
6
7
Largeur,Hauteur=imageSource.size
8
9
imageResultat=Image.new( "RGB" , ( Largeur+20 ,Hauteur+20) )
10
11
for x in range (Largeur) :
12
  for y in range (Hauteur):
13
    p=imageSource . getpixel ((x,y))
14
    imageResultat.putpixel((x+10,y+10),p)
15
16
Couleur_Bordure=(255,160,0)
17
18
for x in range (10) :
19
  for y in range (Hauteur+20):
20
    imageResultat.putpixel((x,y),Couleur_Bordure)
21
22
imageResultat.show()

Programme amélioré

1
# Rajout d'un cadre autour de l'image
2
import os.path # Importation du module Fichier
3
from PIL import Image # Importation du Module Pillow Image
4
#Chemin vers l'image
5
Repertoire='koeberle.jpg'
6
Repertoire_Sauvegarde='BordureAvecPil.pgm'
7
8
#Epaisseur de la bordure
9
Largeur_Bordure=25
10
#Couleur RVB de la bordure à rajouter
11
# qui peut être choisi dans Paint
12
Couleur_Bordure=(255,160,0)
13
14
# ouverture de l'image
15
if os.path.exists(Repertoire):
16
    imageSource=Image.open(Repertoire)
17
    # récupère les dimensions de l'image
18
    Largeur,Hauteur=imageSource.size
19
20
    Nouvelle_Largeur=Largeur+2*Largeur_Bordure
21
    Nouvelle_Hauteur=Hauteur+2*Largeur_Bordure
22
23
    imageBuffer=Image.new( "RGB" , ( Nouvelle_Largeur , Nouvelle_Hauteur ) )
24
# ouverture de l'image en mode couleur
25
    # pour chaque ligne:
26
    for y in range (Hauteur):
27
        #pour chaque colonne:
28
        for x in range (Largeur) :
29
            # récupère le niveau de gris du pixel en position (x,y)
30
            p=imageSource . getpixel ((x,y))
31
            imageBuffer.putpixel((x+Largeur_Bordure,y+Largeur_Bordure),p)
32
    #Rajout de la bordure haute
33
    for y in range (Largeur_Bordure):
34
        #pour chaque colonne:
35
        for x in range (Nouvelle_Largeur) :
36
            imageBuffer.putpixel((x,y),Couleur_Bordure)
37
    #Rajout de la bordure basse
38
    for y in range (Hauteur+Largeur_Bordure,Nouvelle_Hauteur):
39
        #pour chaque colonne:
40
        for x in range (Nouvelle_Largeur) :
41
            imageBuffer.putpixel((x,y),Couleur_Bordure)
42
    #Rajout de la bordure gauche
43
    for y in range (Largeur_Bordure,Hauteur+Largeur_Bordure):
44
        #pour chaque colonne:
45
        for x in range (Largeur_Bordure) :
46
            imageBuffer.putpixel((x,y),Couleur_Bordure)
47
   #Rajout de la bordure droite
48
    for y in range (Largeur_Bordure,Hauteur+Largeur_Bordure):
49
        #pour chaque colonne:
50
        for x in range (Largeur+Largeur_Bordure,Nouvelle_Largeur) :
51
            imageBuffer.putpixel((x,y),Couleur_Bordure)
52
    # sauvegarde de l ' image créée :
53
    imageBuffer.save(Repertoire_Sauvegarde)
54
    imageBuffer.show( )
55
56
else:
57
    print("L'image n'existe pas!")
58

Exercice : Programmer :

a) La Symétrie horizontale

1
from PIL import Image
2
Image_Source=Image.open("Koeberle.jpg")
3
longeur,largeur=Image_Source.size
4
Image_Finale=Image.new("RGB",(longueur,largeur))
5
for x in range(longueur):
6
    for y in range(largeur):
7
        couleur=Image_Source.getpixel((x,y))
8
        Image_Finale.putpixel((x,largeur-1-y),couleur)
9
Image_Finale.show()

b) La Symétrie verticale

c) La rotation de 90°

Inversion des coordonnées x et y

d) Filtrage vert

Ne conserve que la composante verte de chaque pixel

e) Seuillage

Quand chacun des trois canaux à une valeur supérieure à un certain seuil mettre le pixel correspondant en couleur rouge

(par exemple au seuil 150)

if p[0]>90 and p[1]>90 and p[2]>90 : p=(255 ,0 ,0)

f) Image en négative

Calculer le complémentaire sur chacune des couleurs pixel par pixel (canal=255-canal)

g) Fusionner deux images de même dimension

En prenant le maximum des 3 composantes pixel par pixel

entre les deux images

h) Transformation en niveau de gris

«Moyenne» : niveau de gris correspond à V=B=R =\( \frac{R+V+B}{3}\)

« Clarté » : niveau de gris correspond à V=B=R = \(\frac{min(R,V, B)+max(R,V,B)}{2}\)

« PAL » : niveau de gris correspond à V=B=R = \(0,299 \times R+0,587 \times V+0,114 \times B\)

i) Transformer en noir et blanc une image en nuance de gris

Il faut se fixer un seuil, par exemple 128 :

o Au-dessus de ce seuil , la couleur est blanche ( 0 )

o En-dessous de ce seuil, la couleur est noire (255)