Livre_silo 30 août 2013 16:32 Page 361
¨
©
¨
©
¨
©
¨
©
C o p y r i g h t E y r o l l e s
361
A – Travaux pratiques
def negatif(image):
for ligne in image:
for i in range(len(ligne)):
ligne[i] = 255 - ligne[i]
Il apparaît vite que beaucoup des fonctions de traitement de l’image auront cette structure.
On peut donc commencer par rendre leur écriture plus efficace.
1 Écrire une fonction traitement qui prend pour arguments une image et une fonction,
puis applique cette fonction sur la valeur de chacun des pixels de l’image.
2 Redéfinir effacer et negatif à l’aide de traitement. L’utilisation d’une fonction anonyme
est recommandée.
3 On joue maintenant sur la luminosité de l’image : puisque les valeurs les plus hautes
sont les plus claires, il suffit d’augmenter les valeurs des pixels pour éclaircir l’image
et de les diminuer pour l’assombrir. On est alors tenté d’appeler traitement avec une
fonction comme lambda x: x + 50.
On s’aperçoit vite que l’effet obtenu n’est pas celui escompté : tous les pixels dont la
valeur était supérieure à 205 reçoivent une valeur entre 255 et 305. Comme les valeurs
des pixels sont comptées modulo 255, ces pixels deviennent en fait presque noirs.
Écrire une fonction qui éclaircit une image en s’assurant par un test que la valeur des
pixels est plafonnée à 255.
4 La solution précédente n’ est pas satisfaisante car elle crée de grands aplats blancs dans
les zones les plus claires (on pourra augmenter la valeur des pixels de 100 ou 150 pour
s’ en convaincre).
À l’aide de la fonction racine carrée, construire une bijection de [0; 255] dans [0; 255].
Programmer cette fonction pour qu’ elle manipule et renvoie des entiers (ce n’est alors
évidemment plus une bijection).
Passer cette fonction en paramètre à traitement et vérifier le résultat obtenu ⁹.
5 Construire de même une solution pour assombrir une image.
6 Tracer le graphe de la fonction f : x → 128 + signe(x − 128) ×
√
128 |x − 128| sur
[0; 255].
À l’aide de ce graphe, prévoir l’effet qu’aura cette fonction sur l’image, puis tester votre
hypothèse.
7 Expérimenter avec des fonctions linéaires, non monotones, etc.
A.7.2 Traitement local
On s’intéresse maintenant à des traitements qui font intervenir plusieurs pixels voisins. La
fonction traitement écrite dans la partie précédente n’est donc plus utilisable.
1 Écrire une fonction qui produit une image floutée. Pour cela, il suffit de remplacer
chaque pixel par la moyenne des pixels qui l’entourent.
9. Cette méthode se généralise aux fonctions de la forme x → x γ avec γ > 0. C’est la fameuse correction
gamma proposée dans les logiciels de retouche photographique.
Précédent

- 374/402

Suivant