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 将返回的测量值的格式指定为结构体数组或表。

示例

全部折叠

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

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

Figure contains an axes object. The axes object contains 2 objects of type image, line.

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

将图像读入工作区。

a = imread('circlesBrightDark.png');

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

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

Figure contains an axes object. The axes object with title Image with Circles contains an object of type image.

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

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

Figure contains an axes object. The axes object with title Image with Circles contains 3 objects of type line, image.

输入参数

全部折叠

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

数据类型: 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 个元素是边界框最小边角的坐标。接下来的 Q 个元素是外接框沿每个维度的大小。例如,值为 [5.5 8.5 11 14] 的二维边界框表示外接框左上角 (x,y) 坐标为 (5.5, 8.5),框的水平宽度为 11 个像素,垂直高度为 14 个像素。

"Centroid"

区域的质心,以 1×Q 向量形式返回,其中Q 是图像维度。Centroid 的第一个元素是质心的水平坐标(即 x 坐标)。第二个元素是垂直坐标(即 y 坐标)。Centroid 的所有其他元素均按维度顺序排列。

下图显示一个不连续区域的质心和边界框。该区域由白色像素组成。绿框是边界框,红点是质心。

Centroid is within the bounding box encompassing a region.

"Circularity"

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

注意

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

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

Two differently shaped regions, each with their eight extrema points labeled

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

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

Comparison of original region consisting of touching circles with filled region in which holes are filled.

"Image"与区域的边界框大小相同的图像,以二值数组形式返回。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 度。下图显示椭圆的轴和方向。图的左侧显示一个图像区域及其对应的椭圆。右侧显示相同的椭圆,蓝色实线表示轴。红点表示焦点。方向是水平虚线和长轴之间的角度。

Axes and orientation of ellipse surrounding an image region

仅二维
"Perimeter"

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

Perimeter pixels of a region

仅二维
"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 之前推出

全部展开