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


from PIL import Image
Image_Depart='Koeberle.jpg'
imageSource=Image.open(Image_Depart)
imageSource.show()
Largeur,Hauteur=imageSource.size
imageResultat=Image.new( "RGB" , ( Largeur+20 ,Hauteur+20) )
for x in range (Largeur) :
for y in range (Hauteur):
p=imageSource . getpixel ((x,y))
imageResultat.putpixel((x+10,y+10),p)
Couleur_Bordure=(255,160,0)
for x in range (10) :
for y in range (Hauteur+20):
imageResultat.putpixel((x,y),Couleur_Bordure)
imageResultat.show()
Programme amélioré
# Rajout d'un cadre autour de l'image
import os.path # Importation du module Fichier
from PIL import Image # Importation du Module Pillow Image
#Chemin vers l'image
Repertoire='koeberle.jpg'
Repertoire_Sauvegarde='BordureAvecPil.pgm'
#Epaisseur de la bordure
Largeur_Bordure=25
#Couleur RVB de la bordure à rajouter
# qui peut être choisi dans Paint
Couleur_Bordure=(255,160,0)
# ouverture de l'image
if os.path.exists(Repertoire):
imageSource=Image.open(Repertoire)
# récupère les dimensions de l'image
Largeur,Hauteur=imageSource.size
Nouvelle_Largeur=Largeur+2*Largeur_Bordure
Nouvelle_Hauteur=Hauteur+2*Largeur_Bordure
imageBuffer=Image.new( "RGB" , ( Nouvelle_Largeur , Nouvelle_Hauteur ) )
# ouverture de l'image en mode couleur
# pour chaque ligne:
for y in range (Hauteur):
#pour chaque colonne:
for x in range (Largeur) :
# récupère le niveau de gris du pixel en position (x,y)
p=imageSource . getpixel ((x,y))
imageBuffer.putpixel((x+Largeur_Bordure,y+Largeur_Bordure),p)
#Rajout de la bordure haute
for y in range (Largeur_Bordure):
#pour chaque colonne:
for x in range (Nouvelle_Largeur) :
imageBuffer.putpixel((x,y),Couleur_Bordure)
#Rajout de la bordure basse
for y in range (Hauteur+Largeur_Bordure,Nouvelle_Hauteur):
#pour chaque colonne:
for x in range (Nouvelle_Largeur) :
imageBuffer.putpixel((x,y),Couleur_Bordure)
#Rajout de la bordure gauche
for y in range (Largeur_Bordure,Hauteur+Largeur_Bordure):
#pour chaque colonne:
for x in range (Largeur_Bordure) :
imageBuffer.putpixel((x,y),Couleur_Bordure)
#Rajout de la bordure droite
for y in range (Largeur_Bordure,Hauteur+Largeur_Bordure):
#pour chaque colonne:
for x in range (Largeur+Largeur_Bordure,Nouvelle_Largeur) :
imageBuffer.putpixel((x,y),Couleur_Bordure)
# sauvegarde de l ' image créée :
imageBuffer.save(Repertoire_Sauvegarde)
imageBuffer.show( )
else:
print("L'image n'existe pas!")
Exercice : Programmer :
a) La Symétrie horizontale

from PIL import Image
Image_Source=Image.open("Koeberle.jpg")
longeur,largeur=Image_Source.size
Image_Finale=Image.new("RGB",(longueur,largeur))
for x in range(longueur):
for y in range(largeur):
couleur=Image_Source.getpixel((x,y))
Image_Finale.putpixel((x,largeur-1-y),couleur)
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)
