0

快速提问,

我想在 Matlab 中使用 sprintf 从 50 到 70 进行计数。此示例打印 0101-0120

for i = 1:20
    filename = sprintf('Brain_01%02d.dcm', i);
    [X(:,:,1,i), amap] = dicomread(filename);
end

如何将其更改为打印 0151-0170?

4

3 回答 3

2

起初答案似乎很明显,但似乎另一个问题可能与如果不是从一个开始就X被破坏的索引有关。i这是在处理 , 的预分配时解决该问题的一种方法X

imgInds = 151:170;
di = dicominfo(sprintf('Brain_%04d.dcm',imgInds(1)));
X = zeros(di.Height,di.Width,1,numel(imgInds),class(dicomread(di))); % modify

for i = 1:numel(imgInds),
    filename = sprintf('Brain_%04d.dcm', imgInds(i));
    [X(:,:,1,i), amap] = dicomread(filename);
end

为了清楚起见,我认为最好sprintf用 with%04d而不是01%02d. 您应该X在标记的行上设置相应的大小modify,尤其是第三个维度,因为我假设您的实际代码不会有这个1

于 2013-10-12T00:24:20.480 回答
1

I'm guessing this should do it:

for i = 51:70
    filename = sprintf('Brain_01%02d.dcm', i);
    [X(:,:,1,i), amap] = dicomread(filename);
end
于 2013-10-11T14:05:59.940 回答
1

谢谢您的反馈!实际上我需要做的(为了我的目的)是:

for i = 1:20
filename = sprintf('Brain_01%02d.dcm', i + 49);
[X(:,:,1,i), amap] = dicomread(filename);
end

这使得计数从 50 开始。

于 2013-10-12T19:02:34.773 回答