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