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
5
5
In questa appendice vengono dapprima riassunte le condizioni di flusso caratteristiche dei vari filmati registrati. Vengono inoltre riportati i programmi Matlab che implementano gli algoritmi di elaborazione e analisi deifilmati digitali descritti nel Capitolo 5. Per alcune parti dei programmi verranno anche fornite informazioni più dettagliate; per le parti in cui
C.1 Condizioni di flusso dei filmati
Coefficiente di flusso (Φ
)0.003 0.009
0.016
0.024
0.034
0.042
0.051
0.063
0.45 0.37 0.27 0,22 0.26 0.23 0.22 0.19
0,50 0.42 0.35 0.29 0.30 0.28 0.27 0.22
0,57 0.48 0.41 0.34 0.34 0.33 0.30 0.27
0,62 0.53 0.45 0.38 0.39 0.37 0.34 0.30
0.62 0.54 0.44 0.43 0.40 0.38 0.32
063 0.51 0.51 0.47 0.42 0.37
0.55 0.52 0.48 0.47
Numero di cavitazione ( )0.51
0.52
Tabella C.1 – Condizioni di flusso per i filmati laterali relativi all’induttore FIP162
Coefficiente di flusso (
Φ
)0.010
0.040
0.065
0.070
0.083
0.090
0.105
0.24 0.11 0.05 0.06 0.14 0.14 0.14
0.27 0.15 0.09 0.07 0.15 0.15 0.15
0.31 0.16 0.13 0.10 0.16 0.17 0.16
0.35 0.17 0.19 0.12
0.38 0.20 0.14
Numero di cavitazione ( )0.43 0.23
Tabella C.2 – Condizioni di flusso per i filmati laterali relativi all’induttore FAST2
Coefficiente di flusso (
Φ )
0.008 0.017 0.029
0.034
0.040
0.053 0.057
0.060
0.44
0.41 0.41 0.41 0.40 0.39 0.38 0.29
0.50
0.46 0.46 0.45 0.45 0.45 0.44 0.39
0.51
0.48 0.50 0.50 0.48 0.48 0.49 0.45
0.57
0.50 0.60 0.61 0.61 0.57 0.59 0.48
0.60
0.60
0.59
Numero di cavitazione ( )Tabella C.3 – Condizioni di flusso per i filmati frontali relativi all’induttore FIP162
(
Ω =
1500 rpm
)C.2 Elaborazione dei filmati
Questo programma implementa l’algoritmo di elaborazione semi-automatico e ne permette l’applicazione a tutti o a parte dei fotogrammi di un intero filmato digitale (frontale). Questo stesso programma, se opportunamente modificato nella parte relativa alla “Modifica dei fotogrammi memorizzati” (righe dalla 41 alla 70), può essere utilizzato per l’implementazione dell’algoritmo manuale (Figura 4.17). Se, inoltre, viene privato
della parte relativa alla “Selezione dell’asse di rotazione dell’induttore” (righe dalla 31 alla 39) può essere utilizzato per l’elaborazione dei filmati laterali.
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 % Programma che permette di modificare tutti i frames di
3 % un filmato digitale
4 %---
5 % USCITE:
6 % 1. Salvataggio sia dei fotogrammi elaborati, sia
7 % dei relativi confronti con l’immagine originale
8 % 2. F_norm = array che definisce i valori assunti
9 % dai pixels dei fotogrammi elaborati non ruotati
10 % 3. F_rot = array che definisce i valori assunti
11 % dai pixels dei fotogrammi elaborati e ruotati
12 %---
13 % NOTE: deve essere usato insieme ai seguenti files
14 % 1. elaborazione_aut.m 15 % 2. elaborazione_man.m 16 % 3. confronto.m 17 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 18 clear all 19 close all 20 clc 21
22 % Importazione del filmato
23 vidname=input('Inserire il nome del file video tra apici(senza
... estensione)'); 24 fr_in=181;
25 fr_fin=200;
26 M=aviread(vidname,fr_in:fr_fin); 27
28 % Creazione della directory in cui verranno salvati i
29 % fotogrammi modificati e gli altri files di output del
30 %programma 31 dir=cd; 32 path(path,dir); 33 suff='_dir'; 34 newdir=strcat(vidname,suff); 35 mkdir(newdir); 36 new_curdir=strcat(dir,'\',newdir); 37 cd(new_curdir); 38
39 % Selezione dell'asse di rotazione dell'induttore
40 I=frame2im(M(1)); 41 figure
42 axis ij
43 title('Selezionare l''asse di rotazione dell''induttore ...
(doppio click)') 44 hold on 45 [x_c y_c P]=impixel(I); 46 hold off 47 close all 48
49 % Modifica dei fotogrammi memorizzati
50 j=1;
51 for i=fr_in:fr_fin
52 I=frame2im(M(j)); % trasformazione del fotogramma in
immagine a colori
53 I=imcrop(I,[x_c-85 y_c-85 170 170]); % spostamento del
54 I=rgb2gray(I); % trasformazione dell'immagine a colori in immagine in scala di grigio
55 [I2]=elaborazione_aut(I); % elaborazione automatica
dell'immagine
56 h=confronto(I,I2);
57 opz=menu('vuoi modificare manualmente
qualcosa?','Si','No');
58 while opz==1 % elaborazione manuale dell'immagine
59 mask=roipoly(I2); 60 mask=not(mask); 61 I2=immultiply(I2,mask); 62 I3=elaborazione_man(I); 63 I2=I2+I3; 64 h=confronto(I,I2);
65 opz=menu('vuoi modificare manualmente qualcosa?',...
'Si' ,'No'); 66 end
67 ang_rot=0.006*1500; % angolo di rotazione dell'induttore
tra due fotogrammi successivi [°]
68 I3=imrotate(I2,-ang_rot*(i-1),'crop'); % rotazione del
fotogramma di un angolo pari ad ang_rot
69 fmt='.jpg';
70 nome=num2str(i);
71 nomefile=strcat(nome,fmt);
72 saveas(h,nomefile); % salvataggio del confronto tra
immagine originale e immagine modificata
73 imwrite(I2,strcat(nome,'.bmp'))
74 F_norm(:,:,j)=I2; % variabile che definisce i valori dei
pixels per i vari fotogrammi (non ruotati)
75 F_rot(:,:,j)=I3; % variabile che definisce i valori dei
pixels per i vari fotogrammi (ruotati)
76 j=j+1;
77 end
78
79 % Salvataggio delle variabili che definiscono i valori dei
80 % pixels in ogni fotogramma modificato
81 suff3='_fun';
82 filename2=strcat(vidname,suff3);
83 save(filename2,'F_norm','F_rot');
84 cd(dir);
85 close all
86 clc
87
%---C.3 Calcolo dell’area frontale media delle cavità
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 % Programma per il calcolo dell'area totale media delle
3 % cavità nei filmati frontali
4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5 clc
6 clear all
7 close all
8
9 % Caricamento delle variabili contenenti i valori dei pixels
10 load('phi0_053sig0_39_fun.mat');
11
12 % Calcolo aree cavitanti col comando bwarea
13 [m n j]=size(F_norm);
15 aree1(k)=bwarea(F_norm(:,:,k));
16 end
17
18 Calcolo aree cavitanti contando i pixels bianchi
19 ll=size(F_norm);
20 for nnn=1:ll(3)
21 [kk,gg,vv]=find(F_norm(:,:,nnn)); 22 aree2(nnn)=sum(vv);
23 end
24 area1=mean(aree1);% media delle aree dei vari fotogrammi di un
filmato
25 area2=mean(aree2);%
26 standard_dev1=std(aree1); 27 standard_dev2=std(aree2); 28
29 % Stampa dei risultati sul display
30 disp('---');
31 disp(sprintf('area media 1: %f',area1))
32 disp(sprintf('area media 2: %f',area2))
33 disp(sprintf('dev std 1: %f',standard_dev1))
34 disp(sprintf('dev std 2: %f',standard_dev2))
35 disp('---');
36 %---
C.4 Rilevamento della cavitazione
Questo programma permette, dato un fotogramma elaborato (binario) di calcolare una funzione (che altro non è che la matrice calcolata in uscita dal programma) che, per ogni posizione dell’immagine in coordinate polari
( )
r
,
θ
, assume valore unitario se in quella posizione è presente la cavitazione, altrimenti assume valore nullo.Questo programma è molto importante in quanto proprio grazie a questa matrice è stato possibile automatizzare il rilevamento degli angoli di inizio e fine cavità (
θ
i eθ
f in Figura 5.22) che viene effettuato dal programma presentato nel prossimo paragrafo.1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 % Programma per il calcolo della posizione della cavitazione
3 % (ovvero dei pixels bianchi in funzione di r (coordinata
4 % radiale) e theta (coordinata azimutale)
5 %---
6 % SINTASSI:
7 % c=scansione(I)
8 % INPUT:
9 % I=fotogramma modificato (immagine binaria)
10 % OUTPUT:
11 % c=matrice che definisce i valori dei pixels in
12 % funzione di r(righe) e theta (colonne)
13 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14 function val=scansione(I) 15
16 r=85; % numero di valori di r per cui viene calcolata la
matrice 17 18 % Scansione dell'immagine 19 i=1; 20 for ang=pi/180:pi/180:2*pi 21 x=[86 1+r*(1-cos(ang))];
22 y=[86 1+r*(1+sin(ang))]; 23 c=improfile(I,y,x,r); 24 val(:,i)=c; 25 i=i+1; 26 end 27 %---
C.5 Calcolo della lunghezza e dell’area delle cavità
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 % Programma per il calcolo della lunghezza e dell'area delle
3 % cavità su ogni pala
4 %---
5 % SINTASSI:
6 % [cav_len,aree_pale]=angoli(c)
7 % INPUT:
8 % c = matrice calcolata tramite il programma
9 % scansione.m
10 % OUTPUT:
11 % cav_len = matrice 3xn° frames contenente i
12 % valori delle lunghezze delle cavità
13 % aree_pale = matrice 3xn° frames contenente i
14 % valori delle aree delle cavità
15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
16 function [cav_len,aree_pale]=angoli(c) 17
18 R_t=81; % Raggio di estremità dell'induttore FIP162 [mm]
19 S_flow=19115; %Superficie frontale dell'induttore FIP162
[Pixels] 20
21 % Costruzione dei vettori ang_in e ang_fin (vengono registrati
22 % >>tutti<< i valori degli angoli di inzio e fine cavitazione)
23 [m n]=size(c); 24 c(:,361)=c(:,1); 25 i=1; 26 j=1; 27 for ang=1:n 28 if c(:,ang)==0 29 for ind=1:m 30 if c(ind,ang+1)==1 31 ang_in(i)=ang; 32 i=i+1; 33 break 34 end 35 end 36 elseif c(:,ang+1)==0 37 for ind=1:m 38 if c(ind,ang)==1 39 ang_fin(j)=ang; 40 j=j+1; 41 break 42 end 43 end 44 end 45 end
46 a=length(ang_in); % lunghezza del vettore ang_in e del vettore
ang_fin 47
48 % Aggiustamento dei vettori ang_in e ang_fin in caso di
50 if a>3 51 i=1;
52 for ind=1:a
53 if c(:,1)==0 % caso in cui gli elementi della prima colonna di c sono tutti neri
54 ang_in(length(ang_in)+1)=ang_in(1)+360;
55 if ang_in(i+1)-ang_fin(i)<10 % vaolre al di sotto del quale le piccole cavità vengono considerate
56 ang_in(i+1)=[]; 57 ang_fin(i)=[]; 58 i=i-1; 59 end 60 else 61 if ang_in(i)-ang_fin(i)<10 62 ang_in(i)=[]; 63 ang_fin(i)=[]; 64 i=i-1; 65 end 66 end 67 i=i+1; 68 end 69 end 70 71 %---
72 % Calcolo dell'area cavitante su ogni pala
73 %---
74 if ang_in(1)<ang_fin(1)
75 % calcolo area pala 1
76 [i1,j1,v1]=find(c(:,ang_in(1):ang_fin(1))); 77 area1=sum(v1);
78 % calcolo area pala 2
79 [i2,j2,v2]=find(c(:,ang_in(2):ang_fin(2))); 80 area2=sum(v2);
81 % calcolo area pala 3
82 [i3,j3,v3]=find(c(:,ang_in(3):ang_fin(3))); 83 area3=sum(v3);
84 else
85 % calcolo area pala 1
86 [i1,j1,v1]=find(c(:,ang_in(1):ang_fin(2))); 87 area1=sum(v1);
88 % calcolo area pala 2
89 [i2,j2,v2]=find(c(:,ang_in(2):ang_fin(3))); 90 area2=sum(v2);
91 % calcolo area pala 3
92 [i31,j31,v31]=find(c(:,1:ang_fin(1))); 93 [i32,j32,v32]=find(c(:,ang_in(3):360)); 94 area3=sum(v31)+sum(v32); 95 end 96 aree_pale=[area1,area2,area3]/S_flow; 97 %--- 98
99 % calcolo della lunghezza della zona cavitante sulle tre pale
100 for i=1:length(ang_fin) 101 if c(:,1)==0 102 ang(i)=ang_fin(i)-ang_in(i); 103 else 104 ang_fin(length(ang_fin)+1)=ang_fin(1)+360; 105 ang(i)=ang_fin(i+1)-ang_in(i); 106 end 107 pos_trasd(i)=((ang_fin(i)-ang_in(i))/2)+ang_in(i); 108
109 cav_len=ang*(pi/180)*R_t;
110 %---
C.6 Programmi ausiliari
C.6.1 Creazione dei filmati a partire dai fotogrammi modificati
Questo programma è stato sviluppato in quanto alcuni filmati sono stati elaborati in maniera frammentata. Esso permette infatti, a partire dai vari fotogrammi modificati tramite il programma già visto nella Sezione C.1.
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 % Programma che costruisce un filmato digitale a partire
3 % dai fotogrammi che costituiscono il filmato
4 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5 clear all 6 close all 7 clc 8 9 k=1;
10 for i=1:200 % numero di fotogrammi
11 nome=num2str(i);
12 fmt='.bmp';
13 nomefile=strcat(nome,fmt);
14 I=imread(nome,'bmp');
15 I=logical(I);
16 ang_rot=0.006*1500; % angolo di rotazione dell'induttore
tra due fotogrammi successivi [°]
17 I3=imrotate(I,-ang_rot*(i-1),'crop');
18 F_norm(:,:,k)=I; % variabile che definisce i
valori dei pixels per i vari fotogrammi(non ruotati)
19 F_rot(:,:,k)=I3; % variabile che definisce i
valori dei pixels per i vari fotogrammi(ruotati) 20 [X1 map1]=gray2ind(I);
21 [X2 map2]=gray2ind(I3);
22 N1(i)=im2frame(X1,map1); % creazione del filmato con i
frames modificati
23 N2(i)=im2frame(X2,map2); % creazione del filmato con i
frames modificati e ruotati 24 k=k+1;
25 end
26
27 % Nome del file da dare al filmato
28 vidname='phi0_057sig0_409';
29
30 % Salvataggio del nuovo filmato in formato .avi
31 suff2='_mod';
32 filename=strcat(vidname,suff2);
33 movie2avi(N1,filename,'fps',5);
34
35 % Salvataggio del nuovo filmato ruotato in formato .avi
36 suff4='_rot';
37 filename3=strcat(vidname,suff4);
38 movie2avi(N2,filename3,'fps',5);
39
40 % Salvataggio della funzione ke definisce i valori dei pixels
41 % in ogni frame
43 filename2=strcat(vidname,suff3);
44 save(filename2,'F_norm','F_rot');
45 clc