énoncé - mp933.fr

publicité
Stage ÉNS Lyon 2013
Cours/TP Python
Manipulations d’images
Samedi 29 juin 2013
[email protected]
Exercice 1 Créer un dossier de travail. Dedans, créer deux sous-répertoires FilesIn/ et FilesOut/.
Placer joconde.bmp dans FilesIn/. Lancer Python. CTRL S ; F5
1
Manipulation des fichiers bitmap
Quoi
THE librairie...
Ouverture (en lecture)
Récupérer la taille
Conversion en niveaux (Levels) de gris
Sauvons Mona Lisa
Si on préfère le jpg...
ou le pdf...
Comment
import Image
Mona = Image.open(’FilesIn/joconde.bmp’)
Mona.size
MonaBlack = Mona.convert(’L’)
MonaBlack.save(’FilesOut/jocondeBW.bmp’)
Mona.save(’FilesOut/joconde.jpg’)
Mona.save(’FilesOut/joconde.pdf’)
Les données sont accessibles via la méthode getdata(), qui fournit un objet pouvant être transformé
en liste. Pour le travail inverse, il s’agit de la méthode putdata(). Si on travaille avec numpy (et c’est
bien pratique...), on passera par des array.
Quoi
Extraire les données...
et en faire une liste (linéaire)
Mettre les données dans un tableau numpy
Créer une image depuis la liste de ses pixels
Pareil... depuis le tableau de ses pixels
2
Comment
donnees = MonaBlack.getdata()
ldonnees = list(donnees)
bar = numpy.array(MonaBlack)
MonaAgain = Image.new(MonaBlack.mode,MonaBlack.size)
MonaAgain.putdata(ldonnees)
OneMoreMona = Image.fromarray(bar,mode=’L’)
Exercices
2.1
Distribution de niveaux de gris
Faisons comme s’il n’existait pas de méthode histogram() faisant ce qu’on imagine...
Exercice 2 L’image noir et blanc de Mona Lisa nous fournit 350 × 540 pixels, qui sont des entiers
entre 0 et 255. Déterminer la loi de répartition de ces pixels (bref : une liste de 256 éléments décrivant le
nombre de pixels ayant telle valeur). Sauver ces valeurs (ainsi que les sommes cumulées) dans un fichier
csv. Comparer avec la méthode histogram(). Enfin, regarder l’effet de cette méthode sur une image en
couleur.
L’exercice suivant est réservé à ceux qui connaissent déjà matplotlib. Les autres iront voir le corrigé !
Exercice 3 Représenter l’histogramme de la Joconde avec matplotlib.
Exercice 4 Comparer l’histogramme de Mona Lisa lorsqu’elle passe du format bmp au format jpg.
1
2.2
Floutage
Pour flouter une image, un procédé raisonnable consiste à remplacer chaque pixel par la moyenne des
pixels sur un certain voisinage (typiquement, les 9, 25 ou 49 voisins...). Si on travaille en couleurs, on
fait la même chose sur chaque composante RGB.
On va travailler avec numpy, qui offre ici trois avantages :
– on récupère un tableau au bon format (au passage, ses dimensions sont données par le champ shape
du tableau) ;
– on peut « slicer » facilement un sous-tableau via t[i1:i2 , j1:j2], et on fait facilement la somme
d’un tel sous-tableau via numpy.sum.
– les calculs sont censés être rapides (mouais...).
Exercice 5 Écrire une fonction réalisant le floutage d’une image (noir et blanc, ou RGB, composante
par composante).
2.3
Découpage et collage
Exercice 6 Mettre un bandeau bleu sur les yeux de Mona Lisa.
Exercice 7 Échanger deux zones rectangulaires de la Joconde.
3.1
Annexes
L’histogramme
Distribution des pixels pour la Joconde
1.0
Distribution; somme normalisée
3
0.8
0.6
0.4
0.2
0.00
32
64
96
128
160
Niveaux de gris
192
Figure 1 – Mona Lisa dévoilée
2
224
256
3.2
Floutage
Figure 2 – Les effets terribles du floutage
3.3
Copier/coller
Figure 3 – Mona Lisa préfère ne plus voir ces bêtises
3
Téléchargement