sprintf(Matlab)

sprintf(Matlab),matlab,printf,dicom,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?我想这应该可以: for i = 51:70 filename = sprintf('Brain_01%02d.dcm', i);

快速提问

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

我想这应该可以:

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

我猜这应该可以做到:

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

一开始答案似乎很明显,但似乎另一个问题可能与
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

为了清楚起见,我认为最好使用
%04d
而不是
01%02d
构建您的
sprintf
。您应该在标记为
modify
的行上相应地设置
X
的大小,尤其是第三维度,因为我假设您的实际代码不会是
1
答案起初似乎很明显,但另一个问题似乎与
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

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

谢谢您的回答!实际上,我需要做的(出于我的目的)是:


这使得计数从50开始。

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

这使得计数从50开始