Matlab的bwlabel,regionprops和质心函数的解释

use*_*082 4 matlab image image-processing centroid

我花了一整天时间阅读上述MATLAB函数.即使在MathWorks网站上,我也无法在网上找到任何好的解释!

我会很感激,如果任何人都可以解释bwlabel,regionpropscentroid.如果应用于灰度图像,它们如何工作?

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

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') 
Run Code Online (Sandbox Code Playgroud)

ray*_*ica 18

这很难解释!......然而,我很乐意向你解释.但是,我有点惊讶你无法理解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
Run Code Online (Sandbox Code Playgroud)

您可以在此图像中看到此图像中有四个对象.对象的定义是1通过查看本地邻域在链中连接的那些像素.我们通常会查看8像素的街区,在那里您可以看到北,东北,东,东南,南,西南,西,西北方向.另一种说法是对象是8连接的.为简单起见,有时候人们会看到4像素的社区,在那里您可以看到北,东,南和西方向.这个woudl意味着对象是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
Run Code Online (Sandbox Code Playgroud)

因为MATLAB处理专业列中的内容,所以标签就是您在上面看到的原因.因此,bwlabel为您提供每个像素的成员资格.这会告诉您每个像素属于哪个属于它的对象. 0在此地图中对应于背景.要打电话bwlabel,你可以这样做:

L = bwlabel(img);
Run Code Online (Sandbox Code Playgroud)

img将是您提供给函数的二进制图像,并且L是我刚才谈到的整数映射.此外,您可以提供2个输出bwlabel,第二个参数告诉您图像中存在多少个对象.因此:

[L, num] = bwlabel(img);
Run Code Online (Sandbox Code Playgroud)

使用上面的示例,num将是4.作为另一种调用方法,您可以指定要检查的连接像素邻域,因此您可以执行此操作:

[L, num] = bwlabel(img, N);
Run Code Online (Sandbox Code Playgroud)

N 将是您要检查的像素邻域(即4或8).


regionprops

regionprops是我每天使用的非常有用的功能. regionprops测量黑白图像中的各种图像数量和特征.具体而言,给定黑白图像,它自动确定8连接的每个连续白色区域的属性.这些特殊属性之一是质心.这也是质量的中心.您可以将此视为对象的"中间".这将是(x,y)每个对象中间位置的位置.因此,Centroid对于regionprops在图像中看到的每个对象,这将工作,这将计算对象的质心,并且输出regionprops将返回结构,其中该结构的每个元素将告诉您质心是什么黑白图像中的每个对象. Centroid只是其中一个属性.还有其他有用的功能,但我假设你不想这样做.要打电话regionprops,你会这样做:

s = regionprops(img, 'Centroid');
Run Code Online (Sandbox Code Playgroud)

上面的代码将计算图像中每个对象的质心.您可以指定其他标志以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');
Run Code Online (Sandbox Code Playgroud)

......最后当我们显示质心时:

>> disp(cat(1,s.Centroid))

3.0000    2.6000
4.5000    6.0000
7.2000    1.4000
9.6000    5.2000
Run Code Online (Sandbox Code Playgroud)

因此,第一个质心位于(x,y) = (3, 2.6),下一个质心位于,(x,y) = (4.5, 6)依此类推.请特别注意,x坐标是列,y坐标是.


希望这很清楚!