2010-03-09 5 views
7

Вот желаемый рабочий процесс:Загрузка несколько изображений в MATLAB

  • Я хочу, чтобы загрузить 100 изображений в MATLAB рабочей
  • Run куча моего кода на изображении
  • Save моего выхода (выход возвращаемый моим кодом, является целым массивом) в новом массиве

К концу я должен иметь структуру данных, сохраняющую вывод кода для изображений 1-100.

Как я могу это сделать?

ответ

4

Предполагая, что ваши изображения называют последовательным образом, вы можете сделать это:

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 

Массив клеток RESULT затем содержит выходные данные для каждого изображения.

Помните, что в зависимости от размера ваших изображений предварительная выборка изображений может привести к нехватке памяти.

8

Если вам известно имя каталога, в котором они находятся, или если вы подключились к этому каталогу, используйте dir для получения списка имен изображений.

Теперь это просто цикл для загрузки изображений. Храните изображения в массиве ячеек. Например ...

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

ОЗНАКОМЬТЕЛЯСЬ, что эти 100 изображений занимают слишком много памяти. Например, для одного изображения 1Kx1K потребуется 3 мегабайта для хранения, если это значения uint8 RGB. Это может показаться не огромным количеством.

Но тогда 100 из этих изображений потребуют 300 МБ ОЗУ. Реальная проблема возникает, если ваши операции с этими изображениями превращают их в двойные, тогда они теперь будут занимать 2,4 ГБабайт памяти. Это быстро съедает объем оперативной памяти, особенно если вы не используете 64-битную версию MATLAB.

4

Как многие говорили, это может стать довольно большим. Есть ли причина, по которой вам нужно все это в памяти, когда вы закончите? Не могли бы вы написать отдельные результаты в виде файлов, когда вы закончите с ними, чтобы у вас никогда не было больше входных и выходных изображений в памяти в определенный момент времени?

IMWRITE было бы полезно вытащить их из памяти, когда вы закончите.

Смежные вопросы