Weitere Files findest du auf DIE ... · 3.1 Lecture et ouverture d’une image I=...

29
Weitere Files findest du auf www.semestra.ch/files DIE FILES DÜRFEN NUR FÜR DEN EIGENEN GEBRAUCH BENUTZT WERDEN. DAS COPYRIGHT LIEGT BEIM JEWEILIGEN AUTOR.

Transcript of Weitere Files findest du auf DIE ... · 3.1 Lecture et ouverture d’une image I=...

Weitere Files findest du auf www.semestra.ch/files

DIE FILES DÜRFEN NUR FÜR DEN EIGENEN GEBRAUCH BENUTZT WERDEN. DAS COPYRIGHT LIEGT BEIM JEWEILIGEN AUTOR.

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

1

Image Processing Laboratory

1 Introduction Le but de ce laboratoire est de se familiariser avec les images et les signaux bidimensionnels. On peut aussi avec des images effectuer des traitements tels que le filtrage. Ces opérations ont aussi des significations visuelles. Le traitement des images peut être utile afin d’améliorer la qualité des images, et est une des étapes de la reconnaissance de formes. Des pièces mécaniques et du texte représentent des exemples typiques de scènes pour la reconnaissance de formes. Dans un premier temps, il faut s’intéresser aux démos du « Image Processing Toolbox » et en retirer les éléments importants. Par la suite, nous avons suivi les 4 données concernant ce rapport qui se trouvent en annexe !

2 Matériel à disposition - Matlab, version 12.1 (nouvelle version) - Manuel « Image Processing Toolbox »

3 Exercice 1 : Image Processing Toolbox 3.1 Lecture et ouverture d’une image

I= imread('lily.tif'); % lecture de l’image imshow(I) % affichage de l’image MatLab permet l’ouverture des fichiers BMP, HDF, JPEG, PCX, PNG, TIF,GIF, XWD...

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

2

3.2 Contrôle de l’image en mémoire A l’aide de la commande ‘whos’, il est possible de voir la place occupée en mémoire par l’image : Name Size Bytes Class I 186x230x3 128340 uint8 array I2 186x230x3 128340 uint8 array ans 1x1 4830 struct array Grand total is 256847 elements using 261510 bytes 3.3 Histogramme L’histogramme d’une image permet de visualiser la distribution des intensités ou des couleurs dans une image. figure, % création d’une fenêtre d’affichage subplot(1,2,1),imshow(I) % affichage de l’image subplot(1,2,2),imhist(I) % affichage de l’histogramme avec la % reconnaissance de 256 intensités différentes

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

3

4 Exercice 2 : Image Processing Toolbox 4.1 Lecture et ouverture de l’image à traiter figure, I= imread('rice.tif'); % lecture de l’image imshow(I) % affichage de l’image

4.2 Estimation de l’arrière-plan (Background) figure, background = imopen(I,strel('disk',15)); % estimation de l’illumination du background imshow(background) % visualisation du background

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

4

4.3 Graphique de l'approximation du background surf(double(background(1:8:end,1:8:end))),zlim([0 255]); set(gca,'ydir','reverse');

background2 = imopen(I,strel('square',15)); surf(double(background2(1:8:end,1:8:end))),zlim([0 255]); set(gca,'ydir','reverse');

La commande ‘strel’ crée un élément de structure morphologique, nous avons choisi la forme d’un disque (‘disk’, rayon de 15 pixels) car c’est elle qui donnait le meilleur background. En effet, d’autres formes donnent d’avantages d’irrégularités : voir graphique ci-dessus.

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

5

4.4 Soustraction du background à l’image originale I2 = imsubtract(I,background); figure, imshow(I2) Le background étant foncé, les grains de riz sont plus sombres que sur l’image originale. 4.5 Ajustage du contraste de l’image I3 = imadjust(I2,stretchlim(I2),[0 1]); imshow(I3); La commande ‘stretchlim’ permet de trouver la limite du contraste. La tolérance dans notre exemple est entre 0 et 1.

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

6

4.6 Recherche du contour des objets l’image (Tresholding) level = graythresh(I3) bw = im2bw(I3,level); imshow(bw) Le niveau de ‘Tresholding’ est calculé par Matlab au moyen de la méthode de Otsu. whos Name Size Bytes Class I 256x256 65536 uint8 array I2 256x256 65536 uint8 array I3 256x256 65536 uint8 array background 256x256 65536 uint8 array bw 256x256 65536 uint8 array (logical) level 1x1 8 double array Grand total is 327681 elements using 327688 bytes

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

7

4.7 Détermination du nombre d’objets dans une image [labeled,numObjects] = bwlabel (bw,4); numObjects Le nombre de grain de riz dans cette image est de 80 ! numObjects = 80 4.8 Analyse d’une matrice (morceau de l’image) grain = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 45 0 0 0 0 0 0 45 45 45 45 0 0 0 0 45 45 45 45 45 45 0 0 45 45 45 45 45 45 45 0

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

8

5 Exercice 3 : Swiss Flag et Chess board Matlab offre diverses possibilités de conversion. Ci-dessous, quelques exemples de conversion sont explicités. 5.1 Image indexée du drapeau suisse flag =[1 1 1 1 1 ; 1 1 2 1 1; 1 2 2 2 1; 1 1 2 1 1; 1 1 1 1 1]; map_flag = [1 0 0;1 1 1]; figure, imshow(flag,map_flag) title('image indexée') 5.2 Image indexée du chess board board = [1 2 1 2 1 2 1 2; 2 1 2 1 2 1 2 1; 1 2 1 2 1 2 1 2; 2 1 2 1 2 1 2 1; 1 2 1 2 1 2 1 2; 2 1 2 1 2 1 2 1; 1 2 1 2 1 2 1 2; 2 1 2 1 2 1 2 1]; map_board = [0 0 0;1 1 1]; figure, imshow(board,map_board) title('image indexée') 5.3 Images ‘intensité’ flag_intens= ind2gray(flag,map_flag); figure, imshow(flag_intens) title('image intensité') board_intens = ind2gray(board,map_board); figure, imshow(board_intens) title('image intensité')

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

9

5.4 Images RGB flag_rgb = ind2rgb(flag,map_flag) figure, imshow(flag_rgb) title('image RGB') board_rgb = ind2rgb(board,map_board) figure, imshow(board_rgb) title('image RGB') 5.5 Images NB (noir-blanc) flag_nb = rgb2gray(flag_rgb); newmap_flag = rgb2gray(map_flag); figure, imshow(flag_nb) title('image nb') board_nb = rgb2gray(board_rgb); newmap_board = rgb2gray(map_board); figure, imshow(board_nb) title('image nb')

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

10

6 Exercice 4 : imfilter, conv2, filter2 6.1 Image source A = imread('blood1.tif'); h=ones(5,5)/25; I = imfilter(A,h); figure subplot(2,1,1),imshow(A); title('image originale'); subplot(2,1,2),imshow(I); title('image filtrée avec matrice unité(5,5)/25');

Observations : - Le contraste diminue après filtrage. - L’image devient floue.

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

11

6.2 Image filtrée I2 = imfilter(A,h,'replicate'); I3 = imfilter(A,h,'symmetric'); I4 = imfilter(A,h,'circular'); figure subplot(1,3,1),imshow(I2); title('image replicate'); subplot(1,3,2),imshow(I3); title('image symetric'); subplot(1,3,3),imshow(I4); title('image circular');

Ces options n’amènent pas des nuances visibles et facilement décelables. Pour voir les différences entre les options de bords, voir dans l’aide, rubrique ‘imfilter’.

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

12

6.3 Image ‘same’ et ‘full’ I5 = imfilter(A,h,'same'); I6 = imfilter(A,h,'full'); figure, subplot(1,2,1),imshow(I5) title('matrice de taille identique') subplot(1,2,2),imshow(I6) title('matrice full') disp('taille originale') size(A) disp('taille après filtrage, option same') sizeI5 = size(I5) disp('taille après filtrage3,option full') sizeI6 = size(I6)

taille originale ans = 265 272 taille après filtrage, option same sizeI5 = 265 272

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

13

taille après filtrage3, option full sizeI6 = 269 276 Cette opération permet de choisir la grandeur de sortie de l’image par rapport à l’originale. Pour ‘full’, l’image est agrandie 6.4 Image ‘same’ et ‘full’ avec commande filter2 I7 = filter2(A,h,'same'); I8 = filter2(A,h,'full'); disp('taille après filter2 same') sizeI7 = size(I7) disp('taille après filter2 full') sizeI8 = size(I8) figure subplot(1,2,1),imshow(I7/256) title('image filtrée avec la commande filter2 same') % Donne la même taille que X. subplot(1,2,2),imshow(I8/256) title('image filtrée avec la commande filter2 full')

Remarque : ‘filter2’ est un opérateur bidimensionnel linéaire.

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

14

taille après filter2 same sizeI7 = 5 5 taille après filter2 full sizeI8 = 269 276

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

15

7 Exercice 6 : Effets de filtres (Sobel, Prewitt, Lowpass, Highpass) 7.1 Image originale convertie en noir et blanc I = rgb2gray(A); figure subplot(1,2,1),imshow(A); title('image originale'); subplot(1,2,2),imshow(I); title('image convertie en NB');

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

16

7.2 Sobel et Prewitt BW1 = edge(I,'sobel'); BW2 = edge(I,'canny'); M1=[1 2 1;0 0 0;-1 -2 -1]; % Sobel horizontal BW3=conv2(I,M1); M2=[1 1 1;0 0 0;-1 -1 -1]; % Prewitt horizontal BW4=conv2(I,M2); M4=[1 0 -1;2 0 -2;1 0 -1]; % Sobel vertical BW5=conv2(I,M4); M5=[1 0 -1;1 0 -1;1 0 -1]; % Prewitt vertical BW6=conv2(I,M5); BW7=max(abs(BW3),abs(BW5)); % Résultat final Sobel BW8=max(abs(BW4),abs(BW6)); % Résultat final Prewitt figure subplot(4,2,1),imshow(BW1); title('Avec l opérateur de sobel (matlab)...'); subplot(4,2,2),imshow(BW2); title('Avec l opérateur de canny (matlab)...'); subplot(4,2,3),imshow(abs(BW3/256)); title('Avec l opérateur de Sobel horz.(pers)...'); subplot(4,2,4),imshow(abs(BW4/256)); title('Avec l opérateur de Prewitt horz.(pers)...'); subplot(4,2,5),imshow(abs(BW5/256)); title('Avec l opérateur de Sobel vert.(pers)...'); subplot(4,2,6),imshow(abs(BW6/256)); title('Avec l opérateur de Prewitt vert.(pers)...'); subplot(4,2,7),imshow(abs(BW7/256)); title('Avec l opérateur de Sobel final (pers)...'); subplot(4,2,8),imshow(abs(BW8/256)); title('Avec l opérateur de Prewitt final (pers)...');

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

17

7.3 Moyenne (Averaging) M3=(1/9)*[1 1 1;1 1 1;1 1 1]; ImageFiltred_01=conv2(I,M3); ImageFiltred_02=conv2(A,M3); figure subplot(1,2,1),imshow(ImageFiltred_01/256); title('Filtrage de l image NB (lissage MOYENNE)'); subplot(1,2,2),imshow(ImageFiltred_02/256); title('Filtrage de l image RGB (lissage MOYENNE)');

Le bruit disparaît, cependant l'image devient plus floue.

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

18

7.4 Lowpass filter kernel M4=(1/10)*[1 1 1;1 2 1;1 1 1]; ImageFiltred_03=conv2(I,M4); ImageFiltred_04=conv2(A,M4); figure subplot(1,2,1),imshow(ImageFiltred_03/256); title('Filtrage de l image NB (lissage PASSE BAS)'); subplot(1,2,2),imshow(ImageFiltred_04/256); title('Filtrage de l image RGB (lissage PASSE BAS)');

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

19

8 Session 56 : non-linear filtering and morphological processing 8.1 Non – linear filtering • Histogramme de l’image originale I = imread('trees.tif'); figure, subplot(1,2,1), imshow(I), title('image originale') subplot(1,2,2), imhist(I), title('histogramme originale')

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

20

• Image binarization load trees lecture du fichier ‘trees’ I = ind2gray (X,map); image indexée ton niveau de gris BW = edge(I); prise du contour de I et mise dans BW imshow (~BW,2) 2 : affiche BW en binaire (noir / blanc) ~ : permet d’inverser les couleurs

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

21

• Edge detection % Seuil haut = coupure % Seuil bas = erreur(contours ne resortent pas) bw1 = edge(I,'sobel'); bw2 = edge(I,'sobel',0.05); figure, subplot(1,2,1) imshow(~bw1) title('lily.tif nb edge sobel') subplot(1,2,2) imshow(~bw2) title('lily.tif nb edge sobel, thre=0.05')

On remnarque que l’on peut jouer avec le seuil de décision afin d’avoir le contour de manière plus ou moins marqué.

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

22

• Median filtering bw3 = imnoise(I,'salt & pepper',0.02); bw4 = medfilt2(bw3); bw5 = medfilt2(I,[5,5]); figure, subplot(3,1,1), imshow(bw3), title('image avec du bruit salt & pepper') subplot(3,1,2), imshow(bw4), title('image avec filtre médian') subplot(3,1,3), imshow(bw4), title('image avec filtre médian 5x5')

C’est mieux de faire le filtre médian avec une matrice NxN ou N est impair. Le filtre médian supprime les détails, le bruit, mais ne modifie pas la forme des contours.

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

23

8.2 Morphological processing • Skel bw6 = imread('circbw.tif'); bw7 = bwmorph(bw6,'skel',Inf); % Skel une deuxième fois bw77 = bwmorph(bw7,'skel',Inf); bw8 = bwperim(bw6); figure, subplot(2,2,1),imshow(bw6),title('image circuit original') subplot(2,2,2),imshow(bw7),title('image skel') subplot(2,2,3),imshow(bw77),title('image skel 2x') subplot(2,2,4),imshow(bw8),title('image périm')

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

24

• Imerode (Shrink) % Définition des strels se_rec = strel('rectangle', [40,30]); se_disk = strel('disk',5); se_sq = strel('square',20); % Imerode une première fois bw9 = imerode(bw6,se_rec); bw10 = imerode(bw6,se_disk); bw11 = imerode(bw6,se_sq); % Imerode une deuxième fois bw99 = imerode(bw9,se_rec); bw1010 = imerode(bw10,se_disk); bw1111 = imerode(bw11,se_sq); figure, subplot(3,2,1),imshow(bw9),title('image imerode strel rectangle') subplot(3,2,3),imshow(bw10),title('image imerode strel disk') subplot(3,2,5),imshow(bw11),title('image imerdoe strel square') subplot(3,2,2),imshow(bw99),title('image imerode 2x') subplot(3,2,4),imshow(bw1010),title('image imerode strel disk 2x') subplot(3,2,6),imshow(bw1111),title('image imerode strel square 2x')

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

25

• Imdilate (Expand) % Imdilate 1X bw12 = imdilate(bw9,se_rec); bw13 = imdilate(bw10,se_disk); bw14 = imdilate(bw11,se_sq); % Imdilate 2x bw15 = imdilate(bw99,se_rec); bw16 = imdilate(bw15,se_rec); bw17 = imdilate(bw1010,se_disk); bw18 = imdilate(bw17,se_disk); bw19 = imdilate(bw1111,se_rec); bw20 = imdilate(bw19,se_sq); figure, subplot(3,2,1),imshow(bw12),title('image imdilate rectangle') subplot(3,2,3),imshow(bw13),title('image imdilate disk') subplot(3,2,5),imshow(bw14),title('image imdilate square') % Imdilate 2x subplot(3,2,2),imshow(bw16),title('image imdilate rectangle 2x') subplot(3,2,4),imshow(bw18),title('image imdilate disk 2x') subplot(3,2,6),imshow(bw20),title('image imdilate square 2x')

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

26

On remarque que l’application d’un ‘erod’ suivi d’un ‘dilate’ ne permet pas de retrouver l’image originale : des informations ont été perdues.

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

27

• Applylut and makelut (bwmorph) f = ('sum(x(:)) >= 3'); lut1 = makelut(f,2); lut2 = makelut(f,3); bw21 = imread('text.tif'); bw22 = applylut(bw21,lut1); bw23 = applylut(bw21,lut2); bw24 = bwmorph(bw21,lut1); bw25 = bwmorph(bw21,lut2); figure, subplot(3,2,1),imshow(bw21),title('image originale') subplot(3,2,3),imshow(bw22),title('image lut 2x2') subplot(3,2,5),imshow(bw23),title('image lut 3x3') subplot(3,2,4),imshow(bw24),title('image lut 2x2, bwmorph') subplot(3,2,6),imshow(bw25),title('image lut 3x3, bwmorph')

Laboratoire Traitement du signal

Olivier Corminboeuf Mai / Juin 2002 Cédric Favre

28

9 Synthèse et conclusion Ce laboratoire nous a permis de connaître quelques outils de base du traitement d’images avec Matlab. Après ce laboratoire, nous nous sentons capables de résoudre un problème lié au traitement de l’image. Matlab Image Processing Toolbox est un outil puissant, avec lequel il est possible de traiter des images avec minutie. Un grand nombre d’options et de matrices de traitement sont disponibles. Fribourg, le 25 juin 2002 Olivier Corminboeuf Cédric Favre