2014-02-14 23 views
1

我想用regionprops找出连接组件的宽度。宽度不是regionprops的默认属性之一,但我认为BooundingBox有此选项。从文档我读:如何从regionprops中提取连接组件的宽度?

'的BoundingBox' - 包含该区域的最小矩形,1 * Q * 2向量,其中Q是图像维数:为ndims(L),为ndims(BW )或numel(CC.ImageSize)。 BoundingBox的是[ul_corner宽度],其中:

ul_corner的形式是[XYZ ...],并指定左上 角落边界框的宽度是在形式[x_width y_width ...] 和指定边界框的每个维宽度

所以,如果我在s(1).BoundingBox在控制台输入我得到这个

ans = 

    7.5000 27.5000 197.0000 132.0000 

我是正确的假设,第三个元素(197在这种情况下)是连接组件的宽度T'前两个是xy坐标,最后一个是高度?

如果是这样,我该如何解压?

我试过这段代码,它似乎没有工作。

BB = [stats.BoundingBox]; 
for m = 3:3:length(BB) % start from third element, skip next three and so on 
    width = BB(m); 
end 

它只是似乎总结BB的所有元素,并把结果保存在width

我是否正在从BoundingBox中提取宽度?我的索引方法有什么问题?为什么不给我一个width矢量?

谢谢

+1

'3:4:长度(BB)' - 有每个条目4个元素,所以你要每4个元素_starting from_ 3.你也不是索引到'width',所以你每次都把它作为一个标量覆盖。就个人而言,我会去'BB = vertcat(stats.BoundingBox);宽度= BB(:,3);' – Notlikethat

回答

1

BoundingBox[ul_corner_x ul_corner_y x_width y_width]其中1号2个元素指定边框的左上角,而最后2个元素指定每个维边框的宽度。请注意,它不是连接组件的宽度,而是边界框的宽度。每个边界框只包括具有相同指定标签的所有连接组件。实际上,定义连接组件的宽度(多边形)是没有意义的。

A = randi([0 1], 10, 10); 
bw=bwlabel(A); 
cc=regionprops(bw,'BoundingBox'); 

,你有,

>> cc(1) 

ans = 

    BoundingBox: [0.5000 0.5000 10 10] 

>> cc(2) 

ans = 

    BoundingBox: [3.5000 0.5000 1 1] 

>> cc(3) 

ans = 

    BoundingBox: [8.5000 8.5000 1 2] 

bw = 

    0  0  0  2  0  0  1  0  0  1 
    0  1  0  0  0  0  0  1  1  0 
    0  0  1  0  0  1  0  0  1  0 
    0  1  0  1  1  1  1  1  0  0 
    0  0  1  1  1  0  1  1  1  0 
    0  1  1  0  0  1  0  1  0  0 
    1  1  1  1  1  1  0  1  0  0 
    0  0  0  1  0  1  0  0  0  0 
    1  1  1  1  1  0  0  0  3  0 
    1  0  1  1  1  1  0  0  3  0 
相关问题