Получить внешние индексы региона в логическом образе

Если у меня есть m x n логическое изображение белой области, подобное следующему:

Логический образ региона

Как получить индексы пограничной линии между белой и черной областями?


person Sameh Kamal    schedule 13.01.2013    source источник


Ответы (2)


Это просто сводится к обнаружению краев данного изображения. В MATLAB уже есть встроенная реализация для этого в команде edge. Вот пример определения границ изображения I с помощью фильтра Кэнни:

A = edge(I, 'canny');

Ненулевые элементы в результирующем изображении A — это то, что вам нужно. Затем вы можете использовать find для получения их индексов.

person Eitan T    schedule 13.01.2013
comment
если только что использовали [i j] = find(A); после вашего кода, большое спасибо :). - person Sameh Kamal; 13.01.2013
comment
@EitanT - есть ли особая причина, по которой вы используете edge вместо морфологических операций в этом случае? - person Shai; 13.01.2013
comment
@Shai, потому что это дает желаемый результат в одной строке ... (я не думал, что здесь проблема в скорости). - person Eitan T; 14.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
person Shai    schedule 13.01.2013
comment
лучше, чем использовать обнаружение краев .. :) - person dbs; 20.04.2015