Introduction au Traitement d’Image en Python
Document de Référence et Exercices
Naoum Mohamed
29 mars 2025
Table des matières
1 Introduction et Bibliothèques Clés 2
1.1 Bibliothèques Utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Formats d’Image et Représentation des Données . . . . . . . . . . . . . . . 2
2 Chargement et Affichage d’Images 2
2.1 Lecture d’Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 Affichage et Sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 Conversion en Niveaux de Gris 2
3.1 Méthode par Moyenne Simple . . . . . . . . . . . . . . . . . . . . . . . . . 2
3.2 Conversion Conditionnelle en Niveaux de Gris . . . . . . . . . . . . . . . . 3
4 Transformations d’Images 3
4.1 Rotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4.2 Redimensionnement (Réduction et Agrandissement) . . . . . . . . . . . . . 3
4.3 Autres Opérations de Transformation . . . . . . . . . . . . . . . . . . . . . 4
5 Filtrage d’Images 4
5.1 Flou par Filtre Uniforme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
6 Évaluation de la Qualité de l’Image 4
6.1 Mesure de Variance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
7 Bonnes Pratiques et Concepts Généraux 5
8 Exercices Pratiques et Ressources Supplémentaires 5
8.1 Exercices Proposés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
8.2 Ressources Supplémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . 5
9 Conclusion 5
1
1 Introduction et Bibliothèques Clés
1.1 Bibliothèques Utilisées
— Matplotlib : Pour la lecture, l’affichage et la sauvegarde d’images via plt.imread(),
plt.imshow() et plt.imsave().
— NumPy : Pour la manipulation des tableaux d’images (calcul de moyennes, trans-
position, redimensionnement, etc.).
— SciPy : Pour l’application de filtres avancés, comme le flou via ndimage.uniform_filter().
— Alternatives : La bibliothèque Pillow (PIL) est également mentionnée pour l’ou-
verture d’images. Pour des traitements plus avancés, OpenCV peut être exploré.
1.2 Formats d’Image et Représentation des Données
— Les images sont généralement stockées aux formats JPEG ou PNG.
— En Python, une image est représentée comme un tableau NumPy où chaque pixel
est souvent codé par trois valeurs correspondant aux canaux rouge, vert et bleu
(RGB).
— La compréhension du type de données (entiers, flottants) est essentielle car elle
influence les opérations de traitement.
2 Chargement et Affichage d’Images
2.1 Lecture d’Images
— La lecture se fait via plt.imread("image.jpg"), qui convertit l’image en un ta-
bleau NumPy.
2.2 Affichage et Sauvegarde
— Utilisation de plt.imshow() pour visualiser l’image.
— plt.show() pour afficher la fenêtre graphique.
— plt.imsave() pour sauvegarder les images traitées (ex. : "gray.jpg", "newGray.jpg").
(Voir 00_simple_openImg.py et autres.)
3 Conversion en Niveaux de Gris
3.1 Méthode par Moyenne Simple
Concept : Calcul de la moyenne des trois canaux (R, G, B) pour obtenir un pixel en
niveaux de gris.
— Implémentation : Utilisation de np.average(img, axis=2) ou img.mean(2).
Réaffectation de cette valeur moyenne aux trois canaux.
2
1 M = np . average ( img , axis =2)
2 im = img . copy ()
3 im [: , : , 0] = M # rouge
4 im [: , : , 1] = M # vert
5 im [: , : , 2] = M # bleu
Listing 1 – Exemple de conversion par moyenne simple
(Voir 00_simple_grey.py.)
3.2 Conversion Conditionnelle en Niveaux de Gris
Concept : Appliquer la conversion seulement sur certains pixels selon une condition
(par exemple, convertir en gris si le pixel n’est pas majoritairement rouge).
— Implémentation : Parcourir chaque pixel avec des boucles et appliquer la condi-
tion.
1 for i in range ( len ( img ) ) :
2 for j in range ( len ( img [ i ]) ) :
3 r , g , b = img [i , j ]
4 if not ( r > 1.5 * b and r > 1.5 * g ) : # conversion si le pixel
n ’ est pas t r s rouge
5 avg = sum ( img [i , j ]) // 3
6 img [i , j , :] = [ avg ] * 3
Listing 2 – Exemple de conversion conditionnelle
(Voir 00_openImg.py.)
4 Transformations d’Images
4.1 Rotation
Concept : Faire pivoter l’image, par exemple de 90°.
— Implémentation : Utilisation de np.transpose(img, (1, 0, 2)) pour échanger
les axes des lignes et colonnes.
1 image_rotatee = np . transpose ( img , (1 , 0 , 2) )
Listing 3 – Exemple de rotation
4.2 Redimensionnement (Réduction et Agrandissement)
Réduction :
— Utiliser le slicing pour prendre un pixel sur deux, par exemple img[::2, ::2].
Agrandissement :
— Utiliser np.repeat() pour dupliquer les pixels le long des axes souhaités.
1 # R duction 50%
2 image_reduite = img [::2 , ::2]
3
4 # Agrandissement avec des facteurs fL ( lignes ) et fC ( colonnes )
5 image_temp = np . repeat ( img , fC , axis =1)
6 image_aggrandie = np . repeat ( image_temp , fL , axis =0)
Listing 4 – Exemple de redimensionnement
3
(Voir 00_openImg.py et 00_simple_openImg.py.)
4.3 Autres Opérations de Transformation
— Découpage (Cropping) : Extraire une partie spécifique de l’image en sélection-
nant une sous-partie du tableau.
— Miroir/Retournement (Flipping) : Inverser l’image horizontalement ou verti-
calement à l’aide de slicing inversé (ex. : img[::-1]).
— Seuil (Thresholding) et Détection de Bords : Même si non présent dans
les scripts actuels, ces opérations permettent de transformer l’image en binaire ou
d’extraire les contours (Sobel, Canny).
— Ajustement du Contraste : Modifier la luminosité et le contraste pour améliorer
ou altérer l’apparence de l’image.
5 Filtrage d’Images
5.1 Flou par Filtre Uniforme
Concept : Le flou permet de réduire le bruit et les détails en lissant l’image.
— Implémentation : Utilisation de scipy.ndimage.uniform_filter() avec une
taille de fenêtre définie.
1 from scipy import ndimage
2 image_floue = ndimage . uniform_filter ( img , size =(50 , 50 , 1) )
Listing 5 – Exemple de flou
(Voir 00_openImg.py.)
6 Évaluation de la Qualité de l’Image
6.1 Mesure de Variance
Concept : La variance des intensités de pixels sert d’indicateur de netteté : une
variance faible peut signifier une image floue.
— Implémentation : Calcul avec np.var(img) et comparaison avec un seuil (ex. :
5000).
1 variance = np . var ( img )
2 if variance > 5000:
3 print ( " L ’ image n ’ est pas floue . " )
4 else :
5 print ( " L ’ image est floue . " )
Listing 6 – Exemple de mesure de variance
(Voir 00_openImg.py.)
4
7 Bonnes Pratiques et Concepts Généraux
— Copies Profondes vs. Copies Superficielles : Utiliser deepcopy pour éviter
de modifier l’image originale lors des traitements.
— Modularité du Code : Organiser le code en fonctions ou modules afin de favoriser
la réutilisation et la lisibilité.
— Performances : Optimiser le traitement pour des images de grande taille, par
exemple en privilégiant les opérations vectorisées avec NumPy plutôt que des
boucles imbriquées.
— Visualisation Comparative : Utiliser plt.subplot() pour afficher côte à côte
l’image originale et les versions traitées pour une comparaison immédiate.
8 Exercices Pratiques et Ressources Supplémentaires
8.1 Exercices Proposés
— Convertir une image en niveaux de gris en utilisant la méthode de la moyenne.
— Appliquer un filtre de flou et mesurer la variance pour évaluer la netteté.
— Implémenter une rotation et un redimensionnement de l’image.
— Réaliser un découpage et une inversion horizontale de l’image.
— Explorer l’utilisation d’un seuillage pour transformer l’image en binaire.
8.2 Ressources Supplémentaires
— Documentation Matplotlib
— Documentation NumPy
— Documentation SciPy
— Tutoriels et exemples sur OpenCV pour aller plus loin dans le traitement d’images.
9 Conclusion
Ce document offre une base solide pour comprendre le traitement d’image en Python.
En plus de la lecture et de l’affichage d’images, les étudiants apprendront à :
— Convertir des images en niveaux de gris (méthode simple et conditionnelle).
— Effectuer diverses transformations (rotation, redimensionnement, découpage).
— Appliquer des filtres (par exemple, flou) et évaluer la qualité d’une image à l’aide
de la variance.
En combinant ces connaissances avec les bonnes pratiques de programmation et des
exercices pratiques, ils seront bien préparés pour aborder des sujets plus avancés.