Vous êtes sur la page 1sur 4

Traitement d’images

TP1 : Manipulations de base d’une image sous python


L'objectif de ce TP est d'initier les étudiants aux fondamentaux du traitement d'images en
utilisant le langage de programmation Python. Les participants apprendront à effectuer des
opérations élémentaires sur les images telles que : L’extraction des canaux de couleur, la
conversion en niveaux de gris, la rotation et le redimensionnement d’une image.
Les bibliothèques nécessaires sont : Matploltib.pyblot, Matplotlib.image et Numpy

Partie 1 : Lire, afficher et sauvegarder une image


Pour lire une image, on peut utiliser la fonction imread(path) avec path = chemin de l’image
à lire.
Exemple :
import matplotlib.image as mpimg
path = 'babouin.png' # si l’image se trouve dans le même dossier ou se trouve le script python
img = mpimg.imread(path)
Une fois l’image est lu, il faut vérifier son encodage (via l’explorateur des variables sous l’IDE
Spyder, ou en utilisant img.dtype. Parfois, des conversion entre type sera nécessaire pour
réaliser des traitements.
En utilisant la bibliothèque Matplotlib, on peut créer des figures où on peut voir le résultat
d’un traitement quelconque, en visualisant à la fois l’image originale et celle traité, toute fois
la figure est réalisé, vous pouvez le sauvegarder comme suit :
Import matplotlib.pyplot as plt
plt.savefig("Nom_Figure.ext") # avec .ext peut être .png ou .jpg ou autres…

Partie 2 : Inverser une image


L'inversion des couleurs d'une image est une technique clé en traitement d'images, utilisée
pour améliorer la visibilité et le contraste, faciliter l'analyse en radiologie et dans d'autres
domaines médicaux, et créer des effets artistiques en photographie.
Une méthode simple pour faire l’inversion des couleurs d’une image et de changer l’intensité
des pixels de l’image original par la valeur 255 – I(x,y) avec I(x,y) présente l’intensité du pixel
à la position des coordonnées x et y.
Ecrire un script python permettant de :
1. Lire l’image babouin.png
2. Vérifier l’encodage de l’image, et faire la conversion en des valeurs entre 0 et 255 si
nécessaire.

Page 1 sur 4
3. Créer une image inverse en se basant sur la formule 255 – I(x,y) décrite en haut.
4. Créer et sauvegarder une figure qui montre l’image originale et l’image inversée
correspondante comme ci-dessous :

Figure 1. Résultat de l’opération d’inversion de couleurs sur l’image babouin.png

Partie 3 : Extraction des canaux


Ecrire le script qui permet d’extraire les canaux (Rouge, Vert, Bleu) de l’image babouin.png,
puis réaliser une visualisation comme montre la figure 2.

Figure 2. Résultat de l’opération d’extraction des canaux (RVB) de l’image babouin.png

Partie 4 : Conversion d’une image couleur en une image en niveaux de gris

Page 2 sur 4
Une approche intuitive qu’on peut suivre pour assurer la conversion d’une image en couleurs
(RVB) en une image en niveaux de gris, et de :
1. Créer une image de mêmes dimensions que l’image originale, initialement rempli par
des zéros, pour cela, vous pouvez utiliser la fonction zeros de la bibliothèque numy.
Aussi, pour récupérer les dimensions d’une image, on peut utiliser la propriété
shape.
Exemple :
np.zeros((2,2)) créer une matrice de dimension 2x2 rempli de zéros
img.shape retourne le triple (hauteur, largeur, nombre de canaux) d’une image.

2. Itérativement, remplacer les valeurs des pixels de l’image crée par la moyenne issue
des 3 canaux de l’image originale selon la formule suivante :
I ng (i, j)=[ I R ( i , j ) + I V ( i , j ) + I B ( i, j ) ] /3
3. Afficher l’image résultante
Q1. En se basant sur ces étapes, écrire la fonction def rgbtogray(image) qui prend comme
entrée une image en couleur (Mode RVB), et qui retourne l’image converti en niveaux de
gris.
Q2. Afficher sur une seule figure, l’image originale et l’image converti. Que remarquez-vous ?
La conversion RGB vers niveaux de gris ne se fait généralement pas par une moyenne simple
des trois canaux (rouge, vert, bleu). Elle utilise souvent des coefficients pondérés pour mieux
refléter la perception humaine de la luminosité. Par exemple, la formule de luminance qui
prend en compte la sensibilité de l'œil humain aux différentes couleurs est donnée par :
I ng ( i , j )=0 . 299 × I R ( i , j )+ 0 .587 × I V ( i , j ) +0 .114 × I B ( i , j )

Cette formule donne plus de poids au canal vert et moins au canal bleu. C’est une
représentation de la conversion de couleur en niveaux de gris qui prend en compte la
luminance perçue, ou la luminosité, des différentes couleurs par l'œil humain. Cette formule
est basée sur la manière dont les cônes photorécepteurs de l'œil humain réagissent
différemment aux longueurs d'onde correspondant au rouge, au vert et au bleu.
Q3. Modifier la fonction rgbtogray(image) en introduisant les coefficients de la formule 2.
Commenter.

Partie 5 : Calcul d’Histogrammes


Calcul et affichage d’histogramme pour une image en niveau de gris et une image en
couleur.
Q1. Ecrire une fonction def histogramme(image) qui calcul l'histogramme d'une image en
niveaux de gris, puis retourne l'histogramme calculé. Le script doit afficher sur la même
figure l'image originale puis l'histogramme correspondant comme montre la figure 1.

Page 3 sur 4
Figure 1. Image camerman.jpg et son histogramme

Q2. Ecrire une fonction def histogramme2(image) qui calcul l'histogramme d'une image en
couleur, puis retourne l'histogramme calculé. Le script doit afficher sur la même figure
l'image originale, et les histogrammes correspondants aux trois canaux (Rouge, vert et Bleu),
comme illustre la figure 2.

Figure 2. Image babouin.png et les 3 histogrammes correspondants.

Indications :
La fonction Axes.bar() du module axes de la bibliothèque matplotlib est utilisée pour créer
un tracé à barres.
Syntaxe : Axes.bar(self, x, height, width=0.8, bottom=None, *, align='center', data=None,
**kwargs)
Paramètres : cette méthode accepte les paramètres suivants décrits ci-dessous :
 x : Ce paramètre est la séquence de coordonnées horizontales de la barre.
 height : Ce paramètre est la(les) hauteur(s) des barres.
 width : Ce paramètre est un paramètre facultatif. Et c'est la(les) largeur(s) des barres
avec la valeur par défaut 0.8 .
 bottom: ce paramètre est également un paramètre facultatif. Et ce sont les coordonnées
y des bases des barres avec la valeur par défaut 0 .
 alighn: ce paramètre est également un paramètre facultatif. Et il est utilisé pour
l'alignement des barres sur les coordonnées x.

Page 4 sur 4

Vous aimerez peut-être aussi