如何从regionprops中提取连通组件的宽度?

时间:2014-02-14 20:40:27

标签: matlab image-processing vector image-segmentation

我想使用regionprops找出连接组件的宽度。宽度不是regionprops的默认属性之一,但我认为BooundingBox具有此选项。从我阅读的文档:

  

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

     

ul_corner的格式为[x y z ...]并指定左上角   边界框宽度的一角是[x_width y_width ...]的形式   并指定沿每个维度的边界框的宽度

因此,如果我在控制台中输入s(1).BoundingBox,我就会得到这个

ans =

    7.5000   27.5000  197.0000  132.0000

我是否正确地假设第三个元素(在这种情况下为197)是连接组件的宽度?前两个是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 个答案:

答案 0 :(得分:1)

BoundingBox[ul_corner_x ul_corner_y x_width y_width],其中前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