MATLAB Answers

how to save all value of centoid of many object from one image ?

13 views (last 30 days)
ElizabethR on 14 Apr 2016
Commented: Image Analyst on 20 Apr 2016
i have a code,
a=imread('cen.png'); contain 2 object
centroid = zeros(2,2);
for i=1:count
centroid(i) = object(i).Centroid;
i try to get the centroid of each object, and save the all value of centoid object. But i get the error :
In an assignment A(I) = B, the number of elements in B and I must be the same.
Error in cek (line 8) centroid(i) = objek(i).Centroid;
i try to fix this error,but i don't find the way to fix this error. please help me.. thanks


Sign in to comment.

Answers (1)

Sven on 19 Apr 2016
The centroid is not a scalar value. It has two components (X coordinate, Y coordinate), so you cannot assign it to a scalar variable. Your code will work if you change this line:
centroid(i) = object(i).Centroid;
To this line:
centroid(i,:) = object(i).Centroid;
However you can also clean up the code chunk quite a bit and simply do:
a = imread('cen.png'); contains N objects
bw = im2bw(a);
stats = struct2table(regionprops(bw));
centroid = stats.Centroid; % Will be an N-by-2 array where N is the # of objects
Did this answer the question for you?
Thanks, Sven.


ElizabethR on 19 Apr 2016
hai sven, thanks for replay my question. i will try it, but what the meaning of struct2table ?
Sven on 20 Apr 2016
It's just that tables are a little easier to use (in my opinion) than the regular output of regionprops() which is a struct. You could also do the following for the same result:
stats = regionprops(bw);
centroid = cat(1,stats.Centroid);
Image Analyst
Image Analyst on 20 Apr 2016
allCentroids = [stats.Centroid];
xCentroids = allCentroid(1:2:end);
yCentroids = allCentroid(2:2:end);

Sign in to comment.