1. Filtre moyen
Il existe de nombreux filtres que l’on peut appliquer à une image.
Le filtre moyen consiste à remplacer la couleur de chaque pixel par la moyenne des couleurs des pixels mitoyens.
Par exemple, si la taille du filtre est 3, on remplacera la couleur du pixel central par la moyenne des couleurs des pixels situés dans le carré de côté 3 et centré sur ce pixel.
Pour une taille de filtre de 5, on considèrera les 25 pixels situés dans le carré de côté 5.
Recopier et compléter les fonctions moyenne() et adoucissement()
from PIL import Image # on importe la classe Image et ses méthodes de la
# bibliothèque Pillow alias PIL
image = Image.open("Mona_Lisa.jpg") # Chargement d'une image avec PIL
# image est déclarée comme un objet de la classe Image de PIL
def taille(img):
return img.size # méthode propre à la classe Image
def format(img):
return img.format # méthode propre à la classe Image
def lire_pixel(img,x,y):
return img.getpixel((x,y)) # méthode propre à la classe Image
def changer_pixel(img,x,y,couleur):
image=img
image.putpixel((x,y),couleur) # méthode propre à la classe Image
return image
def afficher(img):
img.show()
def moyenne(img,x,y,c):
'''
calcule la moyenne des pixels du carré de côté c
centré sur le pixel de coordonnées (x,y)
return : tuple de type (R,V,B)
attention aux pixels sur le bord de l'image
'''
def filtre_moyenne(img,c):
'''
remplace tous les pixels de l'image
par la valeur moyenne calculée sur le
carré de côté c pixel
'''
2. Pixelisation d’une image
On considère un carré de côté c placé au coin supérieur gauche de l’image et qui se déplace horizontalement ou verticalement par translation de longueur c.
On change la couleur de chaque pixel situé dans ce carré par la valeur moyenne des pixels contenus dans celui-ci.
On obtient alors un phénomène de pixelisation de l’image.
Ci-dessous un exemple de pixelisation pour c = 3
3. Filtre vert
On considère les deux images ci-dessous.
Créer une fonction incrustation() qui permet d’incruster la première dans la seconde.
Proposition de correction du filtre moyen et de la moyenne :
from PIL import Image # on importe la classe Image et ses méthodes de la
# bibliothèque Pillow alias PIL
image = Image.open("Mona_Lisa.jpg") # Chargement d'une image avec PIL
# image est déclarée comme un objet de la classe Image de PIL
def taille(img):
return img.size # méthode propre à la classe Image
def format(img):
return img.format # méthode propre à la classe Image
def lire_pixel(img,x,y):
return img.getpixel((x,y)) # méthode propre à la classe Image
def changer_pixel(img,x,y,couleur):
image=img
image.putpixel((x,y),couleur) # méthode propre à la classe Image
return image
def afficher(img):
img.show() # méthode propre à la classe Image
def moyenne(img,x,y,c):
moyenne_r,moyenne_v,moyenne_b=0,0,0
compteur=0
(l, h) = taille(image)
for y1 in range(y-c//2,y+1+c//2):
for x1 in range(x-c//2,x+1+c//2):
if x1>=0 and x1<l and y1>=0 and y1<h:
compteur+=1
couleur = lire_pixel(image,x1,y1)
moyenne_r+=couleur[0]
moyenne_v+=couleur[1]
moyenne_b+=couleur[2]
return moyenne_r//compteur,moyenne_v//compteur,moyenne_b//compteur
def filtre_moyenne(img,c):
image_retour=img.copy()
(l, h) = taille(image)
for y in range(h):
for x in range(l//2):
nouvelle_c=moyenne(img,x,y,c)
image_retour=changer_pixel(image_retour,x,y,nouvelle_c)
afficher(image_retour)
return image_retour