如何在MATLAB中获取非零元素的边界框?

时间:2011-12-10 16:55:21

标签: matlab

让我们说,我有一个矩阵(imread)如下:

A = [0 0 1 0 0; 
     0 0 1 0 0; 
     0 1 1 1 0; 
     0 0 1 0 0; 
     0 0 0 0 0];

我想将非零元素的边界框作为

BB = show_me_the_bounding_box(A);
BB = [1, 2, 4, 4]; % y0, x0, y1, x0

我应该用什么功能来做呢?

2 个答案:

答案 0 :(得分:3)

使用REGIONPROPS

stats = regionprops(A,'BoundingBox');
BB = stats.BoundingBox;

答案 1 :(得分:2)

要获得您想要的结果,请使用:

[y,x] = ind2sub(size(A), find(A))
coord = [y, x]
[min(coord) max(coord)] % [1 2 4 4]

但请注意,使用正确的约定,边界框为:

[y,x] = ind2sub(size(A), find(A))
coord = [x, y]
mc = min(coord)-0.5
Mc = max(coord)+0.5
[mc Mc-mc] % [1.5 0.5 3 4]

产生的结果与:

相同
stats = regionprops(A, 'BoundingBox')
BB = stats.BoundingBox % [1.5 0.5 3 4]

使用以下代码可以轻松地将代码调整为3D图像:

[y,x,z] = ind2sub(size(A), find(A));
coord = [x, y, z];
mc = min(coord)-0.5;
Mc = max(coord)+0.5;
[mc Mc-mc]