文档

图像中的边界跟踪

该工具箱包含两个函数,您可以用来在二进制图像中找到对象的边界:

BwtraceBoundaryfunction returns the row and column coordinates of all the pixels on the border of an object in an image. You must specify the location of a border pixel on the object as the starting point for the trace.

Bwboundariesfunction returns the row and column coordinates of border pixels of all the objects in an image.

For both functions, the nonzero pixels in the binary image belong to an object, and pixels with the value 0 (zero) constitute the background.

图像中对象的痕量边界

此示例显示了如何使用二进制图像在二进制图像中跟踪对象的边界BwtraceBoundary。然后,使用Bwboundaries,示例跟踪图像中所有对象的边界。

Read image and display it.

i = imread('COINS.PNG');imshow(i)

将图像转换为二进制图像。BwtraceBoundaryandBwboundaries仅使用二进制图像。

bw = im2bw(i);imshow(BW)

确定要追踪对象边框上像素的行和列坐标。Bwboundary将这一点用作边界跟踪的起始位置。

dim =size(BW)
dim =1×2246 300
col =圆形(DIM(2)/2)-90;行= min(find(bw(:,col)))
行= 27

称呼BwtraceBoundary从指定点追踪边界。根据需要的参数,您必须指定起点的行和列坐标以及第一步的方向。该示例指定北('n')。

boundary = bwtraceboundary(BW,[row, col],'n');

显示原始的灰度图像,并使用返回的坐标BwtraceBoundary在图像上绘制边框。

imshow(i)保持on; plot(boundary(:,2),boundary(:,1),'G',,,,'行宽',3);

要追踪图像中所有硬币的边界,请使用Bwboundaries功能。默认情况下,Bwboundaries找到图像中所有对象的边界,包括其他对象内的对象。在此示例中使用的二进制图像中,某些硬币包含黑色区域Bwboundaries解释为单独的对象。为了保证Bwboundaries只追踪硬币,使用imfill填充每个硬币内部的区域。Bwboundaries返回单元格数组,每个单元格包含图像中对象的行/列坐标。

BW_filled = imfill(BW,“孔”);边界= bwboundaries(bw_fill);

使用返回的坐标绘制原始灰度图像上所有硬币的边界Bwboundaries

为了k = 1:10 b =边界{k};图(b(:,2),b(:,1),'G',,,,'行宽',3);结尾

选择跟踪的第一步和方向

对于某些对象,选择您选择的边框像素作为起点以及选择第一步参数(北,南等)的方向时必须小心。

例如,如果一个对象包含一个孔,并且您在对象的薄片上选择一个像素作为起始像素,则可以根据您选择的方向来追踪对象的外边框或孔的内部边框第一步。对于填充的对象,您选择第一步参数的方向并不那么重要。

为了说明,该图显示了当启动像素位于对象的薄片上时所追踪的像素,并且第一步设置为北部和南方。连接设置为8(默认值)。

第一步和方向参数对边界跟踪的影响

这个话题有帮助吗?