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(outputFormat
,___)outputFormat
参量将返回的测量值的格式指定为结构体数组或表。
示例
将一个二值图像读入工作区中。
BW = imread('text.png');
使用 regionprops
计算图像中连通分量的质心。regionprops
函数以结构体数组形式返回质心。
s = regionprops(BW,'centroid');
将质心的 x 和 y 坐标存储到一个两列矩阵中。
centroids = cat(1,s.Centroid);
显示质心位置叠加的二值图像。
imshow(BW) hold on plot(centroids(:,1),centroids(:,2),'b*') hold off
估计图像中圆形目标的中心和半径,并使用此信息在图像上绘制圆。在此示例中,regionprops
在表中返回测量的区域属性。
将图像读入工作区。
a = imread("circlesBrightDark.png");
将输入图像转换为二值图像。
bw = a < 50;
imshow(bw)
title("Image with Circles")
计算图像中区域的属性,并在表中返回数据。
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
读取一个二值图像并检测连通分量。
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)
读取米粒的灰度图像,然后将图像转换为二值图像。
I = imread("rice.png");
BW = imbinarize(I);
imshow(BW)
测量每个区域的面积和边界框。
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)
输入参数
二值图像,指定为任意维度的逻辑数组。
regionprops
根据每个分量的 top-left
极值,从左到右对二值图像中的目标进行排序。当多个目标具有相同的水平位置时,该函数从上到下对这些目标进行排序,然后再沿任何更高的维度进行排序。regionprops
返回测量的属性 stats
,顺序与排序的目标相同。
数据类型: logical
连通分量,指定为具有四个字段的结构体。您可以通过使用 bwconncomp
或 bwpropfilt
函数来获得连通分量结构体。
字段 | 描述 |
---|---|
Connectivity | 连通分量(目标)的连通性 |
ImageSize | 二值图像的大小 |
NumObjects | 二值图像中连通分量(目标)的数量 |
PixelIdxList | 1×NumObjects 元胞数组,其中,元胞数组中的第 k 个元素是包含第 k 个目标中像素的线性索引的向量 |
数据类型: struct
标注图像,指定为下列项之一。
任意维数的数值数组。标注为
0
的像素构成背景。标注为1
的像素构成一个目标;标注为2
的像素构成第二个目标;以此类推。regionprops
将负值像素视为背景,并向下舍入非整数的输入像素。您可以通过watershed
或labelmatrix
等标注函数得到一个数值标注图像。分类数组。每个类别对应一个不同区域。
数据类型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| categorical
测量的类型,指定为字符串标量或字符向量的逗号分隔列表、字符串标量数组、字符向量的元胞数组,或者指定为 "all"
或 "basic"
。
如果指定
"all"
,则regionprops
会计算所有形状测量值,对于灰度图像,还会计算像素值测量值。如果指定
"basic"
,则regionprops
仅计算"Area"
、"Centroid"
和"BoundingBox"
测量值。
下列各表列出了提供形状测量值的所有属性。像素值测量值表中列出的属性仅在指定灰度图像时有效。
形状测量值
属性名称 | 描述 | N 维支持 | GPU 支持 | 代码生成 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
"Area" | 区域中的实际像素数,以标量形式返回。此值可能与 如需适合三维体区域的等效属性,请使用 | 是 | 是 | 是 | ||||||||
"BoundingBox" | 包含区域的最小外接框的位置和大小,以 1×(2*Q) 向量形式返回,其中Q 是图像维度。前 Q 个元素是边界框最小角点的坐标。接下来的 Q 个元素是外接框沿每个维度的大小。例如,值为 | 是 | 是 | 是 | ||||||||
"Centroid" | 区域的质心,以 1×Q 向量形式返回,其中Q 是图像维度。 下图显示一个不连续区域的质心和边界框。该区域由白色像素组成。绿框是边界框,红点是质心。
| 是 | 是 | 是 | ||||||||
"Circularity" | 目标的圆度,以具有字段
最大圆度值为 1。输入必须为一个标签矩阵或具有连续区域的二值图像。如果图像包含不连续区域, | 仅二维 | 否 | 是 | ||||||||
"ConvexArea" | ConvexImage 中的像素数,以标量形式返回。 | 仅二维 | 否 | 否 | ||||||||
"ConvexHull" | 可以包含区域的最小凸多边形,以 p×2 矩阵形式返回。矩阵的每一行包含多边形一个顶点的 x 和 y 坐标。 | 仅二维 | 否 | 否 | ||||||||
"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 矩阵形式返回。矩阵的每一行都包含其中一个点的 x 和 y 坐标。向量的形式为 下图显示了两个不同区域的极值。在左侧区域中,每个极值点都不同。对于右侧区域,某些极值点(如
| 仅二维 | 是 | 是 | ||||||||
"FilledArea" | FilledImage 中 on 像素的数量,以标量形式返回。 | 是 | 否 | 是 | ||||||||
"FilledImage" | 与区域的边界框大小相同的图像,以二值数组形式返回。
| 是 | 否 | 是 | ||||||||
"Image" | 与区域的边界框大小相同的图像,以二值数组形式返回。on 像素对应于该区域,所有其他像素为 off 。 | 是 | 是 | 是 | ||||||||
"MajorAxisLength" | 与区域具有相同归一化二阶中心矩的椭圆长轴的长度(以像素为单位),以标量形式返回。 | 仅二维 | 是 | 是 | ||||||||
"MaxFeretProperties" | 费雷特属性,包括最大值费雷特直径、其相对角度和坐标值,以具有下列字段的结构体形式返回:
输入可以是二值图像、连通分量或标签矩阵。 | 仅二维 | 否 | 否 | ||||||||
"MinFeretProperties" | 费雷特属性,包括最小费雷特直径、其相对角度和坐标值,以具有下列字段的结构体形式返回:
输入可以是二值图像、连通分量或标签矩阵。 | 仅二维 | 否 | 否 | ||||||||
"MinorAxisLength" | 与区域具有相同归一化二阶中心矩的椭圆短轴的长度(以像素为单位),以标量形式返回。 | 仅二维 | 是 | 是 | ||||||||
"Orientation" | x 轴与椭圆长轴(该椭圆与区域具有相同的二阶矩)之间的角度,以标量形式返回。该值以度为单位,范围从 -90 度到 90 度。下图显示椭圆的轴和方向。图的左侧显示一个图像区域及其对应的椭圆。右侧显示相同的椭圆,蓝色实线表示轴。红点表示焦点。方向是水平虚线和长轴之间的角度。
| 仅二维 | 是 | 是 | ||||||||
"Perimeter" | 围绕区域边界的距离,以标量形式返回。
| 仅二维 | 否 | 是 | ||||||||
"PixelIdxList" | 区域中像素的线性索引,以包含 p 个元素的向量形式返回。 | 是 | 是 | 是 | ||||||||
"PixelList" | 区域中像素的位置,以 p×Q 矩阵形式返回。矩阵的每一行都具有 [x y z ...] 形式,指定区域中一个像素的坐标。 | 是 | 是 | 是 | ||||||||
"Solidity" | 凸包中区域内像素所占的比例,以标量形式返回。实度计算为
| 仅二维 | 否 | 否 | ||||||||
"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.NumObjects
或 max(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 的元素属于第二个区域,它是单个连通分量。 提示
扩展功能
用法说明和限制:
regionprops
支持 C 代码生成(需要 MATLAB® Coder™)。请注意,如果您选择通用的MATLAB Host Computer
目标平台,regionprops
生成的代码将使用平台特定的预编译共享库。使用共享库可保留性能上的优化,但适用范围仅限于生成的代码所适用的目标平台。有关详细信息,请参阅Image Processing Toolbox 中代码生成支持的类型。仅支持二值图像或数值标注图像。不支持分类数据类型的输入标注图像。
不支持指定输出类型
"table"
。不支持传递属性的元胞数组。请改用逗号分隔列表。
支持除
"ConvexArea"
、"ConvexHull"
、"ConvexImage"
、"MaxFeretProperties"
、"MinFeretProperties"
、"Solidity"
和"SubarrayIdx"
之外的所有属性。
用法说明和限制:
GPU Coder™ 只为二值图像生成优化的 CUDA® 代码。为输入标注图像生成的代码未经过优化。不支持分类数据类型的输入标注图像。
不支持指定输出类型
"table"
。不支持传递属性的元胞数组。请改用逗号分隔列表。
仅支持
"Area"
、"BoundingBox"
、"Centroid"
、"Eccentricity"
、"EquivDiameter"
、"Extent"
、"MajorAxisLength"
、"MinorAxisLength"
、"Orientation"
、"PixelIdxList"
"PixelList"
、"MaxIntensity"
、"MeanIntensity"
、"MinIntensity"
、"PixelValues"
和"WeightedCentroid"
属性。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
用法说明和限制:
gpuArray
输入必须为二维逻辑矩阵或二维标签矩阵。不支持连通分量结构体 (
CC
) 输入。不支持以下属性:
"ConvexArea"
、"ConvexHull"
、"ConvexImage"
、"Circularity"
、"EulerNumber"
、"FilledArea"
、"FilledImage"
、"MaxFeretProperties"
、"MinFeretProperties"
和"Solidity"
。"struct"
是唯一受支持的返回类型。
有关详细信息,请参阅GPU 上的图像处理。
版本历史记录
在 R2006a 之前推出regionprops
函数使用新方程来计算圆度。新方程消除了一种偏差,这种偏差导致计算出的圆度对于相对较小的目标来说过高。
如果您想使用旧方程来重现圆度测量值,可以使用以下命令:
props = regionprops(I,["Area" "Perimeter"]); oldCircularity = 4*pi*props.Area ./ props.Perimeter.^2;
regionprops
现在支持基于线程的环境。
从 R2022a 开始,当指定表输出格式时,regionprops
函数将 Image
、ConvexImage
和 FilledImage
属性值存储为元胞数组,而不考虑图像目标的大小。在以前的版本中,如果目标边界框的大小为 1×1 或 1×n,这些属性将作为数值标量或行向量存储在输出表中。
要更新您的代码,请使用圆点表示法并通过花括号 {}
来访问 Image
、ConvexImage
和 FilledImage
属性的值。例如,使用以下代码访问输入图像 BW
中第一个目标的 Image
属性。在以前的版本中,不需要花括号来访问存储为数值标量或行向量的值。
stats = regionprops("table",BW,"Image"); imdata = stats.Image{1};
regionprops
现在支持分类图像数据。
regionprops
现在测量二值图像中区域的圆度和费雷特属性。要测量圆度、最小费雷特属性或最大费雷特属性,请在指定 properties
参量时分别包括 "Circularity"
、"MinFeretProperties"
或 "MaxFeretProperties"
。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)