Image Matlab'的说明;BWS标签、regionprops&;质心函数

Image Matlab'的说明;BWS标签、regionprops&;质心函数,image,matlab,image-processing,centroid,Image,Matlab,Image Processing,Centroid,我花了一整天的时间阅读上面的MATLAB函数。我似乎在网上找不到任何好的解释,甚至在MathWorks网站上也找不到 如果有人能解释一下bwlabel、regionprops和centroid,我将不胜感激。如果应用于灰度图像,它们是如何工作的 具体来说,它们在下面的代码中使用。上述函数如何应用于下面的代码 fun=@minutie; L = nlfilter(K,[3 3],fun); %% Termination LTerm=(L==1); figure; imshow(LTerm)

我花了一整天的时间阅读上面的MATLAB函数。我似乎在网上找不到任何好的解释,甚至在MathWorks网站上也找不到

如果有人能解释一下
bwlabel
regionprops
centroid
,我将不胜感激。如果应用于灰度图像,它们是如何工作的

具体来说,它们在下面的代码中使用。上述函数如何应用于下面的代码

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') 

这解释得太多了!。。。尽管如此,我还是想向你解释一下。然而,我有点惊讶,你不能理解MathWorks的文档。它实际上非常擅长解释它们的很多功能(如果不是全部的话)

顺便说一句,
bwlabel
regionprops
对于灰度图像未定义。只能将这些应用于二进制图像

更新:
bwlabel
仍有接受二进制图像的限制,但
regionprops
不再有此限制。它还可以接收通常从
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
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
您可以在该图像中看到,该图像中有四个对象。对象的定义是那些
1
的像素,它们通过查看局部邻域连接成一个链。我们通常看8像素的街区,在那里你可以看到北、东北、东、东南、南、西南、西、西北方向。另一种说法是,对象是8-连接的。为了简单起见,有时人们会看4像素的街区,你只看北、东、南、西方向。这意味着对象是4-连接的

bwlabel
的输出将为您提供一个整数映射,其中每个对象都分配了一个唯一的ID。因此,
bwlabel
的输出如下所示:

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
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在major列中处理事情,这就是为什么上面的标签是这样的。因此,
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
测量黑白图像中的各种图像数量和特征。具体地说,给定一个黑白图像,它会自动确定8连通的每个相邻白色区域的属性。这些特殊属性之一是质心。这也是质量中心。您可以将其视为对象的“中间”。这将是每个对象中间位置的
(x,y)
位置。因此,
regionprops
质心
的工作原理是,对于图像中看到的每个对象,这将计算对象的质心,
regionprops
的输出将返回一个结构,其中该结构的每个元素将告诉您黑白图像中每个对象的质心是什么<代码>质心只是属性之一。还有其他有用的特性,但我假设您不想这样做。要调用
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
坐标是



希望这是清楚的

谢谢你的详细解释。但是,我在上面包含的代码中使用了上述所有内容。你能给我解释一下代码的作用吗??我对t很感兴趣