26.06.2013 Views

Traitement numérique des images

Traitement numérique des images

Traitement numérique des images

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

Les Travaux pratiques<br />

Sous Matlab<br />

Dr Mohamad KHALIL<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

TP01 : Les couleurs - Les palettes - transformation d'<strong>images</strong><br />

En utilisant la Toolbox MATLAB "image Processing":<br />

1- >> help <strong>images</strong> donne toutes les fonctions existantes dans la toolbox image<br />

processing.<br />

2- Les <strong>images</strong> suivantes sont prêtes dans la toolbox de Matlab 7 C:\Program<br />

Files\MATLAB\R2006a\toolbox\<strong>images</strong>\imdemos\ et peuvent être utilisées pour<br />

tester nos algorithmes<br />

bag.png hestain.png tape.png blobs.png liftingbody.png testpat1.png<br />

circles.png onion.png text.png coins.png pears.png tissue.png<br />

concordaerial.png peppers.png westconcordaerial.png concordorthophoto.png<br />

pillsetc.png westconcordorthophoto.png fabric.png rice.png<br />

gantrycrane.png saturn.png glass.png snowflakes.png<br />

football.jpg greens.jpg<br />

AT3_1m4_01.tif AT3_1m4_08.tif cell.tif m83.tif tire.tif AT3_1m4_02.tif<br />

AT3_1m4_09.tif circbw.tif moon.tif trees.tif T3_1m4_03.tif AT3_1m4_10.tif<br />

circuit.tif mri.tif AT3_1m4_04.tif autumn.tif eight.tif paper1.tif<br />

AT3_1m4_05.tif board.tif forest.tif pout.tif AT3_1m4_06.tif cameraman.tif<br />

kids.tif shadow.tif AT3_1m4_07.tif canoe.tif logo.tif spine.tif<br />

3- Pour lire une image on utilise X=imread(‘nom du fichier avec l’extension’). On<br />

obtient une matrice de données X. example : X=imead(‘rice.tif’). Faire Whos<br />

pour voir les dimensions et le type de X. X est de type « uint8 ». C.est a dire<br />

matrice non signée et 8 bits : entre 0 et 255.<br />

4- Pour tracer une image on utilise imshow (X)<br />

Inshow(X) fonctionne de la manière suivante :<br />

a- Si X est double, on suppose que 1=blanc et 0 est noir. Toutes les<br />

valeurs de X plus grande de 1 sont supposées blanches. 0.5 est<br />

gris, 0.7 est gris claire, 0.3 est gris foncé.<br />

Exemple :<br />

>> x=[0 0.2,0.6 ;1 0.1 0.9 ;1,1,0.5]<br />

>>imshow(x)<br />

b- Si X est binaire, c’est une image noir et blanc. Pas de niveau de<br />

gris. X=imread(‘circles.png’).<br />

c- Si X est uint8 alors la matrice X est entre 0 et 255. Dans ce cas,<br />

255 est blanc et 0 et noir. X=imread(‘rice.tif’)<br />

5- Pour voir la palette de couleur par defaut de matlab, on ecrit colormap. Utilisant<br />

colormap on peut imprimer les 3 composants R, G et B. Pour tracer la palette on<br />

tape colorbar.<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


Manipulations:<br />

1- Regarder la palette <strong>des</strong> couleurs utilisées par défauts dans Matlab. Pour cela,<br />

reouvrir Matlab et puis taper colorbar. Regarder les composantes RGB. Utiliser<br />

rgbplot(colormap) pour voir la distribution RGB.<br />

2- Créer une matrice X 4x4 qui contient <strong>des</strong> données entre 0 et 64. Voir l'image<br />

correspondante à cette matrice (image (X)). Donc vous utilisez la palette par<br />

defaut de Matlab. Pour changer la palette faire doc colormap ou ecrire<br />

colormap(pink) ou colormap(jet)…..<br />

3- Ouvrir l’image binaire circles.tif. La tracer utilisant imshow(x).<br />

4- Ouvrir l’image gris rice.png et spine.tif. les tracer avec imshow.<br />

5- Ouvrir l'image couleur indexée trees.tif avec sa palette :<br />

[x,map]=imread(‘trees.tif’). La tracer avec la palette de Matlab utilisant<br />

imshow(X,colormap) et avec son propre palette imshow(X,map) Observer.<br />

6- Diviser toute la palette, map ou colormap par un nombre donné. Retracer la même<br />

figure et observer.<br />

7- Transformer les couleurs RGB de map en niveaux de gris. Utiliser la fonction<br />

rgb2gray. Observer les nouvelles composantes RGB. Retracer l'image trees en<br />

niveaux de gris. Observer.<br />

8- Ouvrir l’image couleur peppers.png. c’est une image couleur dont sa matrice est<br />

3D. Faire whos pour voir X et imshow(x) et observer les couleurs.<br />

9- Pour la même image de la question 8, sur une même figure tracer les composantes<br />

rouge, vert et bleue de cette image. Pour cela, on va créer 3 matrices 3D Xr, Xb et<br />

Xv. Dans la matrice Xr (rouge), copier la composante rouge de X et mettre a zéros<br />

les composantes vert et bleue puis tracer cette matrice……. Même chose pour les<br />

deux autres.<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

TP02: transformations unitaires : transformation de Fourrier 2-D<br />

1- Faire help fft2 pour apprendre comment utiliser la transformee de fourier a<br />

deux dimensions<br />

2- Faire help fftshift aussi et apprendre comment fonctionne t-il.<br />

3- Utilisant la toolbox Matlab, Creer une image 256*256 contenant un carrée de<br />

capacité 64*64 centré à l'origine (noir==1, fond==0). Utiliser les fonctions<br />

zeros et ones<br />

4- Faites la transformée de Fourier discrète de cette image. Discuter les résultats<br />

en fonction du largueur de la fenètre.<br />

5- Créer l'ensemble <strong>des</strong> figures ci <strong>des</strong>sous et faites la transformée de Fourier<br />

discrète de chaque image. Les comparer. Déduire<br />

6- Utiliser la fonction CHECKERBOARD pour créer une image. Tester la<br />

transformée de Fourier de cette image.<br />

7- Charger les figures: spine.tif et trees.tif. Faites les transformées de Fourier de<br />

chaque image. Les reconstruire utilisant la TF inverse<br />

8- Faire help imtransform et faire une transformation de l’image checkerboard.<br />

Faire la TF et analyser les résultats.<br />

scale = 1.2; % scale factor<br />

angle = 40*pi/180; % rotation angle<br />

tx = 0; % x translation<br />

ty = 0; % y translation<br />

sc = scale*cos(angle);<br />

ss = scale*sin(angle);<br />

T = [ sc -ss;ss sc ;tx ty];<br />

t_lc = maketform('affine',T);<br />

S = imtransform(I,t_lc,'FillValues',.3);<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


9- Tracer une image contenant un rectangle. Faire la TF de cette image.<br />

Faire tourner cette image. Refaire sa TF et conclure.<br />

10- Faire la TF d’une image couleur ‘peppers.tif’. Pour cela, on fera la TF<br />

de chaque image correspondante a chaque couleur.<br />

11- On pourra ameliorer la qualite d’une image (contraste) en enlevant la<br />

module de la TFpar exposant alpha : F’(U,V)=|F(u,v| alpha exp phi(u,v)<br />

0


<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

TP03: transformations unitaires : transformation de Hadamard, cosinus discrète<br />

1- Apprendre les fonction inline, blkproc et std2 a partir du help du Matlab.<br />

Utiliser cette procedure puis commenter les résultats<br />

I = imread('cameraman.tif');<br />

fun = inline('std2(x)*ones(size(x))');<br />

I2 = blkproc(I,[8 8],fun);<br />

imshow(I)<br />

Figure, imshow(I2,[])<br />

2- Faites dctdemo pour voir une démonstartion sur la transformation en cosinus<br />

discrète.<br />

3- Charger l'image f=rice.tif ou ic.tif du matlab.<br />

4- Diviser l'image en <strong>des</strong> blocks 8*8 puis appliquer la transformée en cosinus<br />

discrète de chaque block. Utiliser la fonction blkproc :<br />

dctf=blkproc(f,[8,8],'dct2');<br />

vous avez 1024 blocks et dans chacun vous avez 64 coefficients. Nous allons<br />

utiliser que quelques coefficients pour reconstruire l'image. Pour visualiser la<br />

forme de dctf, utiliser imshow(dctf,[]).<br />

5- Retenir que quelques coefficients de la dct (1x1,2x2,3x3,4x4,5x5…) dans<br />

chaque block de dctf. La nouvelle matrice est g. Reconstruire l'image initiale<br />

dans chaque cas utilisant la TCD inverse. Utiliser<br />

Fhat=blkproc(g,[8,8],'idct2')<br />

6- Calculer le rapport signal sur bruit pour chaque nombre <strong>des</strong> coefficients choisi.<br />

Pour cela, utiliser a fonction sum(sum(f-fhat).^2)<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

TP04 : Erosion, dilatation, fermeture, ouverture, transformation de voisinage<br />

Partie 1: Erosion et dilatation<br />

7- Charger l'image text.tif de la toolbox Matlab<br />

8- Faire une érosion par une ligne de 4 pixels<br />

help imerode<br />

9- Faire une dilatation par une ligne de 4 pixels<br />

help imdilate<br />

10- Faire une ouverture par un carré 3x3<br />

imerode +imdilate<br />

11- Faire une fermeture par le même carrée<br />

imdilate+imerode<br />

12- Pour créer un élément structurant dans Matlab, il faut utiliser la fonction strel.m<br />

Essayer les mêmes techniques avec un élément circulaire de diamètre 10. Il faudra<br />

utiliser dans ce cas imerode et imdilate,<br />

Partie 2: Opérations morphologiques diverses<br />

1- charger l'image 'cirles.tif' de la toolbox Matlab<br />

2- le programme bwmorph.m permet de réaliser plusieurs opérations<br />

morphologiques sur les <strong>images</strong>. Faire help bwmorph pour apprendre à l'utiliser<br />

3- Essayer ce programme avec : bothat, clean, close, dilate, erode, hbreak, majority,<br />

open, remove, thicken, thin<br />

4- Créer <strong>des</strong> <strong>images</strong> pour interpréter toutes ces fonctions surtout hbreak, clean<br />

5- Ajouter du bruit « Salt and Pepper » sur l’image originale circles.tif puis appliquer<br />

majority filter<br />

Partie 3: Transformation de voisinage<br />

1- Faite help applylut et help makelut pour apprendre comment appliquer la<br />

transformée de voisinage<br />

Remarques: Lut=ensemble <strong>des</strong> zeros et <strong>des</strong> 1.<br />

N=2 donne 16 possibilités: 0 0 0 0 ….1111<br />

00 10 01 11 00 10 01 11 00 10…<br />

00 00 00 00 10 10 10 10 01 01<br />

00 01 11<br />

si lut=[000010000000011] alors V= 10 11 11<br />

2- Charger l'image circles.tiff<br />

3- Faire une transformée de voisinage utilisant<br />

00 01 11<br />

V= 10 11 11<br />

4- Faire un amincissement en appliquant applylut V=[111 ;111 ;111]<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

TP05 : Histogramme- Rehaussement <strong>des</strong> <strong>images</strong><br />

13- Exécuter le fichier demo : imadjdemo.m et faire suivre les instructions<br />

14- Charger l'image rice.tif , tire.tif ou pout.tif de la toolbox Matlab<br />

15- Tracer l'histogramme normalisé de chaque image. Utiliser imhist<br />

16- Faire une manipulation sur cet histogramme utilisant la fonction<br />

imadjust.m : comment faire ce changement d'histogramme:<br />

1<br />

sortie<br />

0<br />

0.1 0.5 entrée<br />

5- Changer le coefficient gamma (fonction imadjust) et interpréter.<br />

6- Comment faire pour changer le brightness? Use la fonction brighten<br />

7- Apprendre la fonction stretchlim.m. Appliquer<br />

I = imread('pout.tif');<br />

J = imadjust(I,stretchlim(I),[]);<br />

imshow(I), figure, imshow(J)<br />

8- Faire une égalisation d'histogramme, tracer sur une même figure l’image<br />

originale, l'histogramme original normalisé, l’image égalisée, l'histogramme<br />

égalisé et la fonction de transformation de couleur z=f(r) . Utiliser histeq et<br />

subplot.<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

TP06 : Filtrage Spatiale<br />

1- Exécuter la fonction nrfiltdemo et suivre les instructions<br />

2- Charger l’image ‘pout.tif’. Ajouter du bruit sur cette image. Utiliser la<br />

fonction imnoise.m. Voir les résultats pour différents types du bruit.<br />

3- Faire le filtrage de cette image utilisant :<br />

a. Une fenêtre 3*3 homogène centré a l’origine (averaging)<br />

b. Une fenêtre 3*3 qui a la forme<br />

1 2 1<br />

2 4 2<br />

1 2 1<br />

c. Une fenêtre 5*5 homogène et centrée a l’origine (averaging)<br />

d. Un filtre médiane 3*3. Utiliser la fonction medfilt2.m<br />

e. Un filtre médiane 5*5.<br />

4- Utiliser la fonction fspecial.m pour créer un filtre spatiale. Essayer de faire du<br />

filtrage (utiliser imfilter.m) après avoir ajouter du bruit gaussien sur l’image<br />

‘eight,tif’ et ‘saturn.tif’ et cela pour les types suivants :<br />

'average' averaging filter<br />

'disk' circular averaging filter<br />

'gaussian' Gaussian lowpass filter<br />

'laplacian' filter approximating the 2-D Laplacian operator<br />

'log' Laplacian of Gaussian filter<br />

'motion' motion filter<br />

'prewitt' Prewitt horizontal edge-emphasizing filter<br />

'sobel' Sobel horizontal edge-emphasizing filter<br />

'unsharp' unsharp contrast enhancement filter<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

TP07 : Détection <strong>des</strong> contours<br />

1- Read in 'cell.tif', which is an image of a prostate cancer cell.<br />

I = imread('cell.tif');<br />

figure, imshow(I), title('original image');<br />

2- Rescale the Image<br />

We use the imadjust function to rescale the image so that it covers the entire dynamic<br />

range ([0,1]).<br />

DI = imadjust(I, [], [0 1]);<br />

figure, imshow(DI), title('scaled image');<br />

3- Detect Entire Cell<br />

Two cells are present in this image, but only one cell can be seen in its entirety. We<br />

will detect this cell. Another word for object detection is segmentation. The object to<br />

be segmented differs greatly in contrast from the background image. Changes in<br />

contrast can be detected by operators that calculate the gradient of an image. One way<br />

to calculate the gradient of an image is the Sobel operator, which creates a binary<br />

mask using a user-specified threshold value.We determine a threshold value using the<br />

graythresh function. To create the binary gradient mask, we use the edge function.<br />

BWs = edge(DI, 'sobel', (graythresh(DI) * .1));<br />

figure, imshow(BWs), title('binary gradient mask');<br />

4: Fill Gaps<br />

The binary gradient mask shows lines of high contrast in the image. These lines do<br />

notquite delineate the outline of the object of interest. Compared to the original<br />

image, you can see gaps in the lines surrounding the object in the gradient mask.<br />

These linear gaps will disappear if the Sobel image is dilated using linear structuring<br />

elements, which we can create with the strel function.<br />

se90 = strel('line', 3, 90);<br />

se0 = strel('line', 3, 0);<br />

5: Dilate the Image<br />

The binary gradient mask is dilated using the vertical structuring element followed by<br />

the horizontal structuring element. The imdilate function dilates the image.<br />

BWsdil = imdilate(BWs, [se90 se0]);<br />

figure, imshow(BWsdil), title('dilated gradient mask');<br />

6: Fill Interior Gaps<br />

The dilated gradient mask shows the outline of the cell quite nicely, but there are still<br />

holes in the interior of the cell. To fill these holes we use the imfill function.<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


BWdfill = imfill(BWsdil, 'holes');<br />

figure, imshow(BWdfill);<br />

title('binary image with filled holes');<br />

7- Remove Connected Objects on Border<br />

The cell of interest has been successfully segmented, but it is not the only object that<br />

has been found. Any objects that are connected to the border of the image can be<br />

removed using the imclearborder function. The connectivity in the imclearborder<br />

function was set to 4 to remove diagonal connections.<br />

BWnobord = imclearborder(BWdfill, 4);<br />

figure, imshow(BWnobord), title('cleared border image');<br />

8- Smooth the Object<br />

Finally, in order to make the segmented object look natural, we smooth the object by<br />

eroding the image twice with a diamond structuring element. We create the diamond<br />

structuring element using the strel function.<br />

seD = strel('diamond',1);<br />

BWfinal = imerode(BWnobord,seD);<br />

BWfinal = imerode(BWfinal,seD);<br />

figure, imshow(BWfinal), title('segmented image');<br />

An alternate method for displaying the segmented object would be to place an outline<br />

around the segmented cell. The outline is created by the bwperim function.<br />

BWoutline = bwperim(BWfinal);<br />

Segout = imadd(I, immultiply(BWoutline, 255));<br />

figure, imshow(Segout), title('outlined original image');<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

TP08 : Détection <strong>des</strong> contours, paramétrage<br />

PART I : Elimination et paramétrage <strong>des</strong> grands objets dans une<br />

image:<br />

1. Faire edgedemo pour voir un demo sur la détection <strong>des</strong> contours.<br />

2. Pour détecter un contour, on utilise la fonction edge.m. Cette fonction utilise<br />

plusieurs métho<strong>des</strong> (masques) : Sobel, prewitt, roberts, laplacien, zero<br />

crossing et canny.<br />

Appliquer cette méthode pour détecter le contour de l’image binaire<br />

‘circles.tif’ et de l’image gris ‘rice.tif’.<br />

3. Apprendre les functions bwselect.m and bwarea.m<br />

4. Binariser l’image rice.tif. Utiliser la function im2bw.m<br />

5. Ecrire un programme qui permet d’éliminer les objets qui touche les bords de<br />

l’image précédente. Pour cela utiliser la fonction bwselect.m<br />

6. Ecrire un programme qui permet de compter le nombre <strong>des</strong> objets dans une<br />

image et retourne pour chaque objet : sa surface, son périmètre, son centre de<br />

gravite.<br />

Surface=nombre de pixels que constitue l’objet<br />

Perimetre : monbre de pixel sur le contour<br />

Centre de gravite :<br />

X=somme de tous les Xi <strong>des</strong> pixels appartenant a<br />

l’objet /surface<br />

Y=somme de tous les Yi <strong>des</strong> pixels appartenant a<br />

l’objet/surface<br />

Part II: Detecting Microstructures Using Image Segmentation<br />

Our goal is to detect microstructures within objects shown in the image. Any kind of<br />

detection in an image is known as image segmentation. Our segmentation method<br />

consists of the following steps:<br />

Find all the small structures in the image<br />

Find the large objects in the image, and<br />

Extract the common elements to both <strong>images</strong>.<br />

Step 1: Read Image<br />

Step 2: Find Small Structures<br />

Step 3: Extract Large Objects<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


Step 4: Extract Small Structures<br />

Step 1: Read Image<br />

I = imread('pearlite.tif');<br />

figure, imshow(I), title('original image');<br />

Step 2: Find Small Structures<br />

To find all small structures, we take the complement of the image with the<br />

imcomplement function, so that the pixels values of the structures are higher than<br />

those of the background. We then threshold the resulting image with the im2bw<br />

function at a level specified by the graythresh function.<br />

Ic = imcomplement(I);<br />

BW = im2bw(Ic, graythresh(Ic));<br />

figure, imshow(Ic), title('complement of image');<br />

figure, imshow(BW);<br />

title('thresholding the image to show small structures');<br />

Step 3: Extract Large Objects<br />

We extract the large objects from this thresholded image by using morphologic<br />

closing and opening operations in succession. These processes are commonly used to<br />

smooth, fill in, and/or remove objects in a grayscale or binary image. Morphologic<br />

closing is equivalent to a dilation followed by an erosion with a structuring element.<br />

Similarly, morphologic opening is equivalent to an erosion followed by a dilation.<br />

The choice of a structuring element depends on the size and shape of the objects to be<br />

modified. In our case, we create a disk-shaped structuring element with a radius of six<br />

pixels using the strel function.<br />

se = strel('disk', 6);<br />

BWc = imclose(BW, se);<br />

BWco = imopen(BWc, se);<br />

figure, imshow(BWc), title('closing the thresholded image');<br />

figure, imshow(BWco);<br />

title('opening the image to show large objects');<br />

Step 4: Extract Small Structures<br />

We have created an image containing all small structures and an image containing<br />

large objects. To extract all small structures within the large objects, we take the<br />

intersection or "and" of the two <strong>images</strong> with the & operator.<br />

mask = BW & BWco;<br />

figure, imshow(mask), title('the "and" of these two <strong>images</strong>');<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


Partie 1 : Par DCT<br />

1- Charger l'image rice.tif de l'image.<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

TP09 : Compression <strong>des</strong> <strong>images</strong><br />

2- Faire la transformation en DCT en la décomposant en <strong>des</strong> blocs de 8x8(utiliser<br />

blkproc.m)<br />

Appliquer la quantification par la matrice Q(i,j)=1+m(1+i+j).<br />

m est la facteur de qualité.<br />

Prenez m=2,4, ,6 et 10.<br />

Reconstruire l'image et calculer l'erreur pour chaque m.<br />

Partie 2 : Ondelettes.<br />

1- Charger l'image tire.tif de l'image.<br />

2- Faire la transformation en ondelettes en la décomposant en <strong>des</strong> blocs de 8x8<br />

3- Appliquer un seuillage sur la matrice finale (on vous laisse estimer le seuil)<br />

4- Reconstruire l'image et calculer l'erreur pour chaque seuil (prenez plusieurs seuils<br />

distincts)<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL


TP10 : Transformée de Radon<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong><br />

TP11 : Caractérisation <strong>des</strong> objets circulaires<br />

<strong>Traitement</strong> <strong>numérique</strong> <strong>des</strong> <strong>images</strong> Dr. Mohamad KHALIL

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!