Если у меня есть m x n
логическое изображение белой области, подобное следующему:
Как получить индексы пограничной линии между белой и черной областями?
Если у меня есть m x n
логическое изображение белой области, подобное следующему:
Как получить индексы пограничной линии между белой и черной областями?
Это просто сводится к обнаружению краев данного изображения. В MATLAB уже есть встроенная реализация для этого в команде edge
. Вот пример определения границ изображения I
с помощью фильтра Кэнни:
A = edge(I, 'canny');
Ненулевые элементы в результирующем изображении A
— это то, что вам нужно. Затем вы можете использовать find
для получения их индексов.
[i j] = find(A);
после вашего кода, большое спасибо :).
- person Sameh Kamal; 13.01.2013
edge
вместо морфологических операций в этом случае?
- person Shai; 13.01.2013
Поскольку ваш ввод представляет собой четкое двоичное изображение, нет необходимости использовать edge
, как это предлагает @EitanT.
Получение периметра с помощью морфологических операций imdilate
, imerode
и regionprops
:
% let input image be bw
we = bw & ~imerode( bw, strel('disk', 1) ); % get a binary image with only the boundary pixels set
st = regionprops(we, 'PixelIdxList'); % get the linear indices of the boundary
% get a binary image with pixels on the outer side of the shape set
be = ~bw & imdilate( bw, strel('disk', 1) );
st = regionprops(be, 'PixelList'); % get the row-col indices of the boundary