regionprops circularity value >1 and 0 ?
古いコメントを表示
Hello,
I calculated for a binary image the circularity using the regionprops function with this formula:
allCircularities1 = allPerimeters1.^2 ./ (4* pi*allAreas1);
I got the following circularity values : 2.933 ; 1.5260 ; 3.4890 ; 0.5380 ; 1.1568 0 ; 0 ; 0.5591.
I know that a circle has a circularity of nearly 1. As i understand the circularity is the roundness of an object / blob ? So my question is what the values greater 1 implicate? There isn't an object available that is 'rounder' than a circle.
My second question is the circularity value = 0. I checked the perimeter for that small blob. It also has the value 0. Why is that so ? Is the blob too small for the regionprops perimeter function ?
3 件のコメント
Walter Roberson
2019 年 4 月 22 日
(It looks to me as if you have already been examining the discussion at https://www.mathworks.com/matlabcentral/answers/167366-how-to-measure-circularity )
Lightisthenight
2019 年 4 月 22 日
Steve Eddins
2023 年 3 月 22 日
採用された回答
その他の回答 (1 件)
Steve Eddins
2023 年 3 月 22 日
R2023a Update: Correcting regionprops Circularity Measurements That Are Greater Than 1.0
Image Processing Toolbox R2023a or Later
In releases R2023a or later, the Circularity computation in regionprops has been revised to correct a bias towards higher values, and it no longer returns values greater than 1.0.
if verLessThan("images","11.7")
error("Use this code with releases R2023a or later.")
end
A = imread("text.png");
props = regionprops("table",A,"Circularity");
Image Processing Toolbox R2019a to R2022b
In earlier releases, you can apply the same correction that was introduced in R2023a by adapting the following example. Note that the call to regionprops below uses the form that returns a table because it makes the correction steps easier.
if verLessThan("images","10.4") || ~verLessThan("images","11.7")
error("Use this code with releases R2019a through R2022b.")
end
A = imread("text.png");
props = regionprops("table",A,["Circularity" "Perimeter"]);
c = props.Circularity;
p = props.Perimeter;
r_eq = p/(2*pi) + 0.5;
correction = (1 - (0.5./r_eq)).^2;
props.Circularity = min(c .* correction, 1);
Image Processing Toolbox R2018b or Earlier
In these older releases, the function regionprops did not compute Circularity. You can compute it by adapting the following example.
if ~verLessThan("images","10.4")
error("Use this code with releases R2018b or earlier.")
end
A = imread("text.png");
props = regionprops("table",A,["Area" "Perimeter"]);
a = props.Area;
p = props.Perimeter;
c = 4*pi*a ./ (p.^2);
r_eq = p/(2*pi) + 0.5;
correction = (1 - (0.5./r_eq)).^2;
props.Circularity = min(c .* correction, 1);
2 件のコメント
release: 2021b
When running this part:
c = props.Circularity;
p = props.Perimeter;
r_eq = p/(2*pi) + 0.5;
correction = (1 - (0.5./r_eq)).^2;
props.Circularity = min(c .* correction, 1);
Returns error:
Scalar structure required for this assignment.
props.Circularity = min(c .* correction, 1);
Steve Eddins
2023 年 3 月 24 日
Adrián, did you call regionprops with "table" as the first argument? Like this:
props = regionprops("table",A,["Circularity" "Perimeter"]);
カテゴリ
ヘルプ センター および File Exchange で Image Segmentation and Analysis についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
