Travaux pratiques de traitement d’images num´ eriques Premi` ere s´ eance Insti
Travaux pratiques de traitement d’images num´ eriques Premi` ere s´ eance Institut Galil´ ee 2010-2011 G. Dauphin et A. Beghdadi Les travaux pratiques de traitement d’image sont r´ epartis en trois s´ eances de 8 heures chacune. Quelques indications sur MatLab Les images en niveaux de gris sont m´ emoris´ ees sous la forme d’une matrice form´ ee chacune d’entiers de 0 ` a 255 correspondant ` a un octet (format MatLab : uint8). Les images color´ ees sont parfois m´ emoris´ ees sous la forme d’un tableau de chiffres chaque chiffre correspondant ` a un index dans une table de couleur, c’est souvent le format choisi pour les images en couleurs. Elles peuvent aussi ˆ etre m´ emoris´ ees sous la forme d’une matrice-3D form´ ees chacune d’entiers de 0 ` a 255 (par exemple image(1,1,1) d´ esigne l’intensit´ e du rouge [3` eme 1] pr´ esent dans le pixel qui est sur la colonne 1 [1er 1] et sur la ligne 1 [2` eme 1]). Le traitement d’image am` ene ` a faire des op´ erations sur les valeurs de chaque pixel. Il faut donc que ces valeurs soient repr´ esent´ ees avec un type adapt´ e appel´ e double en MatLab. Il est alors n´ ecessaire que les valeurs doivent ˆ etre comprises entre 0 et 1 ; cela afin de pouvoir utliser les commandes MatLab de visualisation des images. MatLab dispose d’une aide en ligne sur la fenˆ etre de commandes : help permet d’afficher les diff´ erentes sections, help nom d’une section permet d’avoir la liste des commandes dans cette section, en particulier help images donne la liste des commandes relatives ` a l’image. help nom d’une commande donne une explication sur la commande et souvent un exemple qui peut vraiment ˆ etre essay´ e. Les images peuvent ˆ etre obtenues soit ` a partir du r´ epertoire de MatLab toolbox\images\imdemos. Les fonctions MatLab pour lire et enregistrer les images sont imread et imwrite. Les fonctions disponibles pour afficher les images sont image, imagesc et imshow. Attention ` a imshow qui consid` ere que si l’image consid´ er´ ee est compos´ ee d’entiers alors l’image est suppos´ ee ˆ etre en 0 et 256, tandis que si l’image est form´ ee de double, alors l’image est suppos´ ee ˆ etre entre 0 et 1. Dans le cadre de ces TP, on se placera dans ce deuxi` eme cas. Plusieurs images peuvent ˆ etre affich´ ees sur une seule figure grˆ ace aux fonctions figure et subplot. Une image en niveau de gris et plus g´ en´ eralement n’importe quelle matrice peuvent ˆ etre consid´ er´ ees comme une surface : ` a chaque coefficient de la matrice, on associe un point dont l’abscisse et l’ordonn´ ee sont d´ etermin´ es par la position de ce coefficient et dont la cote est d´ etermin´ ee par la valeur du coefficient. Les fonctions MatLab disponibles sont surf et mesh, la premi` ere fonction colore les ´ el´ ements de surface tandis que la deuxi` eme colore seulement les bords des ´ el´ ements de surface. MatLab permet d’utiliser les commandes internes et les noms de programmes ´ ecrits comme des variables. Cependant il faut absolument ´ eviter de faire cela. Pr´ eambule On appelle image naturelle, une image obtenue ` a partir du monde r´ eel, par exemple au moyen d’un appareil pho- tographique. Ici l’image naturelle est not´ ee image n. On appelle image synth´ etique, une image construite ` a partir d’un ordinateur, ici l’image synth´ etique est not´ ee image s. Dans le cadre de ces travaux pratiques, il est conseill´ e d’utiliser ` a la fois une image naturelle et une image synth´ etique. Sauf indication contraire, les commandes pro- pos´ ees sont valables pour des images en niveaux de gris (avec 256 niveaux)et de taille 256x256. Cependant on peut faire les traitements sur des images couleurs en appliquant ces traitements s´ epar´ ement sur les composantes rouges, vertes et bleues. 1 On peut obtenir une image en niveau de gris ` a partir d’une image en couleur en utilisant la commande rgb2gray. On peut obtenir une image de taille 256 × 256 en ne consid´ erant qu’une partie de l’image en utilisant imcrop ou en r´ eduisant la taille de l’image avec imresize. Pour avoir la liste des images d´ ej` a disponibles sous MatLab help imdemos, Cas d’une image avec des vraies couleurs : image_n=imread(’autumn.tif’); On peut voir que cette image n n’est pas une matrice mais un ensemble de trois matrices en faisant : size(image_n), On peut visualiser en niveaux de gris la composante rouge de l’image couleur figure(1); imshow(image_n(:,:,1)) On peut visualiser en niveaux de gris la composante verte de l’image couleur figure(1); imshow(image_n(:,:,2)) On peut visualiser l’ensemble des trois matrices sous la forme d’une image couleur figure(1); imshow(image_n); Cas d’une image avec un petit nombre de couleurs : [image_ind,map]=imread(’forest.tif’); Cette image couleur est manifestement stock´ ee sous la forme d’une table d’indice qui renvoie ` a une table de couleurs parce que image ind est une matrice. size(image_ind), Pour repr´ esenter cette image couleur sous la forme d’un triplet de matrice correspondant au rouge, vert et bleu. image_n=ind2rgb(image_ind,map); On peut v´ erifier qu’on s’est ramen´ e au cas pr´ ec´ edent avec size(image_n) On peut alors afficher l’image couleur ainsi obtenue. figure(1); imshow(image_n); Pour faire des calculs il est n´ ecessaire de passer en format double puis aussi de convertir l’ensemble des valeurs en des valeurs contenus dans l’intervalle [0, 1]. En effet on pourrait afficher une image couleur avec seulement ces instructions im1=imread(’autumn.tif’); figure(1); imshow(im1); Cependant pour faire des calculs on est amen´ e ` a convertir au format double et dans ce cas on ne voit plus rien. 2 figure(1); imshow(double(im1); Il suffit alors de diviser par 256 pour obtenir le r´ esultat souhait´ e. figure(1); imshow(double(im1)/256); Pour savoir si une image provient d’une palette finie de couleur, il existe une fac ¸on de faire avec la fonction Mat- Lab unique en comptabilisant toutes les couleurs diff´ erentes au sein de l’image couleur (ce nombre de couleurs diff´ erentes est n´ ecessairement inf´ erieur ou ´ egal au nombre de pixels de l’image et a priori diff´ erent de la somme du nombre de rouges diff´ erents du nombre de verts diff´ erents et du nombre de bleus diff´ erents). Comme les couleurs sont repr´ esent´ es par des triplets, une astuce pour les repr´ esenter sur un seul nombre est de les laisser sous la forme d’un triplet d’entier entre 0 et 255 et de convertir ce triplet en un entier entre 0 et 255*255*255 par le biais de ces commandes. im1=imread(’autumn.tif’); image_c=im1(:,:,1)+256*im1(:,:,2)+256*256*im1(:,:,3); Le nombre de couleurs diff´ erentes est alors donn´ e par length(unique(image_c(:))), Ce nombre est bien sˆ ur diff´ erent de length(unique(im1(:,:,1)))+length(unique(im1(:,:,2)))+length(unique(im1(:,:,3))), Construction d’une image synth´ etique : Soit un carr´ e blanc noy´ e dans un fond uniforme gris, soit un disque noy´ e dans un fond uniforme. La premi` ere image peut se faire avec ones(256,256)*0.5 pour le fond gris et avec ones(15,15) pour le carr´ e. La deuxi` eme image peut se faire avec meshgrid et find en utilisant le fait qu’un disque a pour ´ equation : (x − 100)2 + (y −100)2 ≤400. L’image synth´ etique choisie est not´ ee image s. Pour le carr´ e : im1=ones(256)*0.5; im1(128-7:128+7,128-7:128+7)=1; figure(1); imshow(im1); On peut v´ erifier que le carr´ e est de bonne taille avec sqrt(sum(sum(im1>=0.8))), Pour le disque : [x,y]=meshgrid(0:255,255:-1:0); im1=((x-100).ˆ2+(y-100).ˆ2<=400); figure(1); imshow(im1); Quantification lin´ eaire : La fonction N d´ etermine pour chaque valeur de t, le nombre d’´ el´ ements de A inf´ erieur ` a cette valeur de t. La commande inline permet de d´ efinir cette commande. Le symbole .’’ signifie en fait transpos´ ee de la matrice auquel il s’applique. L’apostrophe est doubl´ ee parce qu’elle est incluse dans une chaˆ ıne de caract` ere qui va ˆ etre interprˆ et´ ee lors de l’ex´ ecution de la fonction. N_=inline(... ’reshape(sum(ones(length(t(:).’’),1)*(A(:).’’)<t(:)*ones(1,length(A)),2),size(t))’... ,’t’,’A’); 3 Cette commande qui r´ ealise une fonction en escalier permet d’illustrer le fonctionnement de cette commande figure(1); plot(0:0.01:10,N_(0:0.01:10,0:10)); Grˆ ace ` a cette commande la quantification lin´ eaire devient im1=double(imread(’coins.png’))/256; figure(1); imshow(im1); Scale=0:1/8:1; ImQuant=Scale(N_(im1,Scale)); Le nombre de niveaux de quantifications est d´ etermin´ e par le vecteur Scale. Quantification non-lin´ eaire : La quantification non-lin´ eaire est r´ ealis´ ee de fac ¸on presque similaire. im1=double(imread(’coins.png’))/256; figure(1); imshow(im1); Scale=(0:1/8:1).ˆ2; ImQuant=Scale(N_(im1,Scale)); On peut v´ erifier que l’image a ´ et´ e quantifi´ ee en utilisant length(unique(ImQuant)), 1 Analyse du signal image On consid` ere une image synth´ etique de taille 256 × 256 not´ ee image s puis une image naturelle de mˆ eme taille, not´ ee image n. 1. On souhaite r´ eduire par un facteur de quatre la taille de l’image choisie. (a) Une premi` ere solution consiste ` a prendre un pixel sur quatre (i.e. un pixel par carr´ e de quatre pixels). Utiliser ce proc´ ed´ uploads/s3/ tp1-tin-l.pdf
Documents similaires
-
18
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Fev 26, 2022
- Catégorie Creative Arts / Ar...
- Langue French
- Taille du fichier 0.1495MB