Main Content

regionprops

测量图像区域的属性

说明

示例

stats = regionprops(BW,properties) 返回二值图像 BW 中每个 8 连通分量(对象)的属性集的测量值。您可以在连续区域和不连续区域上使用 regionprops(请参阅详细信息)。

注意

要返回三维体图像的测量值,请考虑使用 regionprops3。虽然 regionprops 也可以接受三维图像,但与 regionprops 相比,regionprops3 可以计算更多的三维图像统计量。

对于所有语法,如果不指定 properties 参数,则 regionprops 返回 'Area''Centroid''BoundingBox' 测量值。

stats = regionprops(CC,properties) 测量由 bwconncomp 返回的结构体 CC 中每个连通分量(对象)的一组属性。

stats = regionprops(L,properties) 测量标注图像 L 中每个标注区域的一组属性。

stats = regionprops(___,I,properties) 为图像 I 中的每个标注区域返回由 properties 指定的一组属性的测量值。regionprops 的第一个输入(BWCCL)标识 I 中的区域。

示例

stats = regionprops(output,___) 返回一组属性的测量值,其中 output 指定返回值的类型。regionprops 可以在 struct 数组或 table 数组中返回测量值。

示例

全部折叠

将一个二值图像读入工作区中。

BW = imread('text.png');

使用 regionprops 计算图像中连通分量的质心。regionprops 函数以结构体数组形式返回质心。

s = regionprops(BW,'centroid');

将质心的 xy 坐标存储到一个两列矩阵中。

centroids = cat(1,s.Centroid);

显示质心位置叠加的二值图像。

imshow(BW)
hold on
plot(centroids(:,1),centroids(:,2),'b*')
hold off

估计图像中圆形目标的中心和半径,并使用此信息在图像上绘制圆。在此示例中,regionprops 在表中返回测量的区域属性。

将图像读入工作区。

a = imread('circlesBrightDark.png');

将输入图像转换为二值图像。

bw = a < 100;
imshow(bw)
title('Image with Circles')

计算图像中区域的属性,并在表中返回数据。

stats = regionprops('table',bw,'Centroid',...
    'MajorAxisLength','MinorAxisLength')
stats=4×3 table
        Centroid        MajorAxisLength    MinorAxisLength
    ________________    _______________    _______________

     256.5     256.5        834.46             834.46     
       300       120        81.759             81.759     
    330.47    369.83        111.78             110.36     
       450       240        101.72             101.72     

获取圆的中心和半径。

centers = stats.Centroid;
diameters = mean([stats.MajorAxisLength stats.MinorAxisLength],2);
radii = diameters/2;

绘制圆。

hold on
viscircles(centers,radii);
hold off

输入参数

全部折叠

二值图像,指定为任意维度的逻辑数组。

数据类型: logical

连通分量,指定为由 bwconncomp 返回的结构体。

数据类型: struct

标注图像,指定为下列项之一。

  • 任意维数的数值数组。标注为 0 的像素构成背景。标注为 1 的像素构成一个对象;标注为 2 的像素构成第二个对象;以此类推。regionprops 将负值像素视为背景,并向下舍入非整数的输入像素。您可以通过 watershedlabelmatrix 等标注函数得到一个数值标注图像。

  • 分类数组。每个类别对应一个不同区域。

数据类型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32 | categorical

测量的类型,指定为字符串标量或字符向量的逗号分隔列表、字符串标量或字符向量的元胞数组,或者指定为 'all''basic'

  • 如果指定 'all',则 regionprops 会计算所有形状测量值,对于灰度图像,还会计算像素值测量值。

  • 如果指定 'basic',则 regionprops 仅计算 'Area''Centroid''BoundingBox' 测量值。

下列各表列出了提供形状测量值的所有属性。像素值测量值表中列出的属性仅在指定灰度图像时有效。

形状测量值

属性名称说明N 维支持GPU 支持代码生成
'Area'

区域中的实际像素数,以标量形式返回。(此值可能与 bwarea 返回的值略有不同,后者对不同像素模式赋予不同权重。)

如需适合三维体区域的等效属性,请使用 regionprops3'Volume' 属性。

'BoundingBox'

包含区域的最小外接框的位置和大小,以 1×(2*Q) 向量形式返回。前 Q 个元素是边界框最小边角的坐标。接下来的 Q 个元素是外接框沿每个维度的大小。例如,值为 [5.5 8.5 11 14] 的二维边界框表示外接框左上角 (x,y) 坐标为 (5.5, 8.5),框的水平宽度为 11 个像素,垂直高度为 14 个像素。

'Centroid'

区域的质心,以 1×Q 向量形式返回。Centroid 的第一个元素是质心的水平坐标(即 x 坐标)。第二个元素是垂直坐标(即 y 坐标)。Centroid 的所有其他元素均按维度顺序排列。下图显示一个不连续区域的质心和边界框。该区域由白色像素组成;绿框是边界框,红点是质心。

'Circularity'

对象的圆度,以具有字段 Circularity 的结构体形式返回。该结构体包含输入图像中每个对象的圆度值。圆度值计算为 (4*Area*pi)/(Perimeter2)。对于完美的圆,圆度值为 1。输入必须为一个标注矩阵或具有连续区域的二值图像。如果图像包含不连续区域,regionprops 将返回意外结果。

注意

对于非常小的对象,如 3×3 正方形,不建议使用 Circularity。对于此类情况,结果可能会超过完美圆的圆度值。

仅二维
'ConvexArea''ConvexImage' 中的像素数,以标量形式返回。仅二维
'ConvexHull'可以包含区域的最小凸多边形,以 p×2 矩阵形式返回。矩阵的每一行包含多边形一个顶点的 xy 坐标。仅二维
'ConvexImage'指定凸包的图像,凸包内的所有像素均被填充(设置为 on),以二值图像 (logical) 形式返回。图像大小与区域边界框的大小相同。(对于恰好在凸包边界上的像素,regionprops 使用与 roipoly 相同的逻辑来确定该像素是在凸包内部还是外部。) 仅二维
'Eccentricity'与区域具有相同二阶矩的椭圆的偏心率,以标量形式返回。偏心率是椭圆焦距与其长轴的比值。该值介于 0 和 1 之间。(0 和 1 是特例。偏心率为 0 的椭圆其实是圆,偏心率为 1 的椭圆是线段。)仅二维
'EquivDiameter'与区域面积相同的圆的直径,以标量形式返回。计算为 sqrt(4*Area/pi)仅二维
'EulerNumber'区域中的对象数减去这些对象中的孔洞数,以标量形式返回。仅二维标签矩阵支持此属性。regionprops 使用 8 连通计算欧拉数(也称为欧拉示性数)。要了解有关连通性的详细信息,请参阅Pixel Connectivity仅二维
'Extent'区域中的像素数与边界框中总像素数的比率,以标量形式返回。计算方法为 Area 除以边界框的面积。仅二维
'Extrema'

区域中的极值点,以 8×2 矩阵形式返回。矩阵的每一行都包含其中一个点的 xy 坐标。向量的形式为 [top-left top-right right-top right-bottom bottom-right bottom-left left-bottom left-top]。下图显示了两个不同区域的极值。在左侧区域中,每个极值点都不同。在右侧区域中,某些极值点(如 top-leftleft-top)是相同的。

仅二维
'FilledArea'FilledImageon 像素的数量,以标量形式返回。
'FilledImage'

与区域的边界框大小相同的图像,以二值 (logical) 数组形式返回。on 像素对应于该区域,所有孔洞都已填充,如下图所示。

'Image'与区域的边界框大小相同的图像,以二值 (logical) 数组形式返回。on 像素对应于该区域,所有其他像素为 off
'MajorAxisLength'与区域具有相同归一化二阶中心矩的椭圆长轴的长度(以像素为单位),以标量形式返回。仅二维
'MaxFeretProperties'

Feret 属性,包括最大 Feret 直径、其相对角度和坐标值,以具有下列字段的结构体形式返回:

字段说明
MaxFeretDiameter最大 Feret 直径,即包围对象的凸包的对映顶点上任意两个边界点之间的最大距离。
MaxFeretAngle最大 Feret 直径相对于图像水平轴的角度。
MaxFeretCoordinates最大 Feret 直径的端点坐标。

输入可以是二值图像、连通分量或标注矩阵。

仅二维
'MinFeretProperties'

Feret 属性,包括最小 Feret 直径、其相对角度和坐标值,以具有下列字段的结构体形式返回:

字段说明
MinFeretDiameter最小 Feret 直径,即包围对象的凸包的对映顶点上任意两个边界点之间的最小距离。
MinFeretAngle最小 Feret 直径相对于图像水平轴的角度。
MinFeretCoordinates最小 Feret 直径的端点坐标。

输入可以是二值图像、连通分量或标注矩阵。

仅二维
'MinorAxisLength'与区域具有相同归一化二阶中心矩的椭圆短轴的长度(以像素为单位),以标量形式返回。仅二维
'Orientation'

x 轴与椭圆长轴(该椭圆与区域具有相同的二阶矩)之间的角度,以标量形式返回。该值以度为单位,范围从 -90 度到 90 度。下图显示椭圆的轴和方向。图的左侧显示一个图像区域及其对应的椭圆。右侧显示相同的椭圆,蓝色实线表示轴。红点表示焦点。方向是水平虚线和长轴之间的角度。

仅二维
'Perimeter'

围绕区域边界的距离,以标量形式返回。regionprops 通过计算围绕区域边界的相邻像素对之间的距离来计算周长。如果图像包含不连续区域,regionprops 将返回意外结果。下图显示此对象的周长计算中包含的像素。

仅二维
'PixelIdxList'区域中像素的线性索引,以包含 p 个元素的向量形式返回。
'PixelList'区域中像素的位置,以 p×Q 矩阵形式返回。矩阵的每一行都具有 [x y z ...] 形式,指定区域中一个像素的坐标。
'Solidity'凸包中区域内像素所占的比例,以标量形式返回。计算为 Area/ConvexArea仅二维
'SubarrayIdx'对象边界框内 L 的元素,以包含索引的元胞数组形式返回,以便 L(idx{:}) 提取元素。

下表中的像素值测量属性仅在指定灰度图像 I 时有效。

像素值测量值

属性名称 说明N 维支持GPU 支持代码生成
'MaxIntensity'区域中强度最大的像素的值,以标量形式返回。
'MeanIntensity'区域中所有强度值的均值,以标量形式返回。
'MinIntensity'区域中强度最低的像素的值,以标量形式返回。
'PixelValues'区域中的像素数,以 p×1 向量形式返回,其中 p 是区域中的像素数。向量中的每个元素都包含区域中一个像素的值。
'WeightedCentroid'基于位置和强度值的区域中心,以坐标的 p×Q 向量形式返回。WeightedCentroid 的第一个元素是加权质心的水平坐标(即 x 坐标)。第二个元素是垂直坐标(即 y 坐标)。WeightedCentroid 的所有其他元素均按维度顺序排列。

数据类型: char | string | cell

要测量的图像,指定为灰度图像。图像的大小必须与二值图像 BW、连通分量结构体 CC 或标注图像 L 的大小相匹配。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32

返回类型,指定为下列值之一。

说明
'struct'返回一个结构体数组,其长度等于 BWCC.NumObjectsmax(L(:)) 中的对象数。该结构体数组的字段表示每个区域的不同属性,由 properties 指定。
'table'

返回一个 table,其高度(行数)等于 BWCC.NumObjectsmax(L(:)) 中的对象数。变量(列)表示每个区域的不同属性,由 properties 指定。

数据类型: char | string

输出参数

全部折叠

测量值,以结构体数组或表形式返回。数组中的结构体数或表中的行数等于 BWCC.NumObjectsmax(L(:)) 中的对象数。每个结构体的字段或每行中的变量表示为每个区域计算的属性,由 properties 指定。如果输入图像是分类标注图像 L,则 stats 包含属性为 'LabelName' 的附加字段或变量。

详细信息

全部折叠

连续区域和不连续区域

连续区域也称为对象连通分量斑点。包含连续区域的标注图像 L 看起来可能像下面这样:

1 1 0 2 2 0 3 3
1 1 0 2 2 0 3 3

L 中等于 1 的元素属于第一个连续区域或连通分量;L 中等于 2 的元素属于第二个连通分量;以此类推。

不连续区域是可以包含多个连通分量的区域。包含不连续区域的标注图像看起来可能像下面这样:

1 1 0 1 1 0 2 2
1 1 0 1 1 0 2 2
L 中等于 1 的元素属于第一个区域,该区域是不连续的,包含两个连通分量。L 中等于 2 的元素属于第二个区域,它是单个连通分量。

提示

  • ismember 函数可用于创建仅包含符合特定条件的对象或区域的二值图像。例如,以下命令创建一个二值图像,该图像仅包含面积大于 80 且偏心率小于 0.8 的区域。

    cc = bwconncomp(BW); 
    stats = regionprops(cc,'Area','Eccentricity'); 
    idx = find([stats.Area] > 80 & [stats.Eccentricity] < 0.8); 
    BW2 = ismember(labelmatrix(cc),idx);  
    
  • 对于二维图像,默认连通性是 8 连通,对于更高维度,默认连通性是最大连通性。要指定非默认连通性,请使用 bwconncomp 创建连通分量,然后将结果传递给 regionprops

  • regionprops 在计算相关测量值时使用中间结果。因此,在对 regionprops 的一次调用中计算所有所需的测量值是最快的。

  • 大多数测量值都不需要花太多时间来计算。但是,下列测量值的计算可能需要较长时间,具体取决于 L 中的区域数量:

    • 'ConvexHull'

    • 'ConvexImage'

    • 'ConvexArea'

    • 'FilledImage'

扩展功能

在 R2006a 之前推出