【发布时间】:2013-10-13 03:02:34
【问题描述】:
快速提问,
我想在 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?
【问题讨论】:
快速提问,
我想在 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?
【问题讨论】:
一开始答案似乎很明显,但如果i 不是从一个开始,似乎另一个问题可能与X 的索引损坏有关。这是在处理 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
为了清楚起见,我认为使用%04d 而不是01%02d 构建您的sprintf 更好。您应该在标记为modify 的行上相应地设置X 的大小,尤其是第三个维度,因为我假设您的实际代码不会是1。
【讨论】:
我猜应该这样做:
for i = 51:70
filename = sprintf('Brain_01%02d.dcm', i);
[X(:,:,1,i), amap] = dicomread(filename);
end
【讨论】:
感谢您的回复!实际上我需要做的(为了我的目的)是:
for i = 1:20
filename = sprintf('Brain_01%02d.dcm', i + 49);
[X(:,:,1,i), amap] = dicomread(filename);
end
这使得计数从 50 开始。
【讨论】: