Matlab bwlabel,regionprops和质心函数的说明
image
image-processing
matlab
4
0

我整天都在阅读上面的MATLAB函数。我似乎在网上都找不到很好的解释,即使在MathWorks网站上也是如此!

如果有人能解释bwlabelregionpropscentroid ,我将不胜感激。如果应用于灰度图像,它们如何工作?

具体来说,它们在下面的代码中使用。以上功能如何适用于以下代码?

fun=@minutie; L = nlfilter(K,[3 3],fun); 
%% Termination LTerm=(L==1); 
figure; imshow(LTerm) 
LTermLab=bwlabel(LTerm); 
propTerm=regionprops(LTermLab,'Centroid'); 
CentroidTerm=round(cat(1,LTerm(:).Centroid)); 
figure; imshow(~K) 
set(gcf,'position',[1 1 600 600]); hold on 
plot(CentroidTerm(:,1),CentroidTerm(:,2),'ro') 
参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

解释起来真是一大口!!不过,我很想向您解释。但是,我对您无法理解MathWorks的文档感到有些惊讶。实际上,它很好地解释了很多(如果不是全部...)它们的功能。

没有为灰度图像定义 BTW, bwlabelregionprops 。您只能将它们应用于二进制图像

更新: 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)位置。因此, Centroidregionprops工作,使得对于在图像看到每个对象,这将计算质量为对象的中心和输出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


希望这很清楚!

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号