Bonjour à tous !

Le titre du sujet annonce assez clairement le problème que je rencontre.

Contexte:
J'ai réaliser des acquisition d'images. Pour chaque acquisition, j'enregistre entre 300 et 2000 images avec certains paramètres qui sont sauvegardées dans des dossiers différent. Le nom des images entre les dossiers n'est pas forcément homogène car il dépend du nombre d'images par seconde que j'ai utilisé pour l'acquisition. Je dois donc analyser plus de 15000 images.

Mon répertoire à l'architecture suivante :
dossier 1(contient 300 images --> 305 objets au total)
dossier 2(contient 2000 images --> 2005 objets au total)
dossier 3(contient 2000 images --> 2005 objets au total)
...

Mon programme:
Pour faire l'analyse de façon automatique j'ai basé la détection des objet contenu dans un répertoire avec la fonction dir. Mon code rassemble les instructions suivantes :
1) Détections du nombre de dossier d'acquisition
2) Réarrangement de l'ordre si nécessaire
3) Je rentre dans chaque dossier d'acquisition
4) je détecte le nombre d'objet
5) Traitement du bruit et de l'intensité I0
6)Je nettoie la liste de fichier en enlever les fichiers qui ne sont pas concernés par l'analyse
7) Je trie la nouvelle avec une fonction (c'est ici que réside mon problème)
8) Analyse des images

Voilà le programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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é')
Lorsque j'exécute le programme j'ai l'erreur suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Error in Etude_dynamique_film_fluorescence_rhb (line 157)
    A=triage(A,fps);
Voilà la fonction triage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
%% Fonction de triage de donnees
function liste_triee=triage(liste,fps)
 
if nargin <2
    fps=1;
end
if fps>25
    fps=25;
end
%% Selection des fichiers a ordonne
temp=strcmp(liste(3).name,'Thumbs.db');
if temp==1
    liste=liste(4:end);
else
    liste=liste(3:end);
end
% Bruit
% idx=zeros(1,length(liste));
% for j=1:length(liste)
%     temp=liste(j).name;
%     temp2=strcmp(temp(1),'b');
%     idx(j)=idx(j)+temp2;
% end
% liste=liste((max(find(idx==1))+1):end);
%% Triage
if fps==1
    temp2=zeros(length(liste),1);
    for i=1:length(liste)
        temp=liste(i).name;
        index=find(temp=='_');
        index2=find(temp=='.');
        temp2(i,1)=temp2(i,1)+str2double(temp(index+1:index2-1));
    end
    temp2=temp2';
    [S,I]=sort(temp2);
    temp3=liste(I);
else
    temp2=zeros(length(liste),1);
    for i=1:length(liste)
        temp=liste(i).name;
        index=find(temp=='_');
        temp2(i,1)=temp2(i,1)+str2double(temp(index(1)+1:index(2)-1));
    end
    temp2=temp2';
    [S,I]=sort(temp2);
    temp3=liste(I);
    temp2=zeros(length(liste),1);
    for i=1:length(liste)
        temp=temp3(i).name;
        index=find(temp=='_');
        index2=find(temp=='.');
        temp2(i,1)=temp2(i,1)+str2double(temp(index(2)+1:index2-1));
    end
    temp2=temp2';
    ind=1;
    while ind<=length(temp3)
        [S,I]=sort(temp2(ind:(ind+(fps-1))));
        B=temp3(ind:(ind+(fps-1)));
        temp3(ind:(ind+(fps-1)))=B(I);
        ind=ind+fps;
    end
end
%% Liste de sortie
liste_triee=temp3;
end
J'ai cherché un peu et visiblement il existe une fonction struct. Cependant je ne suis pas convaincu que cette fonction puisse m'aider à résoudre mon problème. Sinon la solution est d'intégré le code de la fonction de le programme principale. Mais bon j'aimerai résoudre cette erreur, pour me coucher mon bête.

Et puis si jamais vous avez des suggestions pour diminuer le temps d’exécution de mon programme, je suis preneur.

Je vous remercie d'avance pour votre aide.

Beltharion