Контур в изображениях

Тулбокс включает две функции, которые можно использовать для поиска контуров объектов в бинарное изображение:

The bwtraceboundary функция возвращает координаты строка и столбец всех пикселей на границе объекта в изображении. В качестве начальной точки трассировки необходимо указать местоположение пикселя границы на объекте.

The bwboundaries функция возвращает координаты строка и столбец пограничных пикселей всех объектов в изображении.

Для обеих функций ненулевые пиксели в бинарное изображение принадлежат объекту, а пиксели со значением 0 (нулей) составляют фон.

Трассировка контуров объектов в изображениях

В этом примере показов, как проследить границу объекта в бинарное изображение с помощью bwtraceboundary . Затем использование bwboundaries В примере прослеживаются границы всех объектов на изображении.

Чтение изображения и его отображение.

I = imread('coins.png');
imshow(I)

Figure contains an axes. The axes contains an object of type image.

Преобразуйте изображение в бинарное изображение. bwtraceboundary и bwboundaries работать только с бинарными изображениями.

BW = im2bw(I);
imshow(BW)

Figure contains an axes. The axes contains an object of type image.

Определите координаты строки и столбца пикселя на границе объекта, который вы хотите проследить. 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);

Figure contains an axes. The axes contains 2 objects of type image, line.

Чтобы проследить контуры всех монет в изображении, используйте 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

Figure contains an axes. The axes contains 12 objects of type image, line.

Выберите первый шаг и направление для трассировки

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

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

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

Влияние параметров первого шага и направления на трассировку границ

Для просмотра документации необходимо авторизоваться на сайте