Images et traitement des images

Effectué

Avant d'explorer le traitement d'images et d'autres capacités de vision par ordinateur, il est utile d'examiner ce qu'est réellement une image dans le contexte des données d'un programme informatique.

Images sous forme de tableaux de pixels

Pour un ordinateur, une image est un tableau de valeurs numériques de pixels. Par exemple, considérons le tableau suivant :

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

le tableau se compose de sept lignes et de sept colonnes, représentant les valeurs des pixels d'une image de 7x7 pixels (connue sous le nom de résolution de l'image). Chaque pixel a une valeur comprise entre 0 (noir) et 255 (blanc) ; avec des valeurs entre ces limites représentant des nuances de gris. L'image représentée par ce tableau ressemble à l'image suivante (agrandie) :

Diagram of a grayscale image.

Le tableau des valeurs de pixels de cette image est bidimensionnel (il représente les lignes et les colonnes, ou les coordonnées x et y) et définit un rectangle unique de valeurs de pixels. Une seule couche de valeurs de pixels comme celle-ci représente une image de nuances de gris. En réalité, la plupart des images numériques sont multidimensionnelles et se composent de trois couches (appelées canaux) qui représentent des teintes de couleurs rouges, vertes et bleues (RVB). Nous pouvons, par exemple, représenter une image couleur en définissant trois canaux de valeurs de pixels qui créent la même forme carrée que dans l'exemple précédent de en nuances de gris :

Red:
 150  150  150  150  150  150  150  
 150  150  150  150  150  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  255  255  255  150  150
 150  150  150  150  150  150  150
 150  150  150  150  150  150  150

Green:
 0    0    0    0    0    0    0          
 0    0    0    0    0    0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0   255  255  255   0    0
 0    0    0    0    0    0    0
 0    0    0    0    0    0    0

Blue:
 255  255  255  255  255  255  255  
 255  255  255  255  255  255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255   0    0    0   255  255
 255  255  255  255  255  255  255
 255  255  255  255  255  255  255

Voici l’image obtenue :

Diagram of a color image.

Les carrés violets sont représentés par la combinaison :

Red: 150 
Green: 0 
Blue: 255 

Les carrés jaunes au centre sont représentés par la combinaison :

Red: 255
Green: 255
Blue: 0

utilisation de filtres pour traiter des images

Pour effectuer des tâches de traitement d'image, il est courant d'appliquer des filtres qui modifient les valeurs des pixels de l'image afin de créer un effet visuel. Un filtre est défini par un ou plusieurs tableaux de valeurs de pixels, appelés noyaux de filtre. Vous pouvez par exemple définir un filtre avec un noyau de 3x3, comme indiqué dans cet exemple :

-1 -1 -1
-1  8 -1
-1 -1 -1

Le noyau est ensuite convolué dans l’image, en calculant une somme pondérée pour chaque patch de 3x3 pixels et en attribuant le résultat à une nouvelle image. Il est plus facile de comprendre le fonctionnement du filtrage en explorant un exemple étape par étape.

Considérons l'image de nuances de gris que nous avons explorée précédemment :

 0   0   0   0   0   0   0  
 0   0   0   0   0   0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0  255 255 255  0   0
 0   0   0   0   0   0   0
 0   0   0   0   0   0   0

tout d'abord, nous appliquons le noyau du filtre à la partie supérieure gauche de l'image, en multipliant chaque valeur de pixel par la valeur de poids correspondante dans le noyau et en additionnant les résultats :

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (0 x -1) + (255 x -1) = -255

Le résultat (-255) devient la première valeur d'un nouveau tableau. Ensuite, nous allons déplacer le noyau de filtre le long d'un pixel vers la droite et répéter l'opération :

(0 x -1) + (0 x -1) + (0 x -1) +
(0 x -1) + (0 x 8) + (0 x -1) +
(0 x -1) + (255 x -1) + (255 x -1) = -510

Le résultat est à nouveau ajouté au nouveau tableau, qui contient désormais deux valeurs :

-255  -510

le processus est répété jusqu'à ce que le filtre ait été impliqué dans l'ensemble de l'image, comme illustré dans cette animation :

Diagram of a filter.

le filtre est impliqué dans l'image, en calculant un nouveau tableau de valeurs. Certaines valeurs peuvent se situer en dehors de la plage de valeurs de 0 à 255 pixels, les valeurs sont donc ajustées pour s'inscrire dans cette plage. En raison de la forme du filtre, le bord extérieur des pixels n'est pas calculé. Par conséquent, une valeur de remplissage (généralement 0) est appliquée. Le tableau résultant représente une nouvelle image dans laquelle le filtre a transformé l'image d'origine. Dans ce cas, le filtre a eu l'effet de mettre en surbrillance les bords des formes dans l'image.

Pour mieux voir l'effet du filtre, un exemple du même filtre appliqué à une image réelle est présenté ci-dessous :

Image originale Image filtrée
Diagram of a banana. Diagram of a filtered banana.

Le filtre étant impliqué à travers l'image, ce type de manipulation d'image est souvent appelé filtrage convolutif. Le filtre utilisé dans cet exemple est un type particulier de filtre (appelé filtre laplace) qui met en surbrillance les bords des objets d'une image. Plusieurs autres types de filtres peuvent être utilisés pour créer des effets de flou, de netteté, d'inversion des couleurs, etc.