use*_*082 4 matlab image image-processing centroid
我花了一整天时间阅读上述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')
Run Code Online (Sandbox Code Playgroud)
ray*_*ica 18
这很难解释!......然而,我很乐意向你解释.但是,我有点惊讶你无法理解MathWorks的文档.它实际上非常擅长解释他们的功能(如果不是全部......).
BTW,. bwlabel并且regionprops都没有定义为灰度图像.您只能将这些应用于二进制图像
更新: bwlabel仍然有接受二进制图像但regionprops不再具有此限制的限制.它还可以采用通常从二进制图像输出的标签矩阵bwlabel.
假设二进制图像是你想要的,我对每个函数的解释如下.
bwlabelbwlabel接受二进制图像.此二进制图像应包含一组彼此分开的对象.属于对象的像素用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).
regionpropsregionprops是我每天使用的非常有用的功能. 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坐标是行.
希望这很清楚!