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

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

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

bwboundaries функция возвращает координаты строки и столбца краевых элементов изображения всех объектов в изображении.

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

Проследите контуры объектов в изображениях

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

Считайте изображение и отобразите его.

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

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

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

BW = im2bw(I);
imshow(BW)

Figure contains an axes object. The axes object 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 object. The axes object 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 object. The axes object contains 12 objects of type image, line.

Выберите First Step и Direction for Tracing

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

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

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

Удар параметров первого шага и направления на граничной трассировке