FR EN

Traitement d'image numérique

Représentation informatique d'une image

Les images numériques sont essentiellement des grilles de petits carrés appelés pixels, qui contiennent les informations de couleur pour ce point spécifique de l'image. Cette structure de grille est représentée par une matrice.

Images en niveaux de gris

Dans les images en niveaux de gris, chaque pixel possède une valeur unique représentant l'intensité de la lumière, généralement allant de 0 (noir) à 255 (blanc).

Images en couleur

Les images en couleur sont généralement représentées à l'aide du modèle de couleur RVB. Dans ce cas, nous aurions typiquement trois matrices distinctes, une pour chaque canal de couleur (Rouge, Vert et Bleu). Chaque cellule de matrice contiendrait alors la valeur d'intensité pour cette couleur spécifique à cet emplacement de pixel.

Le code suivant montre comment ouvrir un fichier image avec PIL et le convertir en un tableau NumPy. Pour une image en couleur, il s'agit généralement d'un tableau 3D avec des dimensions représentant la hauteur, la largeur et les canaux de couleur (RVB). Pour les images en niveaux de gris, il s'agit d'un tableau 2D avec hauteur et largeur.

from PIL import Image
import numpy
 
img = Image.open("myimage.png")
np_img = numpy.array(img)

Manipulations d'images

Une fois représentée sous forme de matrice, nous pouvons appliquer des propriétés et des techniques d'algèbre linéaire pour manipuler l'image et en extraire des informations utiles et même transformer l'image.

Valeurs propres et vecteurs propres

Les valeurs propres et les vecteurs propres sont des concepts fondamentaux en algèbre linéaire avec des applications étendues dans divers domaines, y compris le traitement d'image numérique.

Voici un exemple simple illustrant la puissance des valeurs propres :

Compression d'image

L'analyse en composantes principales (PCA) est une technique qui peut être utilisée pour compresser les images.

La PCA analyse cette matrice pour identifier les directions (vecteurs propres) qui capturent les variations les plus significatives des données d'image. Ces directions sont appelées composantes principales. Les valeurs propres aident à déterminer l'importance de ces directions, les valeurs propres plus élevées indiquant une plus grande signification.

Les vecteurs propres et les valeurs propres ayant les valeurs les plus faibles contiennent moins d'informations et sont éliminés. La matrice est ensuite reconstruite. Cela réduit le stockage de l'image sans perdre beaucoup d'informations, démontrant le rôle crucial des valeurs propres et des vecteurs propres dans la préservation des détails essentiels de l'image.

Cet exemple met en évidence comment les valeurs propres et les vecteurs propres contribuent à des techniques de compression d'image efficaces comme la PCA, équilibrant la réduction du stockage avec une perte minimale de fidélité de l'image.

Je recommande cet article pour un exemple détaillé de compression d'image utilisant la PCA.

La décomposition en valeurs singulières est une autre technique populaire utilisée pour diverses applications, telles que la compression d'image et la reconnaissance d'objets et de visages.

Vous pouvez effectuer une décomposition en valeurs singulières sur une matrice en utilisant scipy.linalg.svd en python. Par exemple:

import numpy as np
from scipy.linalg import svd

data = np.array([
    [1, 2, 3, 4, 5],
    [5, 4, 3, 2, 1],
    [2, 3, 4, 5, 6],
    [6, 5, 4, 3, 2],
    [1, 3, 5, 7, 9]
])

U, S, VT = svd(data, full_matrices=False)
En savoir plus sur la transformation SVD.

Détection des contours

Pour une image, nous pouvons vouloir extraire la forme d'un objet dans l'image. Cela peut être réalisé à travers diverses techniques.

Pour les images en niveaux de gris, un contour est un changement dans l'intensité de la lumière qui occupe une petite région. Ce changement peut être détecté en appliquant un opérateur de gradient à la matrice de l'image. L'opérateur de gradient agit comme un détecteur de fluctuation car il calcule la dérivée des valeurs d'intensité.

Avant d'appliquer l'opérateur de gradient, nous pouvons appliquer certains filtres pour réduire le bruit de l'image et affiner les contours. Les filtres courants incluent le flou gaussien pour lisser l'image et éliminer le bruit, ce qui aide à obtenir des résultats de détection de contour plus propres.

Je recommande cet article pour un exemple détaillé de détection de contours utilisant OpenCV en Python.