解释起来真是一口难言!...不过,我很想向您解释一下。但是,我有点惊讶您无法理解 MathWorks 的文档。它实际上非常擅长解释它们的很多(如果不是全部......)功能。
顺便说一句,bwlabel
并且regionprops
没有为灰度图像定义。您只能将这些应用于二进制图像。
更新: bwlabel
仍然有接受二进制图像的限制,但regionprops
不再有这个限制。它还可以接收通常从二进制图像输出的标签矩阵。bwlabel
假设二进制图像是你想要的,我对每个函数的解释如下。
bwlabel
bwlabel
接受二值图像。这个二值图像应该包含一堆彼此分离的对象。属于对象的像素用1
/表示,true
而作为背景的像素用0
/表示false
。例如,假设我们有一个看起来像这样的二进制图像:
0 0 0 0 0 1 1 1 0 0
0 1 0 1 0 0 1 1 0 0
0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 1 1
0 0 1 1 1 1 0 0 1 1
您可以在此图像中看到此图像中有四个对象。对象的定义是那些1
通过查看本地邻域而连接成链的像素。我们通常会查看 8 像素邻域,您可以在其中查看北、东北、东、东南、南、西南、西、西北方向。另一种说法是对象是8-connected。为简单起见,有时人们会查看 4 像素社区,而您只需查看北、东、南和西方向。这意味着对象是4-connected。
的输出bwlabel
将为您提供一个整数映射,其中为每个对象分配一个唯一 ID。因此, 的输出bwlabel
将如下所示:
0 0 0 0 0 3 3 3 0 0
0 1 0 1 0 0 3 3 0 0
0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 4
0 0 0 0 0 0 0 0 4 4
0 0 2 2 2 2 0 0 4 4
因为 MATLAB 在主要列中处理事物,所以标签就是您在上面看到的方式。因此,bwlabel
为您提供每个像素的成员资格。如果每个像素落在对象上,这会告诉您每个像素所属的位置。 0
在这张地图对应的背景。要调用bwlabel
,您可以执行以下操作:
L = bwlabel(img);
img
将是您提供给函数的二进制图像,并且L
是我刚刚谈到的整数映射。此外,您可以为 提供 2 个输出bwlabel
,第二个参数告诉您图像中存在多少对象。像这样:
[L, num] = bwlabel(img);
对于我们上面的示例,num
将是 4。作为另一种调用方法,您可以指定要检查的连接像素邻域,因此您可以这样做:
[L, num] = bwlabel(img, N);
N
将是您要检查的像素邻域(即 4 或 8)。
regionprops
regionprops
是我日常使用的一个非常有用的功能。 regionprops
测量黑白图像中的各种图像数量和特征。具体来说,给定一张黑白图像,它会自动确定每个 8 连接的连续白色区域的属性。这些特殊属性之一是centroid。这也是质心。您可以将其视为对象的“中间”。这将是(x,y)
每个对象的中间所在的位置。因此,Centroid
对于regionprops
图像中看到的每个对象,for 的工作原理是计算对象的质心和输出regionprops
将返回一个结构,其中该结构的每个元素都会告诉您黑白图像中每个对象的质心是什么。 Centroid
只是属性之一。还有其他有用的功能,但我假设您不想这样做。要调用regionprops
,您可以这样做:
s = regionprops(img, 'Centroid');
上面的代码将计算图像中每个对象的质心。您可以指定其他标志来regionprops
指定所需的每个功能。我非常鼓励您查看所有regionprops
可以计算的可能功能,因为有许多功能在各种不同的应用程序和情况下都很有用。
此外,通过省略任何标志作为函数的输入,您将默认计算图像中的所有特征。因此,如果我们要在 MATLAB 中声明我们在上面看到的图像,这就是我运行regionprops
. 之后,让我们计算质心是什么:
img = logical(...
[0 0 0 0 0 1 1 1 0 0;
0 1 0 1 0 0 1 1 0 0;
0 1 1 1 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 1;
0 0 0 0 0 0 0 0 1 1;
0 0 1 1 1 1 0 0 1 1]);
s = regionprops(img, 'Centroid');
...最后当我们显示质心时:
>> disp(cat(1,s.Centroid))
3.0000 2.6000
4.5000 6.0000
7.2000 1.4000
9.6000 5.2000
因此,第一个质心位于 处(x,y) = (3, 2.6)
,下一个质心位于 处(x,y) = (4.5, 6)
,依此类推。请特别注意,x
坐标是列,而y
坐标是行。
希望这很清楚!