matlab - 将 DICOM 数据读入元胞数组的性能问题

标签 matlab image-processing matrix cell dicom

我需要读取 4000 个或更多 DICOM 文件。我编写了以下代码来读取文件并将数据存储到元胞数组中,以便稍后处理它们。单个 DICOM 文件包含 128 * 931 数据。但是一旦我执行代码,就需要超过 55 分钟才能完成迭代。有人可以向我指出以下代码的性能问题吗?

% read the file information form the disk to memory
readFile=dir('d:\images','*.dcm');

for i=1:4000

   % Read the information form the dicom files in to arrays

   data{i}=dicomread(readFile(i).name);
   info{i}=dicominfo(readFile(i).name);

   data_double{i}=double(data{1,i}); % convert 16 bit data into double
   first_chip{i}=data_double{1,i}(1:129,1:129); % extracting first chip data into an array

end

最佳答案

您正在将 128*931*4000 像素读入内存(假设为 16 位值,接近 1 GB),将其转换为双倍 (4 GB) 并提取一个区域 (129*129*4000*8 = 0.5 GB) ).您保留了所有这三个副本,这是一个可怕的数据量!尽量不要保留所有数据:

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

在这里,我有 pre-allocated first_chipinfo 数组。如果不这样做,每次添加元素时都会重新分配数组,从而导致昂贵的副本。我也先提取了投资返回率,然后转换为双倍,as suggested by Rahul in his answer .最后,我重新使用 DICOM 信息结构来读取文件。我不知道这是否会对速度产生很大影响,但它 saves the dicomread function some effort .

但请注意,此过程仍需要相当长的时间。读取 DICOM 文件很复杂,而且需要时间。我建议您一次性全部读完,然后将 first_chipinfo 元胞数组保存到 MAT 文件中,这样以后读起来会快很多.

关于matlab - 将 DICOM 数据读入元胞数组的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50341776/

相关文章:

matlab - 如何在多于 4 位小数的矩阵中显示数据

r - 计算 R 矩阵中每列特定整数的数量

clojure - Incanter 是否支持稀疏矩阵?

matlab - (Matlab)奇怪的精度损失,同时将复杂矩阵分配给局部变量

performance - 为什么访问存储在单元格中的数据的时间比存储在矩阵中的时间短?

python - 在忽略边界的颜色反卷积后识别正像素

image-processing - Imagemagick 中旋转/校正后的自适应背景

matlab - 连续重复值 'N' 次,然后递增值 - Matlab(N 不同)

matlab - MSER特征的匹配算法?

c - 在主 MEX 网关函数中准备输出数据