主要内容

图像的边界跟踪

这个工具箱包含两个函数,你可以用它们来查找二进制图像中对象的边界:

bwtraceboundary函数返回图像中对象边界上所有像素的行坐标和列坐标。必须指定对象上边框像素的位置作为跟踪的起始点。

bwboundaries函数返回图像中所有对象的边框像素的行坐标和列坐标。

对于这两个函数,二值图像中的非零像素属于一个对象,值为0(零)的像素构成背景。

在图像中跟踪对象的边界

这个例子演示了如何在二值图像中跟踪对象的边界bwtraceboundary.然后,使用bwboundaries,该示例跟踪图像中所有对象的边界。

读取图像并显示它。

我= imread (“coins.png”);imshow(我)

图中包含一个坐标轴。轴包含一个image类型的对象。

将图像转换为二进制图像。bwtraceboundarybwboundaries只适用于二进制图像。

BW = im2bw(我);imshow (BW)

图中包含一个坐标轴。轴包含一个image类型的对象。

确定要跟踪的对象边界上的像素的行和列坐标。bwboundary使用此点作为边界跟踪的起始位置。

昏暗的=大小(BW)
昏暗的=1×2246 300
坳= -90(暗(2)/ 2);行= min(找到(BW(:,坳)))
行= 27

调用bwtraceboundary从指定的点跟踪边界。作为必需的参数,您必须指定一个二进制图像、起始点的行和列坐标以及第一步的方向。示例指定北(“N”).

= bwtraceboundary(BW,[row, col]),“N”);

显示原始灰度图像并使用返回的坐标bwtraceboundary绘制图像上的边界。

imshow (I);情节(边界(:,2),边界(:1),‘g’“线宽”3);

图中包含一个坐标轴。轴包含两个类型为image, line的对象。

要追踪图像中所有硬币的边界,使用bwboundaries函数。默认情况下,bwboundaries找到图像中所有物体的边界,包括其他物体内部的物体。在本例中使用的二进制图像中,一些硬币包含黑色区域bwboundaries解释为独立的对象。以确保bwboundaries只追踪硬币,使用imfill填充每个硬币内的区域。bwboundaries返回一个单元格数组,其中每个单元格包含图像中一个对象的行/列坐标。

BW_filled = imfill (BW,“黑洞”);边界= bwboundaries (BW_filled);

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

b =边界{K};情节(b(:, 2)、b (: 1),‘g’“线宽”3);结束

图中包含一个坐标轴。轴包含12个类型为image, line的对象。

选择跟踪的第一步和方向

对于某些对象,在选择作为起始点的边界像素和为第一步参数(北、南等)选择方向时必须小心。

例如,如果一个对象包含一个孔,并且您选择对象的一个细的部分的像素作为起始像素,您可以跟踪对象的外边界或孔的内边界,这取决于您为第一步选择的方向。对于填充的对象,您为第一步参数选择的方向并不重要。

为了说明这一点,该图显示了当起始像素位于对象的一个薄的部分,并且第一步被设置为北和南时所跟踪的像素。连接设置为8(默认值)。

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