Leçon 12

Traitement des images

Dans le répertoire Python créez un dossier cours12. Il contiendra tous les fichiers de cette leçon.

Qu'est-ce qu'une image numérique ?

Une image numérique est un ensemble de points appelés pixels (du terme anglais "picture element").
Une image peut être représentée sous la forme d'une matrice n x m, où chaque élément serait un pixel.
n est le nombre de lignes et m le nombre de colonnes de la matrice. Ils définissent la taille de la matrice et donc la taille de l'image numérisée encodée par la matrice.
Le traitement d'une image numérique va donc se résumer pour l'essentiel à de la manipulation d'éléments d'une matrice.
Un pixel est une valeur, qui code son aspect dans l'image, sa couleur et parfois sa transparence.
Pour résumer, dans une image, un pixel est caractérisé par sa position qui est indiquée par les indices ligne et colonne de la matrice et par sa valeur, qui code la couleur du pixel.

Nous avons représenté ci-dessous une image de taille 5 x 5 pixels avec le repérage de chacun des pixels et à côté sa matrice qui contient les valeurs de chacun des pixels.

(0,0) (1,0) (2,0) (3,0) (4,0)
(0,1) (1,1) (2,1) (3,1) (4,1)
(0,2) (1,2) (2,2) (3,2) (4,2)
(0,3) (1,3) (2,3) (3,3) (4,3)
(0,4) (1,4) (2,4) (3,4) (4,4)
$M=\left(\begin{array}{ccccc} v(0,0)&v(1,0)&v(2,0)&v(3,0)&v(4,0)\\ v(0,1)&v(1,1)&v(2,1)&v(3,1)&v(4,1)\\ v(0,2)&v(1,2)&v(2,2)&v(3,2)&v(4,2)\\ v(0,3)&v(1,3)&v(2,3)&v(3,3)&v(4,3)\\ v(0,4)&v(1,4)&v(2,4)&v(3,4)&v(4,4) \end{array} \right)$

Les principaux formats des fichiers images

Le format PGM

Le format PGM (portable graymap file format) est utilisé pour des images en niveau de gris. C'est un format d'image matricielle, sans compression.
Les valeurs de chaque pixels sont des entiers allant de 0 (noir) à 255 (blanc)

Exercice 1 : matrice du fichier immage .pgm

Téléchargez les deux fichiers images ici : Image jpg et Image pgm
puis enregistrez les fichiers sous les noms bolide.jpg et bolide.pgm dans le même dossier qui contiendra le script ci-dessous.
Recopiez le script ci-dessous que vous enregistrerez dans le même dossier que l'image bolide.pgm.

Exercice 2 : inversion des gris

Dans cet exercice nous allons inverser les niveaux de gris. Autrement dit le noir deviendra blanc et le blanc noir, le gris foncé deviendra gris clair et le gris clair, gris foncé.
Pour cela recopiez le srcipt ci-dessous puis l'enregistrer.

Exercice 3 : image symétrique

Recopiez le script précédent et modifiez la ligne 6 pour obtenir une image symétrique comme indiqué ci-dessous.

Autres formats

Pour la suite nous travaillerons sur le format jpg.
Téléchargez le fichier image ici : Image jpg
puis enregistrez le fichier sous le nom bolide.jpg. dans le même dossier qui contiendra le script ci-dessous.
Recopiez le script ci-dessous que vous enregistrerez dans le même dossier que l'image bolide.jpg.

Exercice 4 : matrice du fichier immage .jpg

Créez le script qui affichera la matrice image du fichier image bolide.jpg.

On remarque que le mode change : il indiquait L pour le fichier bmp et maintenant il indique RGB ce qui correspond à Red Green Blue.
Ce qui change aussi sont les valeurs de la matrice. Pour les fichiers bmp nous avions un entier qui indiquait les 256 niveaux de gris ( de 0 à 255).
Pour les fichiers jpg nous avons des triplets qui indiquent les trois nuances de rouge, vert et bleu. Le triplet (255,0,0) indiquera un pixel rouge, le triplet (0,255,0) un pixel vert et le triplet (0,0,255) un pixel bleu.
En Python ces triplets sont appelée tuples. Un tuple est une liste qui ne peut plus être modifiée.

Exercice 5 : niveaux de gris

Dans cet exercice nous allons transformer une image couleur en niveaux de gris.
Pour cela nous allons mélanger les composantes du tuple (R,G,B) par le même niveau de gris pour les trois. Ce niveau de gris tiendra compte des proportions de rouge, vert et bleu.
Les proportions recherchées sont données par la CIE (Commission Internationale de l'Eclairage).
Sa norme 709, dit que pour les images naturelles les poids respectifs doivent être 0.2125 * R + 0.7154 * G + 0.0721 * B. Nous allons donc utiliser cette répartition dans notre code. Comme pour le script de l'exercice 2,

Recopiez le script ci-dessous.

Exercice 6 : Le filtrage des couleurs

Un exemple simple de filtrage, couramment pratiqué en photographie consiste à ne garde qu'une seule couleur dans une image. Il peut s'agir par exemple de ne conserver que le canal rouge, vert ou bleu dans une image. Cette opération est généralement destinée à faire ressortir des détails dans une image. Dans le script ci-dessous nous gardons que le bleu.
Recopiez le script.

Exercice 7 : tracé des contours

La reconnaissance de formes dans une image est une composante importante de l'analyse d'images.
Pour définir un contour on va détecter un changement de couleur ou de contraste. Pour un pixel situé en p = (x , y), ce changement se traduit dans la valeur des pixels qui sont localisés autour du pixel considéré, soit les pixels situés en p1 = (x-1 , y), p2 = (x , y-1), p3 = (x+1 , y) et p4 = (x , y+1).

p2=(x , y-1)
p1=(x-1 , y)  p=(x , y) p3=(x+1 , y)
p4=(x , y+1)

Nous allons d'abord transformer la photo couleur en niveaux de gris (noir et blanc).
Puis nous calculerons l'écart de niveaux de gris entre les pixels p1, p3 et p2, p4 en utilisant la formule : $$d=\sqrt{\left(p1[0]-p3[0]\right)^2+\left(p2[0]-p4[0]\right)^2}$$ Et enfin, si cet écart est inférieur à un seuil que nous déciderons, nous déssinerons le pixel en blanc (255,255,255) sinon nous mettrons un pixel noir (0,0,0).
Recopiez le script ci-dessous.

Exercice 8 : changer une couleur

Dans cet exercice on va changer le rouge de notre bolide en bleu.
Pour cela il suffit d'intervertir les niveaux de rouge et bleu lorsque le bleu domine les deux autres couleurs.
Recopiez le script ci-dessous.

Exercice 9

Modifiez le script précédent pour obtenir du vert.