sprintf混乱(Matlab)

时间:2013-10-11 13:55:12

标签: matlab printf dicom

快速提问,

我想在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?

3 个答案:

答案 0 :(得分: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代替%04d来构建01%02d。您应该在标有X的行上相应地设置modify的大小,特别是第三维,因为我假设您的实际代码不会是1

答案 1 :(得分:1)

我猜这应该这样做:

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

答案 2 :(得分:1)

感谢您的回复!实际上,我需要做的就是(为了我的目的):

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

使计数从50开始。