Main Content

regionprops

测量图像区域的属性

说明

regionprops 函数测量图像中每个对象(连通分量)的属性,如面积、质心和边界框。regionprops 支持连续区域和不连续区域

regionprops 使用二维图像的 8 连通邻域和更高维图像的最大连通性在二值图像中查找唯一对象。有关详细信息,请参阅像素连通性。要查找使用其他连通性类型的对象,请使用 bwconncomp 创建连通分量,然后改用 CC 参量将结果传递给 regionprops

注意

要测量三维体图像中对象的属性,请考虑改用 regionprops3。虽然 regionprops 可以接受三维图像,但 regionprops3 支持更多的三维图像统计量。

当您调用 regionprops 函数时,可以省略 properties 参量,在这种情况下,该函数将返回 "Area""Centroid""BoundingBox" 测量值。

stats = regionprops(BW,properties) 测量二值图像 BW 中每个对象的属性。

示例

stats = regionprops(CC,properties) 测量每个连通分量 CC 的属性。

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

stats = regionprops(regions,I,properties) 还测量灰度图像 I 中每个标注区域的像素值属性。第一个输入参量 regions 必须为 BWCCL 参量的有效值。

stats = regionprops(outputFormat,___) 还使用 outputFormat 参量将返回的测量值的格式指定为结构体数组或表。

示例

示例

全部折叠

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

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 hidden axes object contains 2 objects of type image, line. One or more of the lines displays its values using only markers

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

将图像读入工作区。

a = imread("circlesBrightDark.png");

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

bw = a < 50;
imshow(bw)
title("Image with Circles")

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

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

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

       300       120        79.517             79.517     
    330.29    369.92        109.49              108.6     
       450       240        99.465             99.465     

获取圆的中心和半径。

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

绘制圆。

hold on
viscircles(centers,radii)
ans = 
  Group with properties:

    Children: [2x1 Line]
     Visible: on
     HitTest: on

  Use GET to show all properties

hold off

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

读取一个二值图像并检测连通分量。

BW = imread("text.png");
CC = bwconncomp(BW);

测量每个连通分量的面积,并以表形式返回结果。

p = regionprops("table",CC,"Area");

创建一个仅包含第二个至第十个最大连通分量的二值图像。显示结果。

[~,idx] = sort(p.Area,"descend");
BWfilt = cc2bw(CC,ObjectsToKeep=idx(2:10));
imshow(BWfilt)

Figure contains an axes object. The hidden axes object contains an object of type image.

读取米粒的灰度图像,然后将图像转换为二值图像。

I = imread("rice.png");
BW = imbinarize(I);
imshow(BW)

Figure contains an axes object. The hidden axes object contains an object of type image.

测量每个区域的面积和边界框。

CC = bwconncomp(BW); 
stats = regionprops("table",CC,"Area","BoundingBox");

选择满足以下条件的区域:

  • 该区域大于 50 个像素

  • 边界框宽度小于 15 个像素,高度大于或等于 20 个像素。

area = stats.Area;
bbox = stats.BoundingBox;
selection = (area > 50) & (bbox(:,3) < 15) & (bbox(:,4) >= 20);
BW2 = cc2bw(CC,ObjectsToKeep=selection);

显示滤波后的图像。

imshow(BW2)

Figure contains an axes object. The hidden axes object contains an object of type image.

输入参数

全部折叠

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

regionprops 根据每个分量的 top-left 极值,从左到右对二值图像中的对象进行排序。当多个对象具有相同的水平位置时,该函数从上到下对这些对象进行排序,然后再沿任何更高的维度进行排序。regionprops 返回测量的属性 stats,顺序与排序的对象相同。

数据类型: logical

连通分量,指定为具有四个字段的结构体。您可以通过使用 bwconncompbwpropfilt 函数来获得连通分量结构体。

字段描述
Connectivity连通分量(对象)的连通性
ImageSize二值图像的大小
NumObjects二值图像中连通分量(对象)的数量
PixelIdxListNumObjects 元胞数组,其中,元胞数组中的第 k 个元素是包含第 k 个对象中像素的线性索引的向量

数据类型: 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*pi*Area/Perimeter^2)*(1 - 0.5/r)^2 其中 r = Perimeter/(2*pi) + 0.5

最大圆度值为 1。输入必须为一个标签矩阵或具有连续区域的二值图像。如果图像包含不连续区域,regionprops 将返回意外结果。

仅二维
"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"

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

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

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

仅二维
"MinFeretProperties"

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

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

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

仅二维
"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

regionprops 只能计算二维图像的实度。要计算三维图像的实度,请使用 regionprops3

仅二维
"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

测量值 stats 的输出格式,指定为以下值之一。

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

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

数据类型: char | string

输出参量

全部折叠

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

stats 中测量值的顺序与二值图像 BW 中的排序对象相同,或与 CCL 指定的排序对象的顺序相同。

详细信息

全部折叠

连续区域和不连续区域

连续区域也称为对象连通分量斑点。包含连续区域的标注图像 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 的元素属于第二个区域,它是单个连通分量。

提示

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

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

    • "ConvexHull"

    • "ConvexImage"

    • "ConvexArea"

    • "FilledImage"

  • cc2bw 函数可用于创建仅包含符合特定条件的部分对象或区域的二值图像。

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开