Загрузка повторных изображений в MATLAB

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

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

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

Как я пошел бы о выполнении этого?

7
задан MatlabDoug 9 March 2010 в 14:10
поделиться

3 ответа

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

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

4
ответ дан 6 December 2019 в 11:48
поделиться

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

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

Массив ячеек РЕЗУЛЬТАТ затем содержит вывод для каждого изображения.

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

4
ответ дан 6 December 2019 в 11:48
поделиться

Если вы знаете имя каталога, в котором они находятся, или если вы переходите в этот каталог, то используйте 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.

9
ответ дан 6 December 2019 в 11:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: