calculation of circularity using area and perimeter obtained by regionprops

1 vue (au cours des 30 derniers jours)
Tian Tian
Tian Tian le 21 Août 2017
Commenté : Image Analyst le 22 Août 2017
Hi everyone, I am currently meeting a problem of "Undefined operator '*' for input arguments of type 'struct'." when I tried to caluclate circularity based on circularity = (4*pi*areas)/(perimeter^2), where areas and perimeter are obtained by regionprops. Could anyone help me to solve this problem? Any answer is welcome. Thanks a lot.

Réponses (2)

KSSV
KSSV le 22 Août 2017
The output of regionprops is a structure. You should know what is a structure to extract fields from it...read about structure first. http://www.mathworks.in/help/matlab/ref/struct.html. Check the below example code.
BW = imread('text.png');
s = regionprops(BW,'centroid');
In the above s is a structure array with 88 field values of Centroid. I can extract the i'th value of centroid using
s(i).Centroid
Like wise, check your structures field names and extract the respective filed values.
  1 commentaire
Tian Tian
Tian Tian le 22 Août 2017
Modifié(e) : Image Analyst le 22 Août 2017
Thank you very much. Now I write my code as:
cc = bwconncomp(bw, 4);
area = regionprops(cc,'area');
perimeter = regionprops(cc,'perimeter');
for i = 1: cc.NumObjects
circularity (i) = (4*pi*aggre_areas (i))/((aggre_perimeter (i))^2);
end
And the error is: Undefined operator '*' for input arguments of type 'struct'. Do you know how to multiple values in struct field? Or am I wrong to understand it?
Many thanks.

Connectez-vous pour commenter.


Image Analyst
Image Analyst le 22 Août 2017
Modifié(e) : Image Analyst le 22 Août 2017
Try this (no for loop needed):
cc = bwconncomp(bw, 4);
props = regionprops(cc, 'Area', 'Perimeter);
allAreas = [props.Area]
allPerimeters = [props.Perimeter];
circularities = (4 * pi * allAreas) ./ allPerimeters .^2;
  2 commentaires
Tian Tian
Tian Tian le 22 Août 2017
Many thanks! It works well! Just have one quick question, if I want to output circularities in the table using: stats = regionprops('table')
should I convert it to struct array? E.g. structArray = cell2struct(circularities, Circularity)? Thank you.
Image Analyst
Image Analyst le 22 Août 2017
No, you don't need to. I think you can do something like
allAreas = stats{'Area'};
or something like that to extract the areas from the table into their own column vector.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by