0% ont trouvé ce document utile (0 vote)
2 vues2 pages

Matrices de Pixels Et Traitement D'images: 1 Représentation Matricielle

Transféré par

anasfilescpge
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues2 pages

Matrices de Pixels Et Traitement D'images: 1 Représentation Matricielle

Transféré par

anasfilescpge
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Matrices de pixels et traitement d’images

CPGE - Niveau SUP

Séance de 2 heures

Objectifs de la séance

— Comprendre la représentation d’une image sous forme de tableau 2D (matrices).


— Implémenter des transformations géométriques (rotation, redimensionnement).
— Maîtriser le produit de convolution pour filtrer une image (flou, contours).
— Manipuler les doubles boucles for imbriquées pour parcourir des voisinages.

1 Représentation matricielle
Une image en niveaux de gris de dimensions H × W (Hauteur × Largeur) est stockée comme un
tableau bidimensionnel où chaque case M [i][j] représente l’intensité lumineuse du pixel (souvent un
entier de 0 à 255).

(0,0)
j (colonnes / Largeur W )

12 45 255

78 10 120

30 200 50

i (lignes / Hauteur H)

2 Transformations Géométriques
2.1 Rotation de 90° (sens horaire)
Pour une matrice carrée de taille n, le pixel (i, j) se déplace vers la position (j, n − 1 − i).

def rotation_90(img):
n = len(img) # Supposons img carrée
# Création d'une nouvelle matrice vide
nouvelle = [[0]*n for _ in range(n)]
for i in range(n):
for j in range(n):
nouvelle[j][n-1-i] = img[i][j]
return nouvelle

2.2 Réduction et Agrandissement


— Réduction (facteur 2) : On ne garde qu’un pixel sur deux (échantillonnage).
— Agrandissement (facteur 2) : On duplique chaque pixel dans un bloc 2 × 2.
Exercice 1. Écrire une fonction agrandir(img) qui double la taille d’une image. Si l’image originale
est de taille H × W , l’image de sortie doit être (2H) × (2W ).

1
3 Filtrage par Convolution
Le principe est de recalculer la valeur d’un pixel en fonction de ses voisins directs à l’aide d’un
noyau (petite matrice, souvent 3 × 3).

Fenêtre de voisinage

CalculPdu nouveau
P1 pixel :
Cible ′ 1
Pi,j = di=−1 dj=−1 Mi+di,j+dj ×
Kdi,dj
Où K est le noyau de convolution.

3.1 Exemples de noyaux classiques


— Flou (Moyenneur) : Toutes les cases valent 1/9. 
On lisse lesvariations.
−1 0 1
— Détection de contours (Sobel vertical) : K = −2 0 2. Met en évidence les gradients
−1 0 1
horizontaux.

def convolution_grise(img, noyau):


H, W = len(img), len(img[0])
# Nouvelle image (on ignore les bords pour simplifier)
res = [[0]*W for _ in range(H)]
for i in range(1, H-1):
for j in range(1, W-1):
somme = 0
for di in [-1, 0, 1]:
for dj in [-1, 0, 1]:
somme += img[i+di][j+dj] * noyau[di+1][dj+1]
res[i][j] = int(somme)
return res

4 Activité Pratique (1 heure)


Exercice 2 (Effet miroir). Écrire une fonction qui réalise une symétrie horizontale de l’image (le pixel
à gauche passe à droite).
 
0 −1 0
Exercice 3 (Le filtre "Passe-Haut" (Netteté)). En utilisant le noyau K = −1 5 −1, expliquez
0 −1 0
pourquoi l’image semble plus "nette".
Note : Attention à saturer les valeurs entre 0 et 255 après calcul.

Synthèse : Complexité

Pour une image de N pixels (N = H × W ) :


— Les opérations géométriques sont en coût linéaire O(N ).
— La convolution avec un noyau de taille fixe k × k est aussi en O(N ) (plus précisément
O(k 2 · N )).

Vous aimerez peut-être aussi