Vous êtes sur la page 1sur 4

TP de Traitement d'images

Pour commencer
Creation de l'environnement de travail :
1. Recup_erez le dossier du TP;
2. Installez scilab en cochant l'option d'installation avec Internet si vous avez la connexion _a Internet pour
charger des modules compl_ementaires. Dans ce cas, dans le menu Applications installez le gestionnaire de
modules ATOMS.
Dans le gestionnaire de modules, ouvrez le module Traitement d'images puis installez Scilab Image and Video
Processing Toolbox.
3. Si vous n'avez pas la connexion _a Internet, vous pouvez t_el_echarger le plugin correspondant sur
http ://sivp.sourceforge.net/, le de-zipper et charger le loader dans Scilab _a chaque d_emarrage par la
commande exec("cheminnloader.sce").
Prise en main de Scilab
4. Scilab reconna^_t les commandes du shell linux (cd, ls, ...). Et comme dans le Shell, la tabulation permet de
compl_eter les commandes.
5. VeriFez toujours votre emplacement courant et pour aller vite n'h_esitez pas _a vous d_eplacer dans le
r_epertoire de travail.
6. Sans le point virgule ; _a la _n des commandes, le r_esultat de l'interpr_etation des commandes est a_ch_e
dans la fen^etre.
Avec le point virgule ce n'est pas le cas. Donc en fonction de si vous voulez a_cher le r_esultat ou non, vous
mettrez ou
pas le point virgule _a la _n des commandes ;
7. Quelques commandes de bases utiles :
(a) Pour ouvrir une image (tour.jpg par exemple) et a_ecter sa matrice _a I on utilise la commande :
I=imread("Cheminnentry.jpg") ; ;
(b) Pour a_cher une image associ_ee au vecteur I on utilise la commande : imshow(I) ; ;
(c) Pour enregistrer une matrice I d'une image dans le _chier out.jpg, on utilise la commande :
imwrite(I, "Cheminnout.jpg") ;.
(d) Pour a_cher une partie d'une matrice I il y a une forme g_en_erique I(A, B, C) o_u A, B et c repr_esentent
des plages :
| debut :_n : ensemble des valeurs de debut _a _n comme I(1 :5,1 :5,1 :2) ;
| index : valeur _a l'index comme I(1,5,2) ;
| : : toute la plage comme I( :, :, :) ;
(e) Pour conna^_tre la taille d'une matrice on utilise la commande size :
| Size(I) ;
| Size (I,1).
(f) Il existe des fonctions pour changer la repr_esentation couleur d'une image. On peut citer entre autres
rgb2gray qui
transforme une image RGB en une image en niveau de gris. Comme applications :
| ouvrez l'image rgb tour.jpg et a_ectez la _a la matrice Irgb ;
| _a l'aide de la fonction rgb2gray, cr_eez Igray, l'_equivalent de Irgb en niveaux de gris ;
| enregistrer Igray dans tourgris.jpg ;
| Pouvez vous d_eduire la fa_con dont rgb2gray transforme les couleurs en niveaux de gris ?
(g) Maintenant int_eressons nous _a comment a_cher l'histogramme de Igray. Pour cela deux fonctions sont
utiles :
| D'abord imhist permet de calculer l'histogramme (calculer les occurrences des pixels pour chaque niveau de
gris) ;
| Ensuite bar permet de repr_esenter la _gure de l'histogramme.
| Servez vous de l'aide (help fonction ) pour les d_etails sur une fonction.
Manipulations d'histogrammes
Dans cette partie du TP, vous allez vous familiariser avec des op_erations sur les histogrammes. L'objectif est de
mettre
en place certains aspects du cours et surtout de mieux appr_ehender la complexit_e de l'information couleur.
Au moment de la
construction de vos histogrammes, il faut tenir compte du fait que les niveaux de gris des images varient de 0
_a 255 et les indices
sous scilab varient de 1 _a 256.
On a abord_e en cours le caract_ere vectoriel des couleurs. Durant les manipulations d'histogrammes vous
verrez les di__erents
compromis qui peuvent ^etre faits pour r_eduire l'information couleur mais _egalement leurs cons_equences.
1
Institut Burkinabe d'Arts et Metiers Traitement d'images
Master 1
Vous travaillerez dans deux espaces de repr_esentation de la couleur : RGB et HSV. Des fonctions existent dans
Scilab pour
passer d'un espace couleur _a un autre (rgb2hsv pour passer du RGB au HSV ou hsv2rgb pour passer du HSV au
RGB).
Vous e_ectuerez des op_erations marginales (par composante couleur) essentiellement puisque, comme vous
le savez, un
histogramme couleur est lourd en m_emoire et di_cile _a manipuler _a moins d'opter pour une quanti_cation
ou un histogramme
compact.
Attention quand vous travaillerez sur les images HSV les valeurs sont des nombres r_eels compris entre 0 et 1.
Pensez donc _a
faire une normalisation ou ramener les valeurs entre 0 et 255.
Compression de contraste
1. Calculez les histogrammes marginaux de l'image tour.jpg dans les deux espaces de couleur RGB et HSV.
(a) Ouvrir l'image tour.jpg et sauvegarder dans la variable imrgb ;
(b) Utiliser rgb2hsv pour cr_eer imhsv l'_equivalent de imrgb dans l'espace HSV;
(c) Quelles di__erences y a-t-il entre imrgb et imhsv ?
(d) Pour imrgb cr_eer les composantes rouge (imrgbR), verte (imrgbV) et bleue (imrgbB) en utilisant une
_ecriture du
type composante=im( :, :,num) ou num correspond au num_ero de la composante. Puis pour chaque
composante
cr_eer son histogramme.
2. L'op_eration de compression de contraste permet de rabaisser le contraste d'une image (et avoir des valeurs
de niveaux
de gris sur une plage r_eduite d'o_u une certaine compression). Un exemple de fonction de compression de
contraste est
donn_ee dans l'_equation (1).
f0(i; j) =
NdGmax 􀀀 NdGmin
255
(f(i; j)) + NdGmin (1)
On veut compresser le contraste des trois composantes R, G et B (imrgb) puis H, S et V (imhsv) et comparez les
deux
images obtenues avec l'image originale.
(a) On va _ecrire une fonction qui nous permettra d'appliquer la manipulation facilement aux composantes.
Pour cela
ouvrir SciNotes (Applications>SciNotes). Copier la fonction (remarquer bien l'_ecriture, nous avons pris la plage
50
_a 100) :
function imOut=compresserNDG(imIn,mini,maxi)
var=iconvert(imIn,12);
imOut=uint8(var*(maxi-mini)/255)+mini;
endfunction
(b) Enregistrer sous fCNdG.sci ;
(c) Charger fCNdG.sci par exec('fCNdG.sci') ;
(d) Appliquer la fonction sur les composantes imrgbR, imrgbV, et imrgbB pour avoir imrgbR1, imrgbV1, et
imrgbB1.
C'est ce qu'on appelle traitement marginal (par composante). Par exemple imrgbR1=compresserNdG(imrgbR) ;
(e) Reconstituer le r_esultat imrgb1 en renseignant les r_esultats pour chaque composante du type
imrgb1( :, :,num)=composante par exemple imrgb1( :, :,1)=imrgbR1.
(f) Enregistrer imrgb1 dans tourRehausse.jpg.
(g) Que remarquez-vous ?
3. Il y a des fonctions comme imadd et imsubstract qui permettent de d_ecaler les niveaux de gris. Testez les et
d^_tes ce _a
quoi elles servent.
_Egalisation d'histogramme
L'op_eration d'_egalisation permettra d'obtenir des histogrammes quasi plats. Un exemple de fonction
d'_egalisation de contraste
est donn_ee dans l'_equation (2) pour un pixel _a la position (i,j) dans l'image.
f0(i; j) = 255 _ HC(f(i; j)) (2)
avec
8<
:
f0(i; j) la nouvelle valeur du pixel
f(i; j) l0ancienne valeur du pixel
HC ! Histogramme Cumul
(3)
1. Proc_edez de la m^eme mani_ere que pour la compression de contraste sur les m^emes images. Que
remarquez vous notamment
sur l'image rueEgaliseRGB.jpg apr_es une _egalisation des valeurs en RGB de fa_con marginale de rue.jpg.
2. Faites une _egalisation juste sur V sur l'image rue.jpg pour avoir rueEgaliseV.jpg. Que remarquez-vous ?
2
Institut Burkinabe d'Arts et Metiers Traitement d'images
Master 1
Filtrages
Notions de bruit
Dans ce qui suit, on veut cr_eer di__erentes versions d_egrad_ees de I=tour.jpg. La premi_ere, Ib, est obtenue
en ajoutant _a
I un bruit gaussien (on parle alors de bruit gaussien additif). La deuxi_eme, Iimp est obtenue en rempla_cant
al_eatoirement les
valeurs de certains pixels de I par des valeurs al_eatoires entre 0 et 255 (on parle de bruit impulsionnel). Pour
ce faire, on utilise
la fonction rand, qui permet de g_en_erer une matrice de nombres al_eatoires suivant une loi uniforme sur [0 ;
1] ou suivant une
loi normale :
| B=rand(10,15,'normal') cr_ee une matrice B _a 10 lignes et 15 colonnes de valeurs suivant la loi normale de
moyenne 0 et
de variance 1 (si on _ecrit 'uniform' au lieu de 'normal', la loi utilis_ee est la loi uniforme) ;
| Si U est une matrice, la commande B=rand(U,'normal') cr_ee une matrice B de m^eme taille que U de valeurs
pseudo-
al_eatoires suivant la loi normale de moyenne 0 et de variance 1.
Bruit gaussien additif
Cr_eer une fonction [Ib]=bruite(I,s), qui prend en entr_ee l'image I et l'_ecart-type s, et cr_ee l'image bruit_ee
Ib = I + B, o_u
B est une matrice de m^eme taille que I, compos_ee de nombres al_eatoires suivant la loi normale de
moyenne 0 et d'_ecart type s
donn_e. A_cher l'image bruit_ee pour diverses valeurs de s.
Bruit impulsionnel
Cr_eer une fonction [Iimp]=bruiteImp(U,p), qui prend en entr_ee l'image I et une valeur 0 _ p _ 100, et cr_ee
une image Iimp
en rempla_cant p% des pixels de I par des valeurs al_eatoires entre 0 et 255. On pourra utiliser d'abord la
fonction rand pour
engendrer un tableau T de nombres al_eatoires suivant la loi uniforme sur [0 ; 1[ : T = rand(I) ; Gr^ace _a ce
tableau on remplacera de
fa_con al_eatoire p% des pixels de l'image I par un niveau de gris al_eatoire. Iimp = 255_rand(I):_(I < p=100)+(I
>= p=100)_U;
A_cher l'image bruit_ee pour diverses valeurs de p.
Filtrages lin_eaires et non lin_eaires
Tous les _ltres utilis_es dans cette partie devront ^etre de taille 3 _ 3. Comme pour les manipulations
d'histogrammes, vous
comparerez plusieurs types de _ltrages notamment des op_erations marginales et des contournements de la
di_cult_e de l'aspect
vectoriel de l'information couleur.
Les op_erations d_ecrites ci-dessous doivent ^etre appliqu_ees puis compar_ees sur les images tour.jpg et
rue.jpg.
Filtrage lin_eaire
Pour le _ltrage lin_eaire il est conseill_ee d'utiliser la fonction im_lter. Vous pourrez cr_eer vos _ltres avec la
fonction fspecial
et les mots cl_es 'gaussion', 'laplacian', 'log', 'average', ...
f = fspecial('average',[3,3]);
imrgbR2= imfilter(imgrgbR,f);
L'avantage de coder votre propre fonction est que vous pourrez _ltrer une image cod_e sur 24 bits.
FiltreMoyenneur :
1
9
2
4
111
111
111
3
5 (4)
FiltreGaussien :
1
16
2
4
121
242
121
3
5 (5)
Dans cette partie, appliquez un _ltrage lin_eaire de fa_con marginale sur chaque composante RGB. Comparez
les r_esultats de
di__erents _ltres et d_ecrivez un peu le fonctionnement de chacun de ces _ltres.
Filtrage non lin_eaire
Le _ltre non lin_eaire que vous utiliserez dans cette partie est un _ltre median. Proc_edez comme
pr_ec_edemment et comparez
les r_esultats.

Vous aimerez peut-être aussi