How do I make a loop for multiple identical actions?

I need to read some images in matlab like:
>> A1=dicomread('IM-0001.dcm');
>> A2=dicomread('IM-0002.dcm');
>> A3=dicomread('IM-0003.dcm');
>> A4=dicomread('IM-0004.dcm');
>> A5=dicomread('IM-0005.dcm');
I have 180 of those images. Is there a way to do it automatically so the first image is stored as A1 and the last as A180?
Cheers.

 採用された回答

Sean de Wolski
Sean de Wolski 2012 年 9 月 11 日

0 投票

You don't need the cell at all then! So here are both ways:
1) Rather than preallocating img as a cell, preallocate it as a three d array:
img = zeros(128,128,170,'uint8');
for ii = 1:170
img(:,:,ii) = dicomread(etc)
end
2) Or you could take the cell and concatenate the elements along the third dimension using the comma-separated list expansion:
img = cat(3,img{:});
Welcome to MATLAB Answers!

2 件のコメント

Tomislav
Tomislav 2012 年 9 月 12 日
Great answer.
In addition: just remember to put ';' after 'end' otherwise matlab will keep showing you numbers of matrix for like 10 minutes :))
Sean de Wolski
Sean de Wolski 2012 年 9 月 12 日
A mistake we all make very frequently :)
It gets me the worst when I miss the ';' once; it hangs around when I use the up arrow to pull up recent lines to run the same semicolon missing line again...

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2012 年 9 月 11 日

0 投票

3 件のコメント

Tomislav
Tomislav 2012 年 9 月 11 日
I couldn't get it to work: I have tried the code:
for i=1:170
s1=int2str(i);
s2=strcat(s1,'.jpg');
img=dicomread('C:\Users\Tomek\Documents\MATLAB\dicoms\IM-0002-0001.dcm');
end
but got only empty tables.
Please more help about this.
Thanks.
Sean de Wolski
Sean de Wolski 2012 年 9 月 11 日
Preallocate img as a cell array or 3d array (3d array only if all images the same size)
Then:
img = cell(170,1);
for ii = 1:170
img{ii} = dicomread(['C:\Users\Tomek\Documents\MATLAB\dicoms\IM-0002-' num2str(ii,'%04i') '.dcm'])
end
Now each element of img is the corresponding image:
imshow(img{120})
Tomislav
Tomislav 2012 年 9 月 11 日
編集済み: Tomislav 2012 年 9 月 11 日
ok, so i have made the 3d array like:
img=zeros(128,128,170); %images are 128x128 pixels
and then the code you provided, and it works.
Now i have a 170x1 cell with all the images inside.
How can I transform this into a 128x128x170 unit8 matrix?
Cheers.

サインインしてコメントする。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by