2010-03-09 13 views
7

Aquí es el flujo de trabajo deseado:Carga de imágenes múltiples en MATLAB

  • quiero cargar 100 imágenes en MATLAB espacio de trabajo
  • Ejecutar un montón de mi código en las imágenes
  • salvar mi salida (la salida devuelto por mi código es una matriz entera) en una nueva matriz

Al final debería tener una estructura de datos que almacene la salida del código para las imágenes 1-100.

¿Cómo podría hacer eso?

Respuesta

4

Suponiendo que sus imágenes se nombran de forma secuencial, se puede hacer esto:

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 

La matriz de células RESULT contiene entonces la salida para cada imagen.

Tenga en cuenta que, dependiendo del tamaño de sus imágenes, la recuperación previa de las imágenes puede hacer que se quede sin memoria.

8

Si conoce el nombre del directorio en el que se encuentra, o si copia un cd a ese directorio, utilice dir para obtener la lista de nombres de imagen.

Ahora es simplemente un bucle de carga en las imágenes. Almacene las imágenes en una matriz de celdas. Por ejemplo ...

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

TEN EN CUENTA que estas 100 imágenes ocuparán demasiada memoria. Por ejemplo, una sola imagen de 1Kx1K requerirá 3 megabytes para almacenar, si no está en 8 valores RGB. Esto puede no parecer una gran cantidad.

Pero entonces 100 de estas imágenes requerirán 300 MB de RAM. El verdadero problema surge si sus operaciones en estas imágenes las convierten en dobles, y ahora ocuparán 2.4 GIGAbytes de memoria. Esto consumirá rápidamente la cantidad de RAM que tiene, especialmente si no está usando una versión de MATLAB de 64 bits.

4

Como muchos han dicho, esto puede ser bastante grande. ¿Hay alguna razón por la que necesite TODO esto en la memoria cuando haya terminado? ¿Podría escribir los resultados individuales como archivos cuando haya terminado con ellos de manera que nunca tenga más que las imágenes de entrada y salida en la memoria en un momento dado?

IMWRITE sería bueno para sacarlos de la memoria cuando haya terminado.

Cuestiones relacionadas