Man*_*noj 5 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
Run Code Online (Sandbox Code Playgroud)
您正在将 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
Run Code Online (Sandbox Code Playgroud)
在这里,我预先分配了first_chip和数组info。如果不这样做,每次添加元素时都会重新分配数组,从而导致昂贵的副本。我还首先提取了 ROI,然后转换为双倍,正如 Rahul 在他的回答中所建议的那样。最后,我重新使用 DICOM 信息结构来读取文件。我不知道这是否会对速度产生很大影响,但它节省了该dicomread功能的一些精力。
但请注意,这个过程仍然需要相当长的时间。读取 DICOM 文件很复杂并且需要时间。我建议您一次将它们全部读取,然后将first_chip和info元胞数组保存到 MAT 文件中,这样以后读入会快得多。
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |