MATLAB Answers

Using a for loop to put a number of 2D arrays in a directory into a single 3D array

26 views (last 30 days)
Mike Bakeman
Mike Bakeman on 11 Nov 2019
Answered: Arash Rabbani on 12 Nov 2019
Hi,
I have a number of 2D arrays (image files) in a directory which I am trying to open sequentially in a for loop so I can window them down, and then put them all into a 3D array. I know this is a simple question, I' having trouble creating the 3D array while opening each 2D array in the for loop. So for instance If I have 3 arrays each 512 x 512 in a directory I just want to loop through all three files and make a 512 x 512 x 3 array.
for f_index = 1 :(total_files)
%get the name of the file
name_string = strcat(datapath,dirout(f_index + 2).name);
%read the data in
data_frame= read_image_raw(name_string,512,512);
%concatenate each frame with the last
results = cat(3,data_frame(:));
end
I realize this is a beginners question. Thanks.

Answers (2)

Jeremy
Jeremy on 11 Nov 2019
Edited: Jeremy on 11 Nov 2019
I misread at first, so I'm editing:
If you read in 3 2D arrays you can concatenate them - if A,B,C are each 2D then
D = A;
D(:,:,2) = B;
D(:,:,3) = C;
  1 Comment
Mike Bakeman
Mike Bakeman on 11 Nov 2019
This is a weird CCD image and I have to use a particular subroutine to open each image which I'm trying to do in a for loop. After which I window out all the bad parts of the 2D data. That's all coded, I just need to create the 3D array and then I can do my statistics (that's all coded as well).
Thanks

Sign in to comment.


Arash Rabbani
Arash Rabbani on 12 Nov 2019
If your images are PNG and located in a folder, just run this code on that folder. 'A' is the resulted matrice:
D=dir('*.png');
Image_Size=[512,512];
A=zeros(Image_Size(1), Image_Size(2),numel(D));
for I=1:numel(D)
IMG=imread(D(I).name);
if ndims(IMG)>=3; IMG=rgb2gray(IMG); end
A(:,:,I)=IMG;
end

Community Treasure Hunt

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

Start Hunting!