1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
|
%% Traitement des films de fluorescence Winsor 3
clc
%% Variables
% Repertoire courant
currentdir=pwd;
% Repertoires
data_dir='adresse repertoire1';
dir_save='adresse repertoire2';
eval(['cd ' data_dir])
% Rapport de hauteur
H1_s_H2=0.4;
H1=275E-6;
H2=1E-3-H1;
% Frame rate
fps=10;
% Taille des images
ImgX=576;
ImgY=768;
% Correction sur les images
Cx=10;
Cy=10;
% Intensite (A) et puissance (mW)
I=[1.1:0.1:1.3 1.35 1.4:0.1:2];
P1=@(I)27.0238.*I.^2-19.6548.*I-8.54286;
P2=@(I)46.9185*I-42.6106;
idx1=I<=1.6;
idx2=I>1.6;
P=[P1(I(idx1==1)) P2(I(idx2==1))];
Pabs=P.*(1-exp(-beta*H1));
% Echelle x2.5
echelle=1000/303.346;
% Calibration temperature
T=@(x)-110*x.^3+258.3878*x.^2-239.1738.*x+112.6787;
% Definition de la variable data_name
A=dir;
idx=zeros(1,length(A));
for i=1:length(A)
temp=A(i).name;
temp2=length(temp)<9;
idx(i)=idx(i)+temp2;
end
A=A(idx==0);
dir_name=cell(1,length(A));
for i=1:length(A)
dir_name{i}=A(i).name;
end
disp(dir_name)
str0=input('L''ordre est-il correct ?\n','s');
if strcmp(str0,'non')
str1=input('Premier index :');
temp=dir_name{str1};
str2=input('Second index :');
dir_name{str1}=dir_name{str2};
dir_name{str2}=temp;
disp(dir_name)
str0=input('L''ordre est-il correct ?\n','s');
while strcmp(str0,'non')
str1=input('Premier index :');
temp=dir_name{str1};
str2=input('Second index :');
dir_name{str1}=dir_name{str2};
dir_name{str2}=temp;
disp(dir_name)
str0=input('L''ordre est-il correct ?\n','s');
end
end
% Stocakge des parametres
parametres.H1_s_H2=H1_s_H2;
parametres.Pabs=Pabs;
parametres.echelle=echelle;
parametres.T=T;
%% Chargement des images et traitement ligne par ligne
for i=1:length(dir_name)
%% Acces au repertoire d'analyse
eval(['cd ' dir_name{i}])
disp(dir_name{i})
%% Detection du nombre d'objet à analyser
A=dir;
idx=zeros(1,length(A));
for j=1:length(A)
temp=A(j).name;
temp2=length(temp)<9;
idx(j)=idx(j)+temp2;
end
A=A(idx==0);
%% Definition de la cellule sauvegarde
cell_save=cell(8,length(A));
%% Stockage de data_num
cell_save{1,i}=dir_name{i};
%% Extraction du fichier data.mat de la liste
idx=zeros(1,length(A));
for j=1:length(A)
temp=A(j).name;
temp2=strcmp(temp,'data.mat');
idx(j)=idx(j)+temp2;
end
A=A(find(idx==0));
%% Bruit
% Moyenne du bruit
idx=zeros(1,length(A));
for j=1:length(A)
temp=A(j).name;
temp2=strcmp(temp(1),'b');
idx(j)=idx(j)+temp2;
end
B=A(idx==1);
if length(B)>1
bruit=cell(1,length(B));
for j=1:length(B)
temp=imread(B(j).name);
bruit{j}=temp(Cx:end,Cy:end);
end
if mod(length(bruit),2)==0
[L,C]=size(bruit{1});
temp=uint8(zeros(L,C));
for j=2:2:length(bruit)
temp=imadd(temp,imadd(bruit{j},bruit{j-1}));
end
else
[L,C]=size(bruit{1});
temp=uint8(zeros(L,C));
for j=2:2:(length(bruit)-1)
temp=imadd(temp,imadd(bruit{j},bruit{j-1}));
end
temp=imadd(temp,bruit{end});
end
B_mean=temp./length(bruit);
else
bruit=B;
B_mean=imread(B.name);
B_mean=B_mean(Cx:end,Cy:end);
end
% Extraction du bruit de la liste de fichier
A=A((length(bruit)+1):end);
disp('Nettoyage de la liste de fichier terminer')
% Stockage du bruit moyen
cell_save{2,i}=B_mean;
%% Definition de I0
% I0= moyenne de l'image 1 a x fps
if length(B)==1
temp=A(1).name;
I0=imread(temp);
else
temp=uint8(zeros(length(Cx:ImgX),length(Cy:ImgY)));
for j=2:fps
temp=imadd(temp,imadd(A(j).name,A(j-1).name));
end
I0=temp/fps;
end
% Stockage du I0 moyen
cell_save{3,i}=I0;
%% Triage de la liste de fichier
A=triage(struct(A),fps);
disp('Triage de la liste effectué')
%% Traitement des images (bruit & I0)
disp('Début du traitement')
% Traitement
A_traite=cell(1,length(A));
for j=1:length(A)
A_traite{j}=imsubtract(A(j).name,B_mean)/imsubtract(I0,B_mean);
end
% Stockage
cell_save{4,i}=A_traite;
%% Calcul de la temperature ligne par ligne
% Calcul
T_img=cell(ImgX,1);
for j=1:ImgX
for k=1:ImgY
T_img{j,1}=T(A_traite(j,k));
end
end
% Stockage de la temperature
cell_save{5,i}=T_img;
disp('Temperature calculée')
%% Analyse de la temperature
%%% Conversion de r en micron
R_micron={ImgX,1};
for j=1:length(R_micron)
temp=1:ImgY;
R_micron{j,1}=temp*echelle;
end
% Stockage
cell_save{6,1}=R_micron;
%%% Maximum ligne par ligne
% Determination de Tmax
T_max_ligne=cell(ImgX,1);
for j=1:length(T_img)
T_max_ligne{j,1}=max(T_img{j,1});
end
% Stockage
cell_save{7,i}=T_max_ligne;
%%% Position de Tmax en micron
r_Tmax_micron=cell(length(ImgX,1));
for j=1:length(r_Tmax_micron)
temp=cell2mat(R_micron(j,1));
idx=T_img{j,1}==T_max_ligne{j,1};
r_Tmax_micron{j,1}=temp(idx);
end
disp('Analyse de la liste en cour terminée')
%% Retour au repertoire parent
eval('cd ..')
end
%% Sauvegarde
resultats.parametres=parametres;
resultats.cell_save=cell_save;
eval(['cd ' dir_save])
save('20160217','resultats')
disp('Données sauvegardées')
disp('Traitement des images terminé') |
Partager