【问题标题】:Regionprops vs. PodczeckShapes/DIPimage Circularity question - MatlabRegionprops 与 PodczeckShapes/DIPimage 循环问题 - Matlab
【发布时间】:2020-04-15 16:21:28
【问题描述】:

有人可以解释一下为什么 Matlab 中的“圆度”是由 (4*Area*pi)/(Perimeter^2) 计算的,而在 Podczeck 形状中它是 Area/(Pi/4*sp^2) @987654321 @)?还是只是定义不同?

我尝试在 Matlab 中编写 Podczeck 形状圆度代码,我假设“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

【问题讨论】:

    标签: matlab image-processing diplib


    【解决方案1】:

    regionprops 中的“循环”度量定义为

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

    对于一个圆圈,Area = π r²Perimeter = 2 π r,结果如下:

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

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

    Podczeck 的循环度是一个不同的衡量标准。它被定义为

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

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

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

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

    对于任何其他形状,高度会相对较大,因此 Podczeck Circularity 测量值会更小。


    请注意,最大和最小费雷特直径不一定垂直。一个简单的例子是正方形:最大直径是正方形的对角线;最小的直径是高度或宽度;这两个彼此成45度角。 Podczeck 圆度测量使用垂直于最小投影的项目大小,对于正方形,最小投影等于最小投影,并且小于最大投影。最小的投影和它的垂直投影形成了最小的边界矩形(通常,虽然显然这不一定是这种情况?)。但是,regionprops 有一个轴对齐的“BoundingBox”,因此不适合。我不知道如何从regionprops 中获取所需的值。

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

    【讨论】:

    • 好的,非常感谢您的详细解释。如何使用旋转对象的高度和宽度(width = stat.BoundingBox(3); height = stat.BoundingBox(4);)(基于其 regionprop 方向)?
    • @wrek:是的,你也可以这样做。您只需要 max(width,height) 即可获得 Podczeck 循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    相关资源
    最近更新 更多