How do I update a struct array in a for loop?

I am determining the equivalent diameter of circles in a series of images.
My code is as follows:
for k = 1:20
I = imread(k);
BW = im2bw(I);
stats = regionprops(BW,'EquivDiameter');
end
I would like the stats struct array to update the values so I get a summary of all the analyzed equivalent diameters, instead of just the last image which is what my code is giving me now. Any ideas?
Thanks,
Mark

 Accepted Answer

Stephen23
Stephen23 on 11 Sep 2017
Edited: Stephen23 on 11 Sep 2017
Just use indexing to put the data into a non-scalar structure:
stats(k) = ...

4 Comments

The problem with this is that the data is produced in scalar form, i.e. for each regionprops, I am generating an array of lets say 20 values, so I can't just store into a single stats(k).
Well, like any other arrays of different sizes, you can put the structure into a cell array, e.g.:
N = 20;
C = cell(1,20);
for k = 1:N
...
stats = ...
C{k} = stats;
end
If the structure returned by regionprops is the same size on each iteration you could make a non-scalar structure of the appropriate size by allocating along whatever dimension suits your needs best, e.g.:
S(:,:,k) = ...
You don't give enough concrete details to say which would work best for you.
This works well to get all my data into one variable (C{})
So this is an improvement on what I was doing before.
What I am hoping for is that my list generated by stats can be continuously updated with my results as they are generated.
i.e. regionprops generates equivalent diameter values, which will change for every image. I want a single list, that will include the equivalent diameters for every image that is analyzed. Hopefully with the data in one single column.
Your method works well, but each image results are stored in a different column, which will be time consuming to analyze afterwards.
To explain better what I am trying to do, I want to measure the equivalent diameters of bubbles in my images, and then calculate a bubble size distribution from the results of all the images.
@Mark Lepage: if the data within C all have suitable sizes, you can certainly concatenate it into one structure afterwards:
cat(N,C{:}) % pick N for the dimension to concatenate along
Note that converting into one structure is a good idea, as it makes accessing the fields very convenient:
"To explain better what I am trying to do..."
It really doesn't matter to me if you are measuring bubbles or elephant ears: a cell array is a cell array, and a structure is a structure regardless. If you really wanted help you would give information about your data: what sizes it has, exactly the output you need, and you would upload some samples.

Sign in to comment.

More Answers (0)

Asked:

on 11 Sep 2017

Edited:

on 12 Sep 2017

Community Treasure Hunt

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

Start Hunting!