Regionprops vs. PodczeckShapes / DIPimage Вопрос о круглости - Matlab - PullRequest
2 голосов
/ 15 апреля 2020

Может кто-нибудь объяснить, почему 'Круглость' в Matlab рассчитывается как (4 * Площадь * пи) / (Периметр ^ 2), тогда как в Подчеке Форма это Площадь / (Pi / 4 * sp ^ 2) https://qiftp.tudelft.nl/dipref/FeatureShape.html)? Или это просто определяется по-другому?

Я пытался написать код округлости формы Podczeck в Matlab, и я предполагаю, что «MaxFeretDiameter» перпендикулярен «MinFeretDiameter», я прав?

Код :

clc;
clear all;
close all;

Pi=pi;
Image = rgb2gray(imread('pillsetc.png'));

BW = imbinarize(Image);
BW = imfill(BW,'holes');
BW = bwareaopen(BW, 100);
imshow(BW);

[B,L] = bwboundaries(BW,'noholes');

i=2; 
stat = regionprops(BW, 'Area', 'Circularity', 'MaxFeretProperties', 'MinFeretProperties');
OArea = stat(i).Area;
OMaxFeretProperties = stat(i).MaxFeretDiameter; 
OMinFeretProperties = stat(i).MinFeretDiameter;   
OCircularityPodzeck = OArea/(Pi/4 * (OMaxFeretProperties^2))
OCircularityMatlab = stat(i).Circularity

1 Ответ

1 голос
/ 15 апреля 2020

Мера «Круглость» в regionprops определяется как

Circularity = (4 Area π)/(Perimeter²)

Для круга, где Area = π r² и Perimeter = 2 π r, получается:

Circularity = (4 π r² π)/((2 π r)²) = (4 π² r²)/(4 π² r²) = 1

Для любой другой формы периметр будет относительно длиннее (это характеристика c круга!), Поэтому мера "Круглость" будет меньше.

Круглость Поджека - это другая мера. Он определен как

Podczeck Circularity = Area/(π/4 Height²)

В документации, которую вы связываете, он ссылается на Height как sp и определяет его как «диаметр Фере перпендикулярно s» и определяет s как самый короткий диаметр Ферета ". Таким образом, sp является самой большой из двух сторон минимального ограничивающего прямоугольника.

Для круга минимальный ограничивающий прямоугольник имеет Height, равный диаметру. Заменим снова:

Podczeck Circularity = (π r²)/(π/4 (2 r)²) = (π r²)/(π/4 4 r²) = 1

Для любой другой фигуры высота будет относительно больше, поэтому мера округлости Подчека будет меньше.


Обратите внимание, что макс и Мин. диаметры Ферета не обязательно перпендикулярны. Простой пример - квадрат: самый большой диаметр - это диагональ квадрата; наименьший диаметр - это высота или ширина; эти два находятся на 45 градусов друг от друга. Для измерения округлости Подчека используется размер проекта, перпендикулярный наименьшей проекции, который для квадрата равен наименьшей проекции и меньше, чем наибольшая проекция. Наименьшая проекция и ее перпендикулярная проекция образуют минимальный ограничивающий прямоугольник (как правило, хотя, по-видимому, это не обязательно так?). Однако regionprops имеет «BoundingBox», который выровнен по оси и поэтому не подходит. Я не знаю, как получить требуемое значение из regionprops.

Подход, который вы должны будете использовать, - использовать вывод PixelList regionprops вместе с MinFeretAngle. «PixelList» - это список координат пикселей, которые принадлежат объекту. Вы должны повернуть эти координаты в соответствии с «MinFeretAngle», так чтобы ограничивающий прямоугольник с выравниванием по оси теперь соответствовал минимальному ограничивающему прямоугольнику. Затем вы можете определить размер поля, взяв минимальное и максимальное значения повернутых координат.

...