Vous êtes sur la page 1sur 4

INFORMATIQUE

INFORMATIQUE CI 9 TP06
TRAITEMENT D’IMAGES

1- Représentation et manipulations élémentaires


Codage des images
Mosaïque de Pixels (pixel : acronyme de PICTure ELement, élément d’image).
Une image est représentée sur les supports numériques, par une mosaïque de pixels disposés en
matrice de L lignes et C colonnes. La valeur de chaque pixel décrit la luminosité émise par le pixel.
Images Noir & Blanc Chaque pixel d’une image Noir & Blanc (plus exactement une image en
niveaux de gris) est en général codé comme un entier non signé sur un octet (8 bits), le 0 codant le
noir, et le 255 le blanc (le maximum de lumière). Selon les modules utilisés, ce codage pourra
être converti en un float compris entre 0 et 1.
Images Couleur Chaque pixel d’une image Couleur est en général codé par 3 entiers non signés,
chacun codé sur un octet (8 bits), représentant dans l’ordre les intensités de chacune des 3 couleurs :
dans l’ordre, Rouge, Vert, Bleu. Pour chaque couleur, le 0 code l’absence de luminosité, et le 255 le
maximum d’intensité. Selon les modules utilisés, ce codage pourra être converti en 3 floats, chacun
compris entre 0 et 1.
Génération d’images à partir de tableaux numpy
On utilisera numpy pour manipuler les images comme des tableaux de valeurs. Pour ouvrir les
images et les afficher, on utilisera le module matplotlib.pyplot . Importer ces modules :

Il est pratique d’afficher simultanément plusieurs images dans une figure avec la fonction
plt.subplot(). Les instructions suivantes affichent 2 images im1 et im2 dans chacun des 2 subplots
d’une figure :

voir https://courspython.com/tracer-plusieurs-courbes.html pour la fonction subplot

Remarques
– l’argument interpolation = ’’nearest’’ spécifie à plt de ne pas faire d’interpolation entre les pixels
(enlevez le pour tester son effet).
– Par défaut, imshow normalise les données par leur min et leur max . On peut désactiver cette
normalisation en spécifiant manuellement les bornes, en ajoutant à l’appel de imshow les arguments
vmin et vmax .. (cf https://matplotlib.org/3.1.3/api/_as_gen/matplotlib.pyplot.imshow.html )
– on peut désactiver les axes et graduations avec plt.axis(’off’) .

1-1 Images de synthèse simples


M Salette- Lycée Brizeux- Quimper

Formes rectangulaires
1-. Image noir & blanc : créer un tableau de zeros de taille L x C nommé im1 :
im1=np.zeros((L,C)) , avec L = 10 et C = 15.
Exécuter la commande im1[2:6,10:12] = 1, ce qui met à 1 tous les pixels (l; c),
tels que
l ∈ [2; 6] et c ∈ [10; 12].
Utiliser l’argument cmap=’gray’ dans plt.imshow pour avoir une image en noir
et blanc
Faire afficher l’image. (tester aussi l’interpolation entre pixels)
Remarque : pour suivre les entités manipulées, utiliser la commande print() pour voir le contenu des
tableaux crées dans les différentes parties de ce TP

: CI9_TP06 Traitement d images_v20.doc- Page 1 sur 4


Créé le 03/02/2021 –  04/02/2021
INFORMATIQUE
INFORMATIQUE CI 9 TP06
1-2-. Image couleur créer un tableau de zéros de taille L x C x 3, nommé im2.
Exécuter la commande im2[4:6,2:13,0]=1, ce qui met à 1 la 1ère coordonnée (le Rouge) de tous les
pixels (l; c), tels que l ∈ [4; 6] et c ∈ [2; 13].

Mettre à 1 la 2ème coordonnée (le Vert), de tous les pixels (l; c), tels que l ∈ [2; 8] et c ∈ [4; 6].
Mettre à 1 le Bleu de tous les pixels (l; c), tels que l ∈ [2; 8] et c ∈ [10; 12].

Afficher im2 comme une image couleur

Créer Im3[:,:,0] comme une image de niveaux de gris et afficher Im3 en ajoutant dans plt.imshow
l’argument cmap=’gray’ .

1-3-. images aléatoires : Exécuter (avec par exemple L = 5 et C = 8) la commande


im4=np.random.rand(L,C,3), ce qui crée un tableau de taille L x C x 3, rempli de réels aléatoires
compris entre 0 et 1. (la commande random nécessite d’utiliser la bibliothèque numpy
voir doc https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.random.rand.html )

Afficher im4 en couleur,

1-4- Affichage en niveaux de gris :


Pour coder les couleurs, on peut utiliser des valeurs entre 0 et 1 de type float, on peut également
utiliser des entiers compris entre 0 et 255.
La commande im5= np.random.randint(0,255,size=(L,C)) permet de créer un tableau rempli
d’entiers compris entre 0 et 255
(voir doc https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.random.randint.html )

A ce stade, vous devez maîtriser la manière de créer une image codée sous forme de tableau

2- Manipulation d’images
La bibliothèque matplotlib. pyplot comporte des fonctionnalités de lecture et d'affichage des images
"bitmap" comme de simples matrices de pixels. Cela permet de s'affranchir de la lecture et du
décodage spécifique de l'en-tête d'un fichier (header), qui comporte des informations d'identification
du format de l'image, du nombre de lignes et de colonnes, de description éventuelle de la palette
couleur, etc.

: CI9_TP06 Traitement d images_v20.doc- Page 2 sur 4


Créé le 03/02/2021 –  04/02/2021
INFORMATIQUE
INFORMATIQUE CI 9 TP06
La fonction imread ('file.ext') permet de lire le fichier file.ext parmi les formats bitmap, png, jpg, bmp,
tif. (sous réserve que les biliothèques SIX et PIL soient installées, sinon, il faut utiliser une distribution
qui les intègrent)

Elle renvoie une matrice (numpy.array) d'éléments correspondant au codage couleur utilisé ( 1
élément (valeur) pour une image en niveau de gris, liste de 3 valeurs pour un codage RVB ou
YUC(luminance et chrominance), 4 valeurs pour un codage RVBA (RVB + transparence)).

L’image qui va être utilisée est l’image image01.png


Cette image est disponible au format bmp et png
Vous pouvez constater que la taille de ces images est dans un rapport
1 à 25 sans perte d’information

Vous pouvez visualiser cette image dans python

stocke dans la variable


image1 la matrice de
pixels contenue dans le
fichier image01.png
Permet de
retrouver les
données et les
caractéristiques
de l’image

La fonction shape de numpy permet alors de récupérer les informations de format de l'image
(hauteur, largeur, nb couleur utilisés pour son codage).

La fonction imshow(image1) permet d'afficher dans une figure le contenu de la variable image en
tant que photo.

Compléter le script pour pouvoir charger les 2 formats d’image : image01 ;bmp et image01.png et
comparer les caractéristiques des 2 formats d’image.

3- Inversion des couleurs


On propose d’écrire deux versions d'une même fonction
inverser(image) qui retourne une matrice image avec inversion du
codage RVB (image en négatif couleur). Il suffit pour cela de
remplacer chaque valeur d'intensité d'une nuance RVB par son
complément à 255.

Préliminaire : opération de copie


Créer une liste A=[1,2,3]
Créer B comme copie de A : B=A
Modifier dans la liste B le deuxième terme : B[1]=0
Faire afficher A

Reprendre la démarche en copiant le contenu de A : C=A[:]


Et en modifiant le deuxième terme : C[1]=0

Les instructions d'affectation en Python ne copient pas les objets, elles créent des liens entre la cible
et l'objet. Concernant les collections qui sont muables ou contiennent des éléments muables, une
copie est parfois nécessaire, pour pouvoir modifier une copie sans modifier l'autre
Nous allons utiliser le module copy
: CI9_TP06 Traitement d images_v20.doc- Page 3 sur 4
Créé le 03/02/2021 –  04/02/2021
INFORMATIQUE
INFORMATIQUE CI 9 TP06
Première version :
Compléter le script suivant

Parcourir les éléments du tableau et les


remplacer par leurs compléments à 255

Deuxième version :
Compléter le script pour faire afficher l’image d’origine et sa copie inversée :

4- Symétrie
Ecrire une fonction symetrie(image) qui renvoie l’image symétrique
Cette fonction pourra s’appuyer sur a première version du script inverser

: CI9_TP06 Traitement d images_v20.doc- Page 4 sur 4


Créé le 03/02/2021 –  04/02/2021

Vous aimerez peut-être aussi