2010-03-09 14 views
7

Voici le flux de travail souhaité:Chargement de plusieurs images dans Matlab

  • Je veux charger 100 images dans l'espace de travail Matlab
  • Exécuter un tas de mon code sur les images
  • Enregistrer ma sortie (la sortie retourné par mon code est un tableau d'entiers) dans un nouveau tableau

À la fin je devrais avoir une structure de données stockant la sortie du code pour les images 1-100.

Comment est-ce que je ferais cela?

Répondre

4

En supposant que vos images sont nommées de manière séquentielle, vous pouvez le faire:

N = 100 
IMAGES = cell(1,N); 
FNAMEFMT = 'image_%d.png'; 

% Load images 
for i=1:N 
    IMAGES{i} = imread(sprintf(FNAMEFMT, i)); 
end 

% Run code 
RESULT = cell(1,N); 

for i=1:N 
    RESULT{i} = someImageProcessingFunction(IMAGES{i}); 
end 

Le réseau de cellules RESULT contient alors la sortie pour chaque image. Sachez qu'en fonction de la taille de vos images, la lecture anticipée des images risque de vous faire manquer de mémoire.

8

Si vous connaissez le nom du répertoire dans lequel ils se trouvent ou si vous cdez dans ce répertoire, utilisez dir pour obtenir la liste des noms d'image.

Maintenant c'est simplement une boucle for à charger dans les images. Stockez les images dans un tableau de cellules. Par exemple ...

D = dir('*.jpg'); 
imcell = cell(1,numel(D)); 
for i = 1:numel(D) 
    imcell{i} = imread(D(i).name); 
end 

ATTENTION, ces 100 images prendront trop de mémoire. Par exemple, une seule image 1Kx1K nécessitera 3 mégaoctets pour stocker, si ce sont des valeurs RVB uint8. Cela peut ne pas sembler énorme. Mais alors 100 de ces images nécessiteront 300 Mo de RAM. Le vrai problème se pose si vos opérations sur ces images les transforment en doubles, alors ils vont maintenant prendre jusqu'à 2,4 Gigaoctets de mémoire. Cela va rapidement consommer la quantité de RAM que vous avez, surtout si vous n'utilisez pas une version 64 bits de MATLAB.

4

Comme beaucoup l'ont dit, cela peut devenir assez gros. Y at-il une raison pour laquelle vous avez besoin de tous ces éléments en mémoire lorsque vous avez terminé? Pourriez-vous écrire les résultats individuels sous la forme de fichiers lorsque vous en avez fini avec eux de sorte que vous n'ayez jamais plus que les images d'entrée et de sortie en mémoire à un moment donné? IMWRITE serait bon pour les sortir de la mémoire lorsque vous avez terminé.

Questions connexes