2013-10-11 99 views
0

快速問題,sprintf混淆(Matlab)

我想使用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?

回答

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。您應該在標記爲modify的行上相應地設置X的大小,特別是第三個維度,因爲我假設您的實際代碼不會包含1

1

我猜這應該這樣做:

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

謝謝你的迴應!其實所有我需要做的(對於我而言)是:

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

從50

做出的計數開始