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