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