1 Importer une image 2 Avec d`autres images

Transcription

1 Importer une image 2 Avec d`autres images
IPT
2014–2015
L’objectif de ce TP est de travailler avec du traitement d’images. L’inspiration de ce
TP vient en majeure partie d’un article écrit par Emmanuelle Gouillart et Gaël Varoqueaux, physicien·ne·s geeks. Il existe une bibliothèque de scipy qui réalise automatiquement plusieurs des opérations que l’on va faire ici.
TP 12
Cyan
1 Importer une image
F IGURE 1 – Schéma de Image1
Pour ce TP, on utilisera une image disponible sur le site (Image1.txt) 1 .
On utilisera pour commencer les lignes suivantes :
from matplotlib.pyplot import imread
import matplotlib.pyplot as plt
On vérifiera avec la commande pwd qu’on travaille bien dans le bon répertoire, et on
placera l’image Image1.txt dans ce répertoire.
Si les choses se passent bien, vous devriez pouvoir directement écrire im =
imread(’Image1.txt’,format=’png’) et regarder le contenu du tableau im.
Ï Question 1 Ce tableau est un tableau numpy classique dont les deux premières
dimensions sont la hauteur et la largeur de l’image. Quelle est la taille de l’image sur
laquelle on travaille ?
Pour chaque pixel de l’image, im contient un tableau de trois valeurs, qui indiquent
à quel point les pixels rouge, vert et bleu sont allumés, dans cet ordre. Par exemple, le
pixel de coordonnées (1, 0) est un tableau contenant les valeurs [0,1.,1.] signifiant
que les pixels vert et bleu sont complètement allumés, ce qui donne un bleu cyan.
Ï Question 3 Tester cette commande. Qu’en pensez-vous ? Vérifier que vos couleurs sont bien les bonnes quand même. On peut également rajouter comme option
à imshow le paramètre optionnel interpolation=’nearest’ qui évite que pyplot
essaye de faire l’interpolation 2 . On peut alors complètement vérifier les couleurs de
l’image. On pensera à rajouter « interpolation=nearest » quand on affiche des
images de petite dimension.
2 Avec d’autres images
Ï Question 4 Charger en mémoire, comme ci-dessus, l’image Image2.txt. Noter
que c’est une image en nuances de gris, et donc elle est représentée par un tableau en
deux dimensions seulement. Quelle est sa taille ? Que se passe-t-il quand on essaye de
l’afficher avec imshow ?
Ï Question 5 Pour corriger le problème précédent, il faut rajouter le paramètre :
plt.imshow(im,cmap=plt.cm.gray).
Afficher enfin l’image.
Ï Question 2 Décrire 4 des 8 autres couleurs (de votre choix) de l’image et compléter
le tableau ci-dessous (à peu près).
Ï Question 6 Quelle proportion des pixels de l’image sont complètements blancs ?
On peut également afficher l’image en utilisant l’instruction plt.imshow(im).
Ï Question 7 Vérifier que cette image contient plus de 50 nuances de gris différentes. Combien y en a-t-il exactement ?
1. Cette image n’est pas vraiment au format txt, mais peu importe ici
2. L’interpolation consiste à faire en sorte que l’affichage des pixels soit continu, et diminue le phénomène de pixelisation.
1/2
IPT
2014–2015
3 Manipulation d’image
TP 12
Ï Question 13 Faire afficher, avec les principes précédents, un damier de plateau
d’échec (damier 8 × 8, avec une case blanche en bas à droite)
Ï Question 8 En prenant des tranches dans la matrice, affcher seulement l’œil droit
de Benedict Cumberbatch.
On va maintenant travailler sur un automate cellulaire. On considère une matrice
200 × 200 contenant uniquement des 0 (blanc) et des 1 (noirs). La première ligne
ne contient que des 0 sauf un 1 au milieu. Ensuite, on remplit la matrice ligne par
ligne par la règle suivante : chaque case dépend de la ligne précédent avec la règle
suivante (dite règle 254) :
Ï Question 9 Prendre le négatif de cette image (entière) et l’afficher.
Ï Question 10 On souhaite éclaircir l’image. Pour le moment, chaque pixel possède
une valeur comprise entre 0 et 1. On considère f : [0, 1] → [0, 1], x 7→ x 1−ε , avec ε > 0
(par exemple, on prendra ε = 0,1)). Afficher l’image obtenue par application de f à
toutes les valeurs de l’image 3 . On pensera à utiliser la fonction np.vectorize pour
accélérer les choses. Que se passe-t-il si on prend ε = 0,7 ?
Règle 254
Ï Question 14 Calculer la matrice en question et l’afficher (oui, le résultat était prévisible, en fait).
Ï Question 11 On souhaite maintenant effectuer un flou gaussien sur l’image.
Techniquement, cela revient à changer tous les pixels par la moyenne des 4 pixels voisins. Écrire une fonction flou(m) qui prend en entrée une matrice et renvoie une nouvelle matrice obtenue en « floutant » celle-ci. Vérifier cette fonction en l’appliquant un
certain nombre de fois sur l’image 2 et en afichant le résultat. La fonction devra rendre
une matrice de même taille que l’originale, mais les pixels sur le bord peuvent être
inchangés.
Ï Question 15 Même question avec les règles 50 et 126 ci-dessous.
Ï Question 12 Comment pourrait-on accélérer cette fonction (toujours en ignorant
les effets sur les pixels au bord ?). Si vous obtenez une procédure rapide, vous devriez
pouvoir flouter 250 fois de suite l’image presque instantanément (moins d’une seconde
sur un ordinateur personnel).
Ï Question 16 Imaginez ce que peut être la règle 30 et la règle 126, et les programmer et afficher le résultat.
Règle 190
Règle 126
4 Création d’image et automate cellulaire
3. Cela correspond à ce que fait l’outil "Courbes" sur les logiciels de traitement d’image, pour une
fonction particulière.
2/2