G. Dauphin et A. Beghdadi
Les travaux pratiques de traitement dimage sont r partis en trois s ances de 8 heures chacune. e e
Pr ambule e
` On appelle image naturelle, une image obtenue a partir du monde r el, par exemple au moyen dun appareil phoe ` tographique. Ici limage naturelle est not e image n. On appelle image synth tique, une image construite a partir e e dun ordinateur, ici limage synth tique est not e image s. Dans le cadre de ces travaux pratiques, il est conseill e e e ` dutiliser a la fois une image naturelle et une image synth tique. Sauf indication contraire, les commandes proe pos es sont valables pour des images en niveaux de gris (avec 256 niveaux)et de taille 256x256. Cependant on peut e faire les traitements sur des images couleurs en appliquant ces traitements s par ment sur les composantes rouges, e e vertes et bleues. 1
` On peut obtenir une image en niveau de gris a partir dune image en couleur en utilisant la commande rgb2gray. On peut obtenir une image de taille 256 256 en ne consid rant quune partie de limage en utilisant imcrop ou e en r duisant la taille de limage avec imresize. e Pour avoir la liste des images d j` disponibles sous MatLab ea help imdemos, Cas dune image avec des vraies couleurs : image_n=imread(autumn.tif); On peut voir que cette image n nest 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 limage couleur figure(1); imshow(image_n(:,:,1)) On peut visualiser en niveaux de gris la composante verte de limage couleur figure(1); imshow(image_n(:,:,2)) On peut visualiser lensemble des trois matrices sous la forme dune image couleur figure(1); imshow(image_n); Cas dune image avec un petit nombre de couleurs : [image_ind,map]=imread(forest.tif); ` Cette image couleur est manifestement stock e sous la forme dune table dindice qui renvoie a une table de e couleurs parce que image ind est une matrice. size(image_ind), Pour repr senter cette image couleur sous la forme dun triplet de matrice correspondant au rouge, vert et bleu. e image_n=ind2rgb(image_ind,map); On peut v rier quon sest ramen au cas pr c dent avec e e e e size(image_n) On peut alors afcher limage couleur ainsi obtenue. figure(1); imshow(image_n); Pour faire des calculs il est n cessaire de passer en format double puis aussi de convertir lensemble des valeurs e en des valeurs contenus dans lintervalle [0, 1]. En effet on pourrait afcher une image couleur avec seulement ces instructions im1=imread(autumn.tif); figure(1); imshow(im1); Cependant pour faire des calculs on est amen a convertir au format double et dans ce cas on ne voit plus rien. e` 2
figure(1); imshow(double(im1); Il suft alors de diviser par 256 pour obtenir le r sultat souhait . e e figure(1); imshow(double(im1)/256); Pour savoir si une image provient dune palette nie de couleur, il existe une facon de faire avec la fonction Mat Lab unique en comptabilisant toutes les couleurs diff rentes au sein de limage couleur (ce nombre de couleurs e diff rentes est n cessairement inf rieur ou egal au nombre de pixels de limage et a priori diff rent de la somme du e e e e nombre de rouges diff rents du nombre de verts diff rents et du nombre de bleus diff rents). Comme les couleurs e e e sont repr sent s par des triplets, une astuce pour les repr senter sur un seul nombre est de les laisser sous la forme e e e dun triplet dentier 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 rentes est alors donn par e e length(unique(image_c(:))), Ce nombre est bien s r diff rent de u e length(unique(im1(:,:,1)))+length(unique(im1(:,:,2)))+length(unique(im1(:,:,3))), Construction dune image synth tique : e Soit un carr blanc noy dans un fond uniforme gris, soit un disque noy dans un fond uniforme. La premi` re e e e e image peut se faire avec ones(256,256)*0.5 pour le fond gris et avec ones(15,15) pour le carr . La e deuxi` me image peut se faire avec meshgrid et find en utilisant le fait quun disque a pour equation : (x e 100)2 + (y 100)2 400. Limage synth tique choisie est not e image s. e e 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 rier que le carr est de bonne taille avec e e 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); Quantication lin aire : e ` La fonction N d termine pour chaque valeur de t, le nombre d l ments de A inf rieur a cette valeur de t. e ee e La commande inline permet de d nir cette commande. Le symbole . signie en fait transpos e de la e e matrice auquel il sapplique. Lapostrophe est doubl e parce quelle est incluse dans une chane de caract` re qui va e e etre interpr t e lors de lex cution de la fonction. ee e
N_=inline(... reshape(sum(ones(length(t(:).),1)*(A(:).)<t(:)*ones(1,length(A)),2),size(t))... ,t,A);
Cette commande qui r alise une fonction en escalier permet dillustrer le fonctionnement de cette commande e figure(1); plot(0:0.01:10,N_(0:0.01:10,0:10)); Gr ce a cette commande la quantication lin aire devient a ` e 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 quantications est d termin par le vecteur Scale. e e Quantication non-lin aire : e La quantication non-lin aire est r alis e de facon presque similaire. e e e
im1=double(imread(coins.png))/256; figure(1); imshow(im1); Scale=(0:1/8:1).2; ImQuant=Scale(N_(im1,Scale));
e On consid` re une image synth tique de taille 256 256 not e image s puis une image naturelle de m me taille, e e e not e image n. e 1. On souhaite r duire par un facteur de quatre la taille de limage choisie. e ` (a) Une premi` re solution consiste a prendre un pixel sur quatre (i.e. un pixel par carr de quatre pixels). e e Utiliser ce proc d pour r duire la taille de limage. R it rer ce processus de r duction (3 fois) jusqu` e e e e e e a obtenir une image de taille 32 32 (on parle de d composition multir solution). Afcher avec des e e tailles diff rentes les images ainsi obtenues. e deci=inline(im(1:2:end,1:2:end),im); im2=deci(im1); (b) A chaque etape, discuter du crit` re de Nyquist et adapter le ltre de restitution vu en pr paration e e pour r constituer lensemble de limage. Comparer les versions restitu es avec la version originale e e de limage.
inte=inline(filter2(ones(2),upsample(upsample(im1.,2).,2)),im1);
` (c) Une deuxi` me solution consiste a remplacer un groupe de pixels (2 2) par un seul dont le niveau de e ` gris est egal a la moyenne des quatre pixels du groupe, limage est alors not e image rd2. Comparer e les deux approches. ` Une impl mentation consiste a construire une fonction en ligne qui remplace un groupe de 2 2 pixels e ` par un seul dont le niveau de gris est egal a la moyenne des quatre pixels. En fait cest ici inutile car la fonction mean2 le fait d j` . ea A=[1 0;0 1]; mean2(A), ` ` La suite de limpl mentation consiste a utiliser blkproc pour appliquer cette fonction a tous les e groupes de 2 2 pixels de limage. 4
im2=blkproc(im1,[2 2],@mean2); ` Une deuxi` me impl mentation consiste a ltrer limage par le moyenneur de masque ones(2)/4 puis e e ` e e a d cimer. Dans la deuxi` me impl mentation un grand nombre de calculs en plus ont et effectu s mais e e e les pixels contenant les r sultats de ces nouveaux calculs ne sont plus dans limage r sultante. e e im2=deci(filter2(ones(2)/4,im1)); 2. On souhaite maintenant retrouver une image de m me taille que loriginale en partant de la derni` re version e e ` r duite. Une premi` re solution consiste a reproduire le m me pixel plusieurs fois de facon a retrouver la e e e ` taille initiale. Exp rimenter cette solution, not e image mr et discuter son effet. Proposer une solution plus e e efcace et exp rimenter la. Afcher pour chacune des solutions le signal image erreur sur fond gris not e e e image err et analyser le aux diff rents etages de la d composition multir solution. e e e
Quantication
Appliquer une quantication uniforme sur image s puis sur une image naturelle image n en utilisant 30,10 puis 5 niveaux de quantications. Indiquer les diff rences perceptibles entre les images quanti es et les images e e dorigine.
Sous- chantillonner le signal de chrominance et reformer limage. Puis sous- chantillonner le signal de luminance e e et reformer cette autre image. Observer et commenter les images obtenues.
On consid` re des images en niveaux de gris, ces valeurs de gris etant d j` quanti es sur 256 niveaux. Simuler des e ea e quantications sur un certain nombre de niveaux. Observer et commenter les images obtenues.
La quantication sur N niveaux se fait en appliquant la fonction g pixel (celui-ci etant a priori entre 0 et 1).
Explication
E(N g) N
a la valeur de chaque `
` e Une m thode pour impl menter cette quantication consiste a d nir une fonction en ligne inline qui r alise e e e ` ` cette op ration et a lappliquer a limage. e On consid` re maintenant une image couleur. S parer le signal chrominance du signal de luminance. Quantier e e le signal de chrominance et reformer limage. Puis quantier le signal de luminance et reformer cette autre image. Observer et commenter les images obtenues.
Lerreur quadratique moyenne est aussi appel e MSE (mean square error) : e EQM = 1 M N
o b gm,n gm,n m n 2
EQM=1/M/N*sum(sum((image_o-image_b).2)); Le PSNR, encore appel peak signal noise ratio, signie e dB = 10 log10 (max(g) min(g))2 EQM
` Ces mesures n voluent pas de facon proportionnelle, ainsi le calcul du quotient de lune par rapport a lautre e peut mettre en evidence certains aspects.
Graphes
Construire deux graphiques repr sentant pour une image donn e en niveaux de gris, l volution du PSNR en fonce e e tion du niveau de quantication dune part, et dautre part l volution du PSNR en fonction de la r solution de e e limage.