• Non ci sono risultati.

B Appendice al Capitolo 4

N/A
N/A
Protected

Academic year: 2021

Condividi "B Appendice al Capitolo 4"

Copied!
6
0
0

Testo completo

(1)

A

A

P

P

P

P

E

E

N

N

D

D

I

I

C

C

E

E

A

A

L

L

C

C

A

A

P

P

I

I

T

T

O

O

L

L

O

O

4

4

In questa appendice sono riportati i programmi Matlab che implementano gli algoritmi di elaborazione delle immagini descritti nel Capitolo 4. Per alcune parti dei programmi verranno anche fornite informazioni più dettagliate; per le parti in cui ciò non accade si rimanda all’Help dello stesso software.

(2)

B.1 Algoritmo di elaborazione manuale

Il programma Matlab listato di seguito implementa i blocchi del diagramma di flusso l’algoritmo di elaborazione manuale posti a valle di quello relativo alla “Selezione dell’asse di rotazione dell’induttore” (vedi Figura 4.17).Questo blocco è presente nel programma che permette l’elaborazione dei filmati digitali (vedi Sezione C.1).

1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2 % Programma che permette di selezionare diverse zone di 3 % un'immagine e di dare,all'interno di queste, 4 % un valore di soglia mediante il quale l'immagine 5 % viene trasformata in immagine binaria

6 %--- 7 % SINTASSI:

8 % I2=elaborazione_man(I) 9 % INPUT:

10 % I =immagine in scala di grigio 11 % OUTPUT:

12 % I2=immagine segmentata (binaria)

13 %--- 14 % NOTE: è utilizzato dal programma di elaborazione dei filmati 15 % digitali 16 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 17 function I3=elaborazione_man(I) 18 close all 19 clc 20 21 opz=1; 22 23 k=1; 24 while opz == 1

25 mask=roipoly(I); % permette di selezionare una zona all'interno dell'immagine

26 I2=immultiply(I,mask); % rende nera la parte di immagine che sta fuori dalla zona selzionata

27 soglia=graythresh2(I2);

28 im_part(:,:,k)=im2bw(I2,soglia); % applicazione della tecnica del valore di soglia

29 confronto(I,im_part(:,:,k));

30 j=menu('Vuoi modificare il valore di soglia?','Si','No');% eventuale modifica del valore di soglia

31 if j==1

32 disp('Il valore di soglia di primo tentativo è') 33 disp( num2str(soglia*255) ) 34 end

35 while j==1 % Ciclo iterativo per il settaggio del valore di soglia

36 soglia=input('Inserire il nuovo valore di soglia'); 37 im_part(:,:,k)=im2bw(I2,soglia/255);

38 confronto(I,im_part(:,:,k));

39 j=menu('Vuoi modificare il valore di soglia?','Si','No'); 40 end

41 opz=menu('Vuoi selezionare altre regioni?','Si','No'); % selezione di altre zone all'interno dell'immagine

42 close all 43 k=k+1; 44 end

45 [m n p]=size(im_part); 46

(3)

47 % unione di tutte le zone selezionate e modificate in un'unica 48 % immagine binaria 49 I3(:,:)=im_part(:,:,1); 50 for i=2:p 51 I3(:,:)=I3(:,:)+im_part(:,:,i); 52 end 53 for i=1:m 54 for j=1:n 55 if I3(i,j)>1 56 I3(i,j)=1; 57 end 58 end 59 end 60 clc 61 %---

B.2 Elaborazione automatica dell’immagine

Questo programma implementa il blocco denominato “Elaborazione automatica dell’immagine” presente nel diagramma di flusso dell’algoritmo semi-automatico (Figura 4.24.

1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2 % Programma che esegue l'elaborazione automatica

3 % dell'immagine e che produce l'immagine di primo tentativo

4 % nell'algoritmo semi-automatico 5 %---

6 % SINTASSI:

7 % I2=elaborazione_aut(I) 8 % INPUT:

9 % I =immagine in scala di grigio 10 % OUTPUT:

11 % I2=immagine segmentata automaticamente (binaria) 12 %--- 13 % NOTE: è utilizzato dal programma di elaborazione dei filmati 14 % digitali

15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 function I4=elaborazione_aut(I)

17

18 % Creazione della maschera che annerisce la zona centrale 19 % dell'immagine e quella esterna all'induttore

20 r1=55; 21 r2=78; 22 ang=0:pi/180:2*pi; 23 x1=30+r1*(1-cos(ang)); 24 x2=8+r2*(1-cos(ang)); 25 y1=30+r1*(1+sin(ang)); 26 y2=8+r2*(1+sin(ang)); 27 mask1=roipoly(I,y1,x1); 28 mask2=roipoly(I,y2,x2); 29 mask1=not(mask1); 30 mask=immultiply(mask1,mask2); 31 I2=immultiply(I,mask); 32

33 % Divisione dell'immagine in settori circolari e settaggio del 34 % valore di soglia in ogni settore

35

36 k=1;

37 ang_space=15;

(4)

39 x1=[86 85*(1+sin(ang1)) ... 85*(1+sin(ang1-ang_space*(pi/180)))]; 40 y1=[86 85*(1-cos(ang1)) ... 85*(1-cos(ang1-ang_space*(pi/180)))]; 41 mask1=roipoly(I2,x1,y1); 42 I3=immultiply(I2,mask1); 43 [i,j,v]=find(I3); 44 v=double(v);

45 if std(v)<0.13*mean(v) % caso in cui la deviazione standard del settore è bassa

46 T=1; 47 else 48 T=graythresh2(I3); 49 end 50 im_part(:,:,k)=im2bw(I3,T); 51 media(k)=mean(v); 52 s_dev(k)=std(v); 53 soglie(k)=T; 54 k=k+1; 55 end

56 matr=[media' (s_dev./media)' (soglie*255)']; 57

58 % unione di tutte le zone selezionate e modificate in un'unica 59 % immagine binaria 60 [m n p]=size(im_part); 61 I4(:,:)=im_part(:,:,1); 62 for i=2:p 63 I4(:,:)=I4(:,:)+im_part(:,:,i); 64 end 65 for i=1:m 66 for j=1:n 67 if I4(i,j)>1 68 I4(i,j)=1; 69 end 70 end 71 end 72 clc 73 %---

B.3 Programmi ausiliari

B.3.1 Confronto tra le immagini originali e quelle elaborate

1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2 % Programma che permette di fare il confronto tra il 3 % fotogramma originale e quello modificato

4 %--- 5 % SINTASSI:

6 % h=confronto(I,I2) 7 % INPUT:

8 % I = immagine originale (in scala di grigio) 9 % I2 = immagine modificata (binaria)

10 % OUTPUT:

11 % h = immagine che mostra il confronto

12 %--- 13 % NOTE: è usato dal programma di elaborazione dei filmati 14 % digitali

15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 function h=confronto(I,I2)

(5)

18 % Rilevamento dei contorni delle zone bianche nel fotogramma 19 % modificato

20 BW=edge(I2); 21

22 % Sovrapposizione del contorno sull'immagine originale 23 [x,y]=find(BW);

24 h=figure; 25 imshow(I); 26 hold on

27 line(y,x,'LineStyle','none','Marker','.','MarkerEdgeColor',...

'r') 28 hold off

29 %---

B.3.2 Calcolo dell’istogramma delle zone selezionate con l’algoritmo manuale

1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2 % Programma che permette di ricavare l'istogramma della 3 % porzione di immagine selezionata con

4 % l'algoritmo manuale

5 %--- 6 % SINTASSI:

7 % istogramma(I) 8 % INPUT:

9 % I = immagine contenente la zona selezionata 10 % OUTPUT:

11 % istogramma della zona selezionata

12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 13 function istogramma(I)

14

15 [counts,x] = imhist(I); % counts=numero di pixels che hanno valore grayscale x

16 counts(1)=0; % elimina i pixels neri dall'istogramma 17 18 % Plottaggio dell'istogramma 19 plot(x,counts) 20 grid 21 axis([0 255 0 max(counts)]) 22 %---

B.3.3 Calcolo della deviazione standard dei settori circolari dell’immagine

Questo programma permette di ottenere grafici quali quelli di Figura 4.26 che permettono capire qual è il valore di soglia da impostare al rigo 45 del programma presente nella Sezione B.2. Prima dell’utilizzo di tale programma bisogna modificare la stringa presente al rigo 8 relativa al nome del file contenente il filmato.

1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2 % Programma per il calcolo della deviazione standard in 3 % funzione di theta per il primo frame di un filmato

4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5

6 % Lettura del primo frame di un filmato e selezione dell'asse 7 % di rotazione dell'induttore

8 M1=aviread('phi0_053sig0_57',1); 9 I=frame2im(M1);

10 I=rgb2gray(I); 11 figure

(6)

12 axis ij

13 title('Selezionare l''asse di rotazione dell''induttore ...

(doppio click)') 14 hold on 15 [x_c y_c P]=impixel(I); 16 hold off 17 I=imcrop(I,[x_c-85 y_c-85 170 170]); 18

19 % Creazione della maschera che annerisce la zona centrale 20 % dell'immagine e quella esterna all'induttore

21 r1=55; 22 r2=82; 23 ang=0:pi/180:2*pi; 24 x1=30+r1*(1-cos(ang)); 25 x2=4+r2*(1-cos(ang)); 26 y1=30+r1*(1+sin(ang)); 27 y2=4+r2*(1+sin(ang)); 28 mask1=roipoly(I,y1,x1); 29 mask2=roipoly(I,y2,x2); 30 mask1=not(mask1); 31 mask=immultiply(mask1,mask2); 32 I2=immultiply(I,mask); 33 34 %--- 35 % andamento di media e deviazione std in funzione di theta 36 %--- 37 k=1;

38 ang_space=1;

39 for ang1=ang_space*(pi/180):ang_space*(pi/180):2*pi

40 x1=[86 85*(1+sin(ang1)) 85*(1+sin(ang1-ang_space*(pi/180)))]; 41 y1=[86 85*(1-cos(ang1)) 85*(1-cos(ang1-ang_space*(pi/180)))]; 42 mask1=roipoly(I2,x1,y1); 43 I3=immultiply(I2,mask1); 44 [i,j,v]=find(I3); 45 v=double(v); 46 media(k)=mean(v); 47 s_dev(k)=std(v); 48 k=k+1; 49 end 50 std_norm=100*(s_dev./media); 51 matr=[media' std_norm']; 52 std_norm(length(std_norm)+1)=std_norm(1); 53 theta=ang_space:ang_space:360; 54

55 % Grafico della deviazione standard in funzione di theta 56 plot(theta,matr(:,2))

57 axis([0 360 0 100]) 58 xlabel('\theta [deg]')

59 ylabel('deviazione standard [% della media]') 60 grid

Riferimenti

Documenti correlati

Poiché le materie prime non sono altro che materiali, beni, acquisiti dall’azienda produttrice per il processo produttivo, quando parliamo di costo di tali beni

Per quanto concerne le strategie di comunicazione attuate dalle aziende mostrano un avvio molto lento, in quanto è essenziale sviluppare, prima, un network sempre più

In that case the following two hypotheses have to be confirmed: Hypothesis 1: The public discourse in the EU is significantly different from that in non-EU countries in this case

To restate the approaches, the ideational approach argues that populism is a specific set of ideas if not a distinct ideology, while the strategic approach argues that populism is

En cambio, el juicio de 2, bastante negativo, corresponde a un porcentaje de 10% (dos estudiantes): en este caso, la mayoría de las opciones seleccionadas por los dos

The New Strategic Agenda cov- ers policy areas such as: the rule of law, the integ- rity of the territory, migration policy, protection against cyber activities, cohesion, demographic

First, after the &#34;Governmentality&#34; lecture, Foucault several times shifted the meaning of the term and the respective periodisation. To give only a few

These five systems – nomination quotas to SMDs, supra-districts, rotating districts, PR-tier systems and alternate thresholds – constitute the primary forms of TSMs used