TP2 : Manipulations du média "image"

Ce TP a pour but de manipuler des images en couleur et niveaux de gris par de la porgrammation simple.
Ce TP sera réalisé sous Matlab (éventuellement sous Octave ou Python) en essayant de se rapprocher le plus possible d'une programmation C.
En effet, Matlab sera utilisé uniquement pour nous simplifier le chargement et la visualisation des images !

I. Manipulation des composantes RGB (Red Green Blue)

I.1. Affichage des composantes

I.1.1 Sauvegarder l'image ci-dessous sur le disque dur de votre machine en cliquant avec le bouton droite de votre souris sur celle-ci.



I.1.2 Lancer Matlab. Charger l'image en mémoire et l'afficher à l'aide de la séquence d'instructions suivantes :
img = imread('TP2_1.jpg');
image(img);


I.1.3 Afficher les dimensions de l'image à l'aide de la commande : taille = size(img)
Vous obtenez : 400      600       3
A quoi correspondent ces valeurs ? Et pourquoi le type de l'image est uint8 ?


I.1.4 Construire l'image en intensité de la composante bleue uniquement. Pour cela :
  • créer une image img_bleue en uint8 de la même taille que img et contenant que des 0,
  • copier les valeurs de la composante bleue de img dans img_bleue,
  • afficher l'image : que remarquez-vous ?
I.1.5 Construire de même l'image de la composante verte et l'image de la composante rouge. Pour afficher plusieurs images, utiliser figure.
Commenter l'évolution de l'intensité des pixels correspondant à la carrosserie de la voiture.

I.2. Filtrage en fonction des composantes

I.2.1 Construire l'image filtrée où ne sont retenus que les pixels dont l'intensité en bleu est supérieure à un seuil donné :
seuil = 200;
imgf = uint8(zeros(s));
for x=1:taille(1)
    for y=1:taille(2)
        if img(x,y,3) > seuil
            imgf(x,y,1) = img(x,y,1);
            imgf(x,y,2) = img(x,y,2);
            imgf(x,y,3) = img(x,y,3);
        end
    end
end



I.2.2 Donner une valeur de la variable seuil qui permet d'obtenir la carrosserie complète de la voiture tout en éliminant un maximum des autres pixels de l'image.
Identifier les principales zones ayant été retenues après filtrage et expliquer la raison de leur présence à l'image.


I.2.3 Sur le même principe, proposer un seuillage sur la composante rouge pour essayer de conserver l'intégralité de la carrosserie de la voiture tout en éliminant un maximum de pixels. Produire le même type d'analyse que pour le résultat précédent.


I.2.4 Proposer une combinaison des deux seuils précédents (sur la composante bleue et sur la composante rouge) pour cerner au mieux la carrosserie. Les seuils permettent ici de déterminer une région de l'image. On a "masqué" les pixels n'appartenant pas à la voiture. D'une manière générale, en traitement d'image, un "masque" désigne une image qui identifie un sous-ensemble des pixels d'une image de départ.


I.2.5 A l'aide de ces informations, intervertissez les valeurs des composantes verte et bleue pour transformer la couleur de la voiture.


II. Conversion d'image

II.1 Image en niveaux de gris et image binaire

II.1.1 Convertir l'image de départ en niveaux de gris et afficher le résultat obtenu, en utilisant la palette graphique suivante (composée de 256 niveaux de gris) :
colormap(gray(256)).

II.1.2 Binariser l'image en niveaux de gris avec le seuil par défaut (128). Afficher les résultats obtenus.

II.2 Histogramme

II.2.1 Calculer l'histogramme de l'image en niveaux de gris. Affier le résultat à l'aide de la commande suivante : bar.

II.2.2 A l'aide de l'histogramme, est-il possible de binariser l'image en niveaux de gris de manière plus intelligente (afin que l'image binaire soit plus lisible) ?