Тулбокс включает две функции, которые можно использовать для поиска контуров объектов в бинарное изображение:
The bwtraceboundary функция возвращает координаты строка и столбец всех пикселей на границе объекта в изображении. В качестве начальной точки трассировки необходимо указать местоположение пикселя границы на объекте.
The 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 (значение по умолчанию).
Влияние параметров первого шага и направления на трассировку границ
