Il s'agit d'une affaire importante.
En termes d'exactitude, le code fait ce qui est attendu. La question qui se pose ici est celle de la performance.
Que se passe-t-il en coulisses ?
Lorsqu'une nouvelle image est ajoutée à allImages
Matlab doit trouver une contiguës région de la mémoire (c'est-à-dire en un seul morceau) pour la région de allImages
. Cela implique généralement une nouvelle allocation de mémoire pour le fichier redimensionné. allImages
La copie des anciennes données et la désaffectation des anciennes données. allImages
.
Ces opérations de réallocation et de copie qui se déroulent en coulisses (probablement à chaque itération !) peuvent prendre beaucoup de temps.
Que peut-on faire ?
1. Pré-allocation : Si vous connaissez le nombre d'images et la taille finale de l'image. allImages
Pour cela, il faut réserver cet espace à l'avance :
allImages = zeros( 100, 100, n ); % pre-allocate, fill with zeros.
for ii = 1 : n
% ...
allImages(:,:, ii ) = img; % write into pre-allocated array
end
2. Et si je ne sais pas n
à l'avance ? : Plusieurs questions traitent déjà de ce sujet. Il s'agit par exemple de cette réponse .