2011-12-10 43 views
2

比方说,我有一个矩阵(由imread)如下:如何获得MATLAB中非零元素的边界框?

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

为了得到你想要的结果,请使用:

[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] 
+0

我建议明确定义'min'和'max'的维度正在工作,例如, 'min(coord,[],1)'否则当你想绑定单个条目或点时,该方法将失败。 – Maurits

3

使用REGIONPROPS

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

有趣的是,'regionprops(A, '的BoundingBox')'将返回'1.5000 0.5000 3.0000 4.0000'〜 – Drake

+0

BB包含原点(1.5和0.5)和宽度(3和4),这给出了坐标的[1.5 0.5 4.5 4.5],这是正确的。 – Wok

+0

顺便说一下,BB可以很好地处理3D图像。 – Wok

相关问题