主要内容

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: [2×1 Line]
     Visible: on
     HitTest: on

  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)是相同的。

仅二维
"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 指定的排序目标的顺序相同。

详细信息

全部折叠

提示

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

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

    • "ConvexHull"

    • "ConvexImage"

    • "ConvexArea"

    • "FilledImage"

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

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出

全部展开