How to keep for loop from over writing variables?
古いコメントを表示
I am new to MATLAB and teaching myself how to use it. I am trying to run some image processing code to measure the vertical length of objects/blobs in an image. I am also calculating the width so that I can later classify the blobs. I need to run this for hundreds of images once it is finished and ideally export all data to an excel (or similar) file fo analysis. I am stuck in my for loops. They keep the last variable but I would like it to keep all data (i.e. values for each blob). How can I keep the for loop from over writing each variable? Below is my code and attached are example post processed images. Any help is greatly appreciated!
close all
file=uipickfiles;
for a = 1:length(file)
RGB=imread(file{a});
imshow(RGB);
label = bwlabel(BW5);
max(max(label));
%Calculating length and width of the blobs;
for j=1:max(max(label))
[row, col] = find(label==j);
len=max(row)-min(row)+2;
width=max(col)-min(col)+2;
end
end
filename = 'testexcel.xlsx';
xlswrite(filename,len);
winopen('testexcel.xlsx');
10 件のコメント
"I am new to MATLAB and teaching myself how to use it"
Good idea! You should start by doing the introductory tutorials, which teach many basic MATLAB concepts that you will need to know:
"How can I keep the for loop from over writing each variable?"
Use indexing, exactly as the introductory tutorials show (along with many other basic concepts that you will need to know in order to use MATLAB),
IowaClassic
2019 年 3 月 14 日
Bob Thompson
2019 年 3 月 14 日
Would you post your updated code so we can check your indexing, please?
IowaClassic
2019 年 3 月 14 日
Adam
2019 年 3 月 14 日
You aren't indexing anything on the left-hand side of all those lines, which is the side where things are stored/overwritten. e.g.
len( j ) = max(row) - min(row) + 2;
IowaClassic
2019 年 3 月 14 日
"I have looked through all these tutorials and many others"
If you "looked through all these tutorials" then you will have seen the section "Loops and Conditional Statements" on this page
and seen that every loop example uses indexing into the output variable, e.g.:
for k = 1:nsamples
currentData = rand(npoints,1);
sampleMean(k) = mean(currentData);
end % ^^^ indexing into the output variable!
You should adapt this for your code.
Adam
2019 年 3 月 14 日
Well if you have an outer loop running round some number of images you would need a 2d output result and indexing as e.g.
for n = 1:numImages
for j = 1:...
len( n, j ) = ...
width( n, j ) = ...
...
end
end
You should also presize these variables outside the outer loop as e.g.
len = zeros( numImages, max(max(label)) )
IowaClassic
2019 年 3 月 14 日
編集済み: IowaClassic
2019 年 3 月 14 日
IowaClassic
2019 年 3 月 14 日
採用された回答
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!