Как получить ограничивающий прямоугольник ненулевых элементов в MATLAB? - PullRequest
2 голосов
/ 10 декабря 2011

Допустим, у меня есть матрица ( 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 ]

3 голосов
/ 11 декабря 2011

Использование REGIONPROPS

stats = regionprops(A,'BoundingBox');
BB = stats.BoundingBox;
2 голосов
/ 07 июня 2013

Чтобы получить желаемый результат, используйте:

[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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...