MP1 Lycée Janson de Sailly Traitement des images
Le repérage d’un pixel se fait dans un plan (Oxy), l’axe Ox étant
TD : TRAITEMENT DES IMAGES (en général) orienté vers le bas. L’origine O est au centre du pixel
situé tout en haut et à gauche et Le centre de chaque pixel est alors
repéré par les coordonnées a × (i, j), i et j étant deux entiers, avec
i ∈ [[ 0, L − 1 ]] et j ∈ [[ 0, C − 1 ]]. L est le nombre de lignes de pixels
1 Caractéristiques d’une image
et C le nombre de colonnes.
1.1 Les pixels
Une image est un ensemble de pixels qui peuvent être définis 1.2 La résolution
comme des zones carrées identiques de dimensions (a × a). La couleur La résolution d’une image est donnée par la taille a d’un pixel. On
de chaque pixel est uniforme et l’aspect non granulaire d’une image l’exprimer en nombre de pixels par centimètre ou bien en nombre de
n’est dû qu’au fait que la taille des pixels est très petite. La figure pixels par pouce (inch pour les anglo-saxons) avec la conversion : 1
ci-dessous donne un exemple d’image "binaire" représentant un A. Il pouce = 2,54 cm. Dans ce dernier cas, la résolution sera donnée en
n’y a ici que deux couleurs : noir et blanc. dpi : dots per inch, sachant qu’un dot est un point, c’est à dire un
!
Colonnes
pixel.
0 1 2 C-1
y
0 1.3 La couleur
1
2 Toute couleur peut être obtenue comme une combinaison linéaire
des 3 couleurs primaires rouge, vert et bleu. Une couleur peut être
représentée par un triplet (r, v, b) ou r, v, et b représentent les inten-
sités de rouge, de vert et de bleu qui donnent, par superposition, la
couleur souhaitée.
Lignes
Les trois coordonnées chromatiques r, v et b peuvent varier
!
entre 0 et une valeur maximale M . Le noir correspond à (0, 0, 0) et
le blanc à (M, M, M). Dans les matériels où chaque composante est
un entier codé sur 1 octet (8 bits) : M = 255.
L-2
L-1 Par exemple, rgb = (217, 74, 47) représente une couleur orange. Un
logiciel comme paint permet d’obtenir les coordonnées chromatiques
x
de chaque couleur.
1
MP1 Lycée Janson de Sailly Traitement des images
1.4 Représentation d’une image 2 Quelques manipulations de base
Une image est donc un ensemble de pixels organisés en lignes et
2.1 Extraction des matrices R, V et B
colonnes. Notons L le nombre total de lignes de pixels numérotées de
0 à L − 1 et C le nombre de colonnes de pixels, numérotées de 0 à
C − 1. Nous allons utiliser l’image lena.png ci-
contre.
La couleur de chaque pixel est codée sur 3 octets : r, v, b = rouge,
vert et bleu. Ainsi, pour représenter une image, il faut 3 matrices •Récupérer les 3 matrices R, V et B de cette
L × C d’entiers naturels codés sur un octet, donc pouvant variant de image.
0 à 255. Ce sont les matrices R, V et B. •Créer une matrice Z remplie de zéros de
la même taille que R, V ou B.
Ainsi, un pixel situé à l’intersection de la ligne i et de la colonne
j aura trois composantes chromatiques (Rij , Vij , Bij ) qui sont les
•Enregistrer 3 images, lenaR.png,
éléments de ces trois matrices.
lenaV.png et lenaB.png. Par exemple, lenaR.png sera sauvegar-
dée grâce à :
Il y a différents formats de fichiers images : .png, .jpg, .bmp,
etc... qui diffèrent selon l’organisation des données dans le fichier, la
saveImage("lenaR.png", R, Z, Z)
compression ou non de ces données, etc... Dans ce TD, nous allons
utiliser des images au format .png
Que constate-t-on ?
Vous allez utiliser les deux fonctions getImage et saveImage.
2.2 Écriture d’un image
• getImage(nomFichier) prend en paramètre le nom du fichier
image qui sera ici obligatoirement un fichier d’extension .png.
Quelles sont les matrices R, V et B asso-
Cette fonction retourne les trois matrices R, V et B de l’image.
ciées à l’image ci-contre ?
Les codes couleurs rvb utilisés sont : pour
• saveImage(nomFichier, R, V, B) qui sauvegarde une image
le rouge (200, 0, 0), pour le jaune (255, 255,
dans le fichier nomFichier qui doit lui aussi nécessairement
0), pour le vert (0, 255, 0) et pour le bleu
se terminer par .png. Il faut lui passer en paramètre les 3
(0, 0, 200).
matrices R, V et B qui représentent l’image.
Écrire un programme qui donne ces ma-
• Dans tous les cas, les matrices sont des tableaux numpy à deux trices et enregistrer l’image obtenue. .
dimensions.
2
MP1 Lycée Janson de Sailly Traitement des images
2.3 Image en niveaux de gris (noir et blanc)
Pour obtenir une image en niveau de gris, il faut calculer la matrice :
G = 0,11 × R + 0,59 × V + 0,30 × B
puis enregistrer l’image selon :
saveImage("lenaG.png", G, G, G)
Les trois matrices R, V et B sont alors identiques et valent G.
3 Filtrage d’image
Enregistrez l’image de lena en niveaux de gris. Dans la suite, c’est sur
cette image que nous allons travailler. 3.1 Quantification
On peut réduire le nombre de niveaux de gris en regroupant par
2.4 Négatif de l’image exemple tous les niveaux chromatique entre 0 et 127 en un seul niveau
En remplaçant les éléments des matrices selon : 0, et les niveaux entre 128 et 255 en un seul niveau 255. On obtient :
Rij → 255 − Rij Vij → 255 − Vij Bij → 255 − Bij
Nous obtenons le négatif de l’image. Écrire un programme qui crée
le négatif de l’image lenaG.png comme sur la figure ci-dessous
On peut être plus "fin", en regroupant les niveaux chromatiques en
4, ou 8 ou 16 niveaux. Essayer.
3.2 Traitement par groupe de pixels
3.2.1 Définition
2.5 Retournements et symétries
Dans les opérations précédentes, chaque pixel n’est modifié que
Écrire un programme permettant d’obtenir les 3 images ci-contre : selon sa propre valeur chromatique. Un filtrage par groupe consiste à
3
MP1 Lycée Janson de Sailly Traitement des images
modifier chaque pixel selon sa valeur et celle des pixels voisins. Nous 3.2.2 Filtre de lissage ou floutage
nous limiterons aux 8 pixels entourant un pixel central.
Reprenons l’image en niveaux de gris lenaG.png. Lui appliquer la
transformation définie par :
Un pixel repéré par (i, j) est entouré des 8 pixels (i − 1, j − 1), 1 1 1
(i, j − 1), (i + 1, j − 1), (i, j − 1), (i, j + 1), (i + 1, j − 1), (i + 1, j) et 1
T = 1 1 1
(i + 1, j + 1). 9
1 1 1
Vous pourrez recommencer cette opération un ou deux fois de plus.
j-1 j j+1 Qu’obtient-on ? Expliquer le résultat.
!
i-1
3.3 Détection des contours
i
Pour sélectionner des objets sur une image, on peut essayer de
i+1 détecter leurs bords, i.e. des zones de brusque changement de niveaux
de gris. On remplace alors un pixel par une mesure des écarts des
voisins immédiats donnée par exemple par :
q
Nous allons définir une matrice de transformation : Mij0 = (Mi,j+1 − Mi,j−1 )2 + (Mi+1,j − Mi−1,j )2
Appliquer cette transformation à lenaG.png. Expliquer le résultat.
t1 t2 t3 Comment obtenir alors l’image ci-dessous ?
T = t4 t5 t6
t7 t8 t9
de sorte que, si M désigne l’une des 3 matrices R, V ou B, elle soit
transformée en une nouvelle matrice M’ telle que :
Mij −→ Mij0 = t1 Mi−1,j−1 + t2 Mi−1,j + t3 Mi−1,j+1
+ t4 Mi1,j−1 + t5 Mi,j + t6 Mi,j+1
+ t7 Mi+1,j−1 + t8 Mi+1,j + t9 Mi+1,j+1