解释起来真是一大口!!不过,我很想向您解释。但是,我对您无法理解MathWorks的文档感到有些惊讶。实际上,它很好地解释了很多(如果不是全部...)它们的功能。
没有为灰度图像定义 BTW, 。 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连接的 。为简单起见,有时人们会看4像素区域,而您只看北,东,南和西方向。这意味着对象是4连接的 。
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处理的是main列中的内容,所以这就是您在上方看到标签的原因。这样, bwlabel
可为您提供每个像素的成员资格 。这可以告诉您每个像素落在对象上的位置。此地图中的0
对应于背景。要调用bwlabel
,您可以执行以下操作:
L = bwlabel(img);
img
是您提供给函数的二进制图像, L
是我刚才谈到的整数映射。另外,您可以为bwlabel
提供2个输出,第二个参数告诉您图像中存在多少个对象。因此:
[L, num] = bwlabel(img);
在上面的示例中, num
为4。作为另一种调用方法,您可以指定要检查的已连接像素邻域,因此可以执行以下操作:
[L, num] = bwlabel(img, N);
N
将是您要检查的像素邻域(即4或8)。
regionprops
regionprops
是我每天使用的非常有用的功能。 regionprops
可测量黑白图像中的各种图像数量和特征。具体而言,给定黑白图像,它将自动确定每个8位连接的连续白色区域的属性。这些特殊属性之一是质心 。这也是重心。您可以将其视为对象的“中间”。这就是每个对象中间位置的(x,y)
位置。因此, Centroid
为regionprops
工作,使得对于在图像看到每个对象,这将计算质量为对象的中心和输出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
坐标是row 。
希望这很清楚!
0
我整天都在阅读上面的MATLAB函数。我似乎在网上都找不到很好的解释,即使在MathWorks网站上也是如此!
如果有人能解释
bwlabel
,regionprops
和centroid
,我将不胜感激。如果应用于灰度图像,它们如何工作?具体来说,它们在下面的代码中使用。以上功能如何适用于以下代码?