Загрузка нескольких изображений в MATLAB - PullRequest
7 голосов
/ 09 марта 2010

Вот требуемый рабочий процесс:

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

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

Как бы я поступил так?

Ответы [ 3 ]

9 голосов
/ 09 марта 2010

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

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

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 голосов
/ 09 марта 2010

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

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

4 голосов
/ 09 марта 2010

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

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 затем содержит выходные данные для каждого изображения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...