我想使用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
向量?
谢谢
答案 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