Les fonctions demandées
Vous allez devoir coder une série de fonctions effectuant certains traitements d'images. Il faudra ensuite tester ces fonctions. La structure de votre programme principal sera très lisible :
# lecture de l'image à traiter
photo=Image.open("vaugelas.jpg")
# utilisation de la fonction
photo2=traitement(photo)
# ériture et affichage de la nouvelle image
photo2.show()
photo2.save("vaugelastransfo.png")
Pour chaque fonction vous devez :
- Coder la fonction bien sùr...
- Décrire les pré-conditions et les post conditions dans la docstring de chaque fonction
- Préciser dans la docstring la complexité de la fonction codée
Inverser les niveaux de gris (ou effet négatif)
négatif
Votre travail consistera donc à écrire la fonction négatif dont l'entête sera
def negatif(photo)
.
La fonction à compléter sera donc :
def negatif(photo):
taille=photo.size
for i in range(taille[0]):
for j in range(taille[1]):
#####
return #####
Pour rendre opérationnelle la fonction précédente, il faudra utiliser les méthodes
getpixel
et putpixel
pour récupérer la valeur des pixels et les modifier.
Pour trouver cette modification, posez vous les questions suivantes. (on suppose que l'image comporte 256 niveaux de gris -de 0 à 255- ).
- Quel est le négatif d'un pixel de valeur 255 ?
- Quel est le négatif d'un pixel de valeur 0 ?
- Quel est le négatif d'un pixel de valeur 100 ?
- Quel est le négatif d'un pixel de valeur 200 ?
Conversion de niveaux de gris en noir et blanc "pur"
image en noir et blanc
Vous devez compléter la fonction ci-dessous puis la tester avec une image simple.
def NetB(photo, seuil):
return #####
Dans un premier temps écrivez l'algorithme réalisant cette fonction et proposez votre solution au professeur, avant de coder la fonction. Vous écrirez ensuite le programme principal qui convertira en noir et blanc pur une image simple en niveau de gris au format pgm.
Contour d'une image
Voici un algorithme réalisant la détection du contour d'une image selon un seuil variable.
image en noir et blanc
données :
data: liste des pixel d'une image
largeur, hauteur : dimension de l'image
niveauxGris : niveau maximal du codage en niveaux de gris
seuil : entier seuil de détection du contour d'une image
résultat :
tableau data
fonction :
i parcours l'intervalle (0,hauteur-1)
j parcours l'intervalle (0,largeur-1)
a = valeur du pixel (i,j)
b = valeur du pixel (i+1,j)
c = valeur du pixel (i,j+1)
si |a-b|>seuil ou si |a-c|>seuil
alors le pixel (i,j) reçoit 0
sinon le pixel (i,j) reçoit 255
retourner le tableau data
Le principe de l'algorithme consiste à détecter si le contraste entre deux pixels proches et supérieur ou non à un seuil. Le pixel devient alors noir ou blanc. L'image transformée est donc ensuite purement noir ou blanche.
Il ne vous reste "plus" qu'a coder cet algorithme.
Miroir
miroir
L'objectif de cette fonction est d'appliquer l'effet miroir vertical à une image.
Dans un premier temps écrivez l'algorithme réalisant cette fonction et proposez votre solution au professeur, avant de coder la fonction (dont l'entête cette fois n'est pas fourni).
Vous écrirez ensuite la fonction qui appliquera l'effet miroir à une image.
def miroir(photo):
return #####
Redimensionner
redimensionner
Vous allez devoir maintenant coder une fonction de redimensionnement d'image.
Les dimensions de l'image seront multipliées par le réel facteur
. Si facteur est supérieur à 1 l'image est agrandie, s'il est inférieur à 1, l'image sera diminuée. L'entête de la fonction est donnée ci-dessous :
def Redim(photo, facteur):
...
return #####
image en noir et blanc
données :
data: liste des pixel d'une image
largeur, hauteur : dimension de l'image
niveauxGris : niveau maximal du codage en niveaux de gris
seuil : entier seuil de détection du contour d'une image
résultat :
tableau data
fonction :
i parcours l'intervalle (0,hauteur-1)
j parcours l'intervalle (0,largeur-1)
a = valeur du pixel (i,j)
b = valeur du pixel (i+1,j)
c = valeur du pixel (i,j+1)
si |a-b|>seuil ou si |a-c|>seuil
alors le pixel (i,j) reçoit 0
sinon le pixel (i,j) reçoit 255
retourner le tableau data
miroir
def miroir(photo):
return #####
redimensionner
def Redim(photo, facteur):
...
return #####