Regionprops vs.PodczeckShapes/DIPimage循环性问题-Matlab



有人能解释一下为什么Matlab中的"圆度"是用(4*Area*pi(/(Perimeter^2(计算的,而在波德切克形状中是Area/(pi/4*sp^2(https://qiftp.tudelft.nl/dipref/FeatureShape.html)?还是只是简单地定义不同?

我试着在Matlab中写一个波德切克形状圆度代码,我假设"MaxFeretDiameter"垂直于"MinFeretDiamiter",我是对的吗?

代码:

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

regionprops中的"Circularity"度量定义为

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

对于一个圆圈,其中Area = π r²Perimeter = 2 π r,得出:

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

对于任何其他形状,周长都会相对较长(这是圆的特征!(,因此"圆度"测量值会更小。

波德切克的循环性是一个不同的衡量标准。它被定义为

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

在您链接的文档中,它将Height称为sp,并将其定义为"垂直于s的套圈直径",将s定义为"最短套圈直径"。因此,sp是最小边界框的两侧中最大的。

对于圆,最小边界框的Height等于直径。我们再次替代:

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

对于任何其他形状,高度都会相对较大,因此波德切克圆度度量会较小。


请注意,Feret的最大和最小直径不一定垂直。一个简单的例子是正方形:最大的直径是正方形的对角线;最小直径是高度或宽度;这两者相距45度。波德切克圆度度量使用垂直于最小投影的投影大小,对于正方形,该大小等于最小投影,小于最大投影。最小投影及其垂直投影形成最小边界矩形(通常,尽管显然情况并非如此?(。但是,regionprops具有轴对齐的"BoundingBox",因此不适用。我不知道如何从regionprops中获得所需的值。

您必须遵循的方法是使用regionprops的"PixelList"输出和"MinFeretAngle"PixelList是属于对象的像素坐标列表。您可以根据"MinFeretAngle"旋转这些坐标,使轴对齐的边界矩形现在对应于最小边界矩形。然后,可以通过获取旋转坐标的最小值和最大值来确定长方体的大小。

相关内容

  • 没有找到相关文章

最新更新