Вы читаете 128 * 931 * 4000 пикселей в память (при условии 16-битных значений, это почти 1 ГБ), преобразуя это в удвоенные (4 ГБ) и выделяя область (129 * 129 *4000* 8 = 0,5 ГБ ). Вы храните все три копии, а это ужасный объем данных! Старайтесь не хранить все эти данные:
readFile = dir('d:\images','*.dcm');
first_chip = cell(size(readFile));
info = cell(size(readFile));
for ii = 1:numel(readFile)
info{ii} = dicominfo(readFile(ii).name);
data = dicomread(info{ii});
data = (1:129,1:129); % extracting first chip data
first_chip{ii} = double(data); % convert 16 bit data into double
end
Здесь у меня есть предварительно выделенные массивы first_chip
и info
. Если вы этого не сделаете, массивы будут перераспределяться каждый раз, когда вы добавляете элемент, что приводит к дорогостоящим копиям. Я также сначала извлек рентабельность инвестиций, а затем конвертировал в удвоение , как это было предложено Рахулом в его ответе . Наконец, я снова использую информационную структуру DICOM для чтения файла. Я не знаю, имеет ли это большое значение в скорости, но спасает dicomread
функцию некоторых усилий .
Но учтите, что этот процесс все еще займет значительное время. Чтение файлов DICOM является сложным и требует времени. Я предлагаю вам прочитать их все за один раз, а затем сохранить массивы ячеек first_chip
и info
в файл MAT, который будет намного быстрее читать в более позднее время.