Хорошо, это приблизительное решение, но, учитывая ограниченные параметры, которые вы можете получить из regionprops
, это, вероятно, достаточно хорошо.
Мои выводы следующие:
цель Рассчитать радиус вписанного круга в прямоугольник необходимо для оценки длины короткого края.
Если мы предположим, что эллипс c, прилегающий к прямоугольнику, дает примерно ту же площадь, что и прямоугольник, а отношение короткого / длинного края такое же, как у крысы по малой / большой оси ios, то мы можем получить следующее уравнение:
x=short edge of the rectangle;
y=long edge of the rectangle;
b=minor axis of the fitted ellipse;
a=major axis of the fitted ellipse;
, тогда мы получим
x/y=b/a
x*y=a*b*pi
, из которого мы можем решить, что значение x равно sqrt(pi)*b
. Это делает радиус вписанного круга sqrt(pi)/2*b
.
, изменяя ваши две строки кода ниже
stats = regionprops(L,'Centroid','MinorAxisLength');
...
r = stats(k).MinorAxisLength*(sqrt(pi)/4);
...
Я смог получить что-то довольно близкое к вписанному кругу. Попробуйте.