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.

 Respuesta aceptada

Sean de Wolski
Sean de Wolski el 11 de Sept. de 2012
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 comentarios

Tomislav
Tomislav el 12 de Sept. de 2012
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 el 12 de Sept. de 2012
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...

Iniciar sesión para comentar.

Más respuestas (1)

Walter Roberson
Walter Roberson el 11 de Sept. de 2012

0 votos

3 comentarios

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.
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 el 11 de Sept. de 2012
Editada: Tomislav el 11 de Sept. de 2012
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.

Iniciar sesión para comentar.

Categorías

Más información sobre Images en Centro de ayuda y File Exchange.

Preguntada:

el 11 de Sept. de 2012

Community Treasure Hunt

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

Start Hunting!

Translated by