Vous êtes sur la page 1sur 8

Licence 2 – ISI

Université de Bretagne Occidentale

Découverte du Traitement d’Images


TP1 : La couleur
Version 23221

Gilles Burel

Université de Bretagne Occidentale


Département d’Electronique
6, avenue Le Gorgeu
CS 93837
29238 BREST cedex 3

Gilles.Burel@univ-brest.fr
© Gilles Burel - Université de Brest

1. Introduction
Le traitement numérique des images est un domaine très vaste, qui couvre des aspects aussi variés
que la compression des images pour la transmission sur les réseaux de télécommunications, la
reconnaissance automatique des formes, l’amélioration de la qualité des images (débruitage,
restauration), etc.
Au cours de ce TP, nous allons donner un aperçu de la représentation et du traitement de la couleur.

Pour ce faire, nous allons utiliser le logiciel Matlab. Une première partie du TP consiste à se
familiariser avec le logiciel et à comprendre comment les images sont représentées dans la mémoire
d’un ordinateur. Ensuite, nous verrons comment modifier les couleurs d’une photo pour rendre ces
couleurs plus naturelles. Enfin, nous allons créer une animation basée sur la couleur.

Pour bien réaliser ce TP, vous devez vous assurer que vous comprenez bien chaque étape qui vous
est indiquée et répondre aux questions posées. Ne passez à l’étape suivante que lorsque vous avez
bien compris. Si vous sautez une étape ou si vous ne la comprenez pas bien, il vous sera difficile
d’aller jusqu’au bout et d’obtenir le résultat. Lorsqu’il est indiqué « … » dans un programme, cela
représente une partie que vous devez compléter vous-même.

2. Création d’images simples avec Matlab

Création d’une image en niveaux de gris

Pour travailler sous Matlab, il faut d’abord démarrer l’interface en cliquant 2 fois sur l’icône

Cela ouvre la fenêtre d’interface, représentée sur la figure suivante :

La grande sous-fenêtre centrale (celle dans laquelle il est écrit « This is a Classroom License … »
s’appelle la « fenêtre de commande » (Command Window).

2
© Gilles Burel - Université de Brest

Cliquez sur l’icône et placez-vous dans votre répertoire. Pour vérifier que vous êtes dans le
bon répertoire, tapez pwd dans la fenêtre « Command Window ».

Maintenant, nous allons réaliser notre premier programme Matlab. Pour cela, ouvrez l’éditeur en
cliquant sur :

Cela ouvre l’éditeur. Dans l’éditeur, tapez le même programme que sur la figure suivante :

Enregistrez votre programme en cliquant sur

Donnez-lui un nom (par exemple : PremierProgramme) et confirmez l’enregistrement en cliquant sur


Enregistrer.

Maintenant, vous pouvez exécuter ce programme en cliquant sur

Vous constaterez alors qu’une image s’affiche.

Si vous regardez dans la fenêtre de commande (Command Window) vous verrez que les valeurs
numériques contenues dans la matrice I se sont affichées.

Quel rapport y-a-t-il entre la matrice I et l’image qui s’est affichée ?

3
© Gilles Burel - Université de Brest

Une image est composée de points, que l’on appelle pixels. Dans une photo, les pixels sont si petits
que l’on ne les distingue pas. Par contre, dans une image simple comme celle que nous venons de
créer on peut distinguer les pixels : ce sont les carrés noirs et blancs que vous avez observés.

Si on veut que le pixel situé ligne 2 et colonne 1 devienne gris, il faut le modifier. La valeur numérique
pour le gris est 0.5

A la suite de votre programme, écrivez :

I(2,1) = 0.5
figure, imshow(I, 'InitialMagnification', 'fit')

Enregistrez et exécutez. Que constatez-vous?

Maintenant, complétez votre programme pour mettre le pixel situé ligne 2 et colonne 3 en gris sombre
(valeur 0.25) et affichez l’image pour vérifier que cela a fonctionné.

Création d’une image couleur


Nous allons à présent créer une image couleur. Sur un écran, la couleur est fabriquée en mélangeant
3 couleurs primaires : Rouge (Red), Vert (Green) et Bleu (Blue). En général, on note ces 3 couleurs
primaires par leurs initiales en anglais : R, G, B.

Dans la mémoire de l’ordinateur, l’image couleur est représentée par 3 matrices, que l’on note ci-
dessous R, G, et B. Ces trois matrices indiquent le dosage du rouge, du vert, et du bleu. Dans les
logiciels récents, comme la version de Matlab que vous utilisez, les trois matrices sont regroupées
dans une seule « matrice » à trois dimensions, notée RGB.

On peut accéder aux éléments de cette « matrice » à trois dimensions en utilisant trois indices
correspondant respectivement au numéro de ligne, au numéro de colonne et au numéro de couleur
(1=rouge, 2=vert, 3=bleu). Par exemple, si on veut connaître le dosage du bleu (bleu = couleur
numéro 3) pour le pixel situé ligne 2 colonne 1, on écrira RGB(2,1,3)
Si on veut le dosage du bleu pour la totalité des pixels de l’image, on écrira RGB(:,:,3)

Dans votre programme, ajoutez les lignes suivantes :

R = [1 0 1; 0 1 0; 0 0 1]
G = [1 1 0; 0 1 1; 1 0 1]
B = [1 0 0; 1 1 0; 1 1 0]
RGB(:,:,1) = R;
RGB(:,:,2) = G;
RGB(:,:,3) = B;
figure, imshow(RGB, 'InitialMagnification', 'fit');

4
© Gilles Burel - Université de Brest

Enregistrez et exécutez.

Quel rapport y-a-t’il entre les valeurs numériques des tableaux RGB qui s’affichent dans la fenêtre de
commande et les couleurs des points de l’image ?

A la suite de votre programme, tapez les lignes suivantes :


RGB(2,1,1) = 1;
RGB(2,1,2) = 0.5;
RGB(2,1,3) = 0;
figure, imshow(RGB, 'InitialMagnification', 'fit');

Enregistrez et exécutez.

Vous constaterez que cela met le pixel situé ligne 2, colonne 1, en orange. Expliquez pourquoi :

Ecrivez ci-dessous les lignes de programmes permettant mettre le pixel central de l’image en violet
(mélange de rouge et de bleu). Puis, ajoutez ces lignes à la suite de votre programme, enregistrez et
exécutez. Pensez à afficher l’image pour vérifier que cela a fonctionné.

3. Création d’une animation basée sur la couleur

Dans la suite, si vous avez besoin d’informations sur la syntaxe d’une fonction, pensez à utiliser le
help. Par exemple, help imread.

Créez un nouveau programme que vous appellerez Animation.m

Lisez et affichez l’image VortexDeChiffres.jpg


I = imread('VortexDeChiffres.jpg');
[nblig, nbcol, nbprim] = size(I)
figure, imshow(I), title('Vortex de chiffres (original)')

Quelle est la taille de cette image ?

5
© Gilles Burel - Université de Brest

Affichez sur trois figures différentes les composantes R, G et B de cette image. Sur quelle
composante est-ce que les chiffres se distinguent le mieux du fond ?
R = I(:,:,1);
G = …
B = …

Choisissez un seuil adapté et seuillez cette composante pour obtenir une image binaire dans laquelle
les chiffres sont en blanc sur fond noir, comme sur l’image ci-dessous. Par exemple, si la composante
que vous avez choisie est B, faites :
seuil = …
Is = (B > seuil) ;
Affichez Is pour vérifier que vous obtenez bien une image comme celle qui est montrée ci-dessous.

Nous allons mettre les chiffres en rouge, puis en jaune, puis en vert, puis en cyan. Pour cela on
commence par créer une table de couleurs dans laquelle on définit :
Couleur 1 = rouge
Couleur 2 = jaune
Couleur 3 = vert
Couleur 4 = cyan (mélange de vert et de bleu)
Couleur 5 = noir
Le noir est ajouté car on en a besoin pour le fond.

Dans une table de couleur, chaque ligne contient trois valeurs qui définissent la couleur par son
ème
dosage rouge, vert, bleu. Ainsi, par exemple, la 4 ligne de votre table de couleur doit contenir 0 1 1
pour définir votre couleur numéro 4, c’est-à-dire le cyan. Souvent, on appelle map la table de couleurs.
Complétez la ligne ci-dessous et ensuite vérifiez à l’écran que les lignes de map contiennent les
bonnes valeurs :

map = [… … … ; … … … ; … … … ; 0 1 1 ; … … …]

Maintenant, nous allons créer une image d’index qui contient 5 pour le fond (rappelez-vous que la
couleur numéro 5 est le noir), et 1 pour le tracé des chiffres :

X = 5 * ones(nblig,nbcol);
X(Is==1) = 1;
figure, imshow(X,map), title('Chiffres en rouge')

Vérifiez que les chiffres s’affichent bien en rouge.


Essayez de bien comprendre ce que fait la ligne X(Is==1) = 1 ;
Quand vous aurez compris il vous sera facile de voir ce qu’il faut changer sur cette ligne pour mettre
les chiffres en jaune, puis en vert, puis en cyan.

6
© Gilles Burel - Université de Brest

A présent, nous allons créer une table de couleurs qui parcourt


parcourt le cube des couleurs dans l’ordre
suivant :

Segment 1 : Rouge  Jaune


Segment 2 : Jaune  Vert
Segment 3 : Vert  Cyan
Segment 4 : Cyan  Bleu
Segment 5 : Bleu  Magenta
Segment 6 : Magenta  Rouge

On fait donc tout le tour du cube, et on prendra


ts=14 points par segment.

ts = 14; % nombre de couleurs par segment


nbcoul = 6*ts+1; % nombre total de
d couleurs
map = zeros(nbcoul,3);

% segment 1 Rouge – Jaune


map(1:ts,1) = 1; % rouge
map(1:ts,2)
) = linspace(0,1,ts)';
linspace(0, % vert
map(1:ts,3) = 0; % bleu

% segment 2 Jaune – Vert


map(ts+1:2*ts,1)
ts,1) = linspace(1,0,ts)'; % rouge
map(ts+1:2*ts,2) = 1; % vert
map(ts+1:2*ts,3)
ts,3) = 0; % bleu

% à vous de compléter pour les segments 3 à 6

% définition du nombre d’images qui composeront l’animation.


l’animati .
nbtrames = nbcoul-1 ;

Regardez ce qu’il y a dans map et assurez-vous


assurez vous de comprendre ce que vous faites !
A quelle couleur correspond la dernière ligne de map ?

Pour créer l’animation,


• Créez une image d’index X de taille nblig x nbcol (même taille que l’image binaire des
chiffres), et mettez tous les index à nbcoul.
o X = … * ones(…, …);
• Créez une matrice à 4 dimensions, RGBgif, de taille nblig x nbcol x 3 x nbtrames,
nbtrames contenant
uniquement des 0 (fonction
fonction zeros).
o RGBgif = zeros(…,…,…,…) ;
• Faites une boucle ucle sur les trames : for n=1:nbtrames

7
© Gilles Burel - Université de Brest

• A l’intérieur de la boucle, mettez à n tous les pixels de X dont la position correspond à un 1


dans l’image binaire des chiffres.
o X(Is==1) = … ;
• Convertissez en image RGB (fonction ind2rgb).
o RGB = ind2rgb(X,map) ;
• Copiez l’image RGB obtenue dans RGBgif(:,:,:,n)
o RGBgif(:,:,:,n) = … ;

Pour voir l’animation, ajoutez ces lignes dans votre programme :


figure;
for n=1:nbtrames
RGB = RGBgif(:,:,:,n);
imshow(RGB)
pause(0.2);
end

Vous aimerez peut-être aussi