Loop in loop only returns results of first iteration
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Paul Costache
am 14 Aug. 2021
Kommentiert: Paul Costache
am 15 Aug. 2021
Hello,
I used these loops to get the volume of particles from multiple fotos. Each iteration for 'f' is a separate foto. The table 'results' gets the properties for each foto and 'results_total' combines the results. The table 'results' also has different number of rows with each iteration.
I wanted to do the same with the second loop, where 'j' gives the number of particles identified in each picture and with Vol(j) I get the volume of each particle. As I did above I wanted to save the results for all fotos in 'Vol_total' but I get the values from the first foto, so f=1 added 2 times. So for example in the first foto there are 141 particles and in the second 111, Vol_total returns a double array 282x1 instead of 252x1.
How can I change the code to get the right results? Thank you!
Vol_total = table;
for f=1:2
% particles in each foto from a folder are being analyzed and some characteristics measured
% to simplify here number of fotos = 2
% code for calculation of results
results = regionprops('table',lm2, 'Area','Perimeter','MinFeretProperties','MaxFeretProperties');
results_total = vertcat(results,results_total);
for j=1:height(results)
Vol(j) = sum(V(lm2==j)); % V is the volume of each pixel and lm2 is the labelmatrix which shows the pixels that belong to the same particle
end
Vol_total = [Vol_total; Vol'];
end
0 Kommentare
Akzeptierte Antwort
darova
am 14 Aug. 2021
Try to preallocate Vol variable before for loop. Vol has size 141 after first iteration, that's why you have 282 elements
Vol = table(size(results));
for j=1:height(results)
Vol(j) = sum(V(lm2==j)); % V is the volume of each pixel and lm2 is the labelmatrix which shows the pixels that belong to the same particle
end
You should sum in two directions volume value. Don't know why don't you have an error in this line
% Vol(j) = sum(V(lm2==j)); % V is the volume of each pixel and lm2 is the labelmatrix which shows the pixels that belong to the same particle
v1 = V(lm2==j);
Vol(j) = sum(v1(:)); % sum all elements
1 Kommentar
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Basic Display finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!