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

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

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

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

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

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

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

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