Панель инструментов включает две функции, которые можно использовать для поиска границ объектов в двоичном изображении:
bwtraceboundary функция возвращает координаты строки и столбца всех пикселов на границе объекта в изображении. В качестве начальной точки трассировки необходимо указать местоположение пикселя границы на объекте.
bwboundaries функция возвращает координаты строк и столбцов пикселов границы всех объектов изображения.
Для обеих функций ненулевые пикселы в двоичном изображении принадлежат объекту, а пикселы со значением 0 (ноль) составляют фон.
В этом примере показано, как отслеживать границу объекта в двоичном изображении с помощью bwtraceboundary . Затем с помощью bwboundaries , в примере выполняется трассировка границ всех объектов изображения.
Прочтите изображение и выведите его на экран.
I = imread('coins.png');
imshow(I)
Преобразование изображения в двоичное изображение. bwtraceboundary и bwboundaries работает только с двоичными изображениями.
BW = im2bw(I); imshow(BW)

Определите координаты строки и столбца пиксела на границе объекта, который требуется отследить. bwboundary использует эту точку в качестве начального местоположения для трассировки границ.
dim = size(BW)
dim = 1×2
246 300
col = round(dim(2)/2)-90; row = min(find(BW(:,col)))
row = 27
Звонить bwtraceboundary для трассировки границы от указанной точки. В качестве обязательных аргументов необходимо указать двоичное изображение, координаты строки и столбца начальной точки и направление первого шага. В примере указывается север ( 'N' ).
boundary = bwtraceboundary(BW,[row, col],'N');Отображение исходного изображения в градациях серого и использование координат, возвращенных bwtraceboundary для печати границы на изображении.
imshow(I) hold on; plot(boundary(:,2),boundary(:,1),'g','LineWidth',3);

Чтобы проследить границы всех монет на изображении, используйте bwboundaries функция. По умолчанию bwboundaries находит границы всех объектов изображения, включая объекты внутри других объектов. В двоичном изображении, используемом в этом примере, некоторые монеты содержат черные области, которые bwboundaries интерпретируется как отдельные объекты. Обеспечить, чтобы bwboundaries только отслеживание монет, использование imfill для заполнения области внутри каждой монеты. bwboundaries возвращает массив ячеек, где каждая ячейка содержит координаты строки/столбца для объекта в изображении.
BW_filled = imfill(BW,'holes');
boundaries = bwboundaries(BW_filled);Постройте график границ всех монет на исходном изображении в градациях серого, используя координаты, возвращенные bwboundaries .
for k=1:10 b = boundaries{k}; plot(b(:,2),b(:,1),'g','LineWidth',3); end

Для некоторых объектов необходимо соблюдать осторожность при выборе пикселя границы, выбранного в качестве начальной точки, и направления, выбранного для параметра первого шага (север, юг и т.д.).
Например, если объект содержит отверстие и в качестве начального пикселя выбран пиксель на тонкой части объекта, можно проследить внешнюю границу объекта или внутреннюю границу отверстия в зависимости от направления, выбранного для первого шага. Для заполненных объектов направление, выбранное для параметра первого шага, не так важно.
Для иллюстрации на этом рисунке показаны пикселы, отслеживаемые, когда начальный пиксель находится на тонкой части объекта, а первый шаг установлен на север и юг. Связность установлена на 8 (по умолчанию).
Влияние параметров первого шага и направления на трассировку границ
