比方說,我有一個矩陣(由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
我應該使用什麼功能去做?
比方說,我有一個矩陣(由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
我應該使用什麼功能去做?
爲了得到你想要的結果,請使用:
[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]
stats = regionprops(A,'BoundingBox');
BB = stats.BoundingBox;
我建議明確定義'min'和'max'的維度正在工作,例如, 'min(coord,[],1)'否則當你想綁定單個條目或點時,該方法將失敗。 – Maurits