主要内容

图像中的边界跟踪

该工具箱包括两个函数,您可以使用它来查找二值图像中对象的边界:

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

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

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

图像中对象的边界跟踪

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

读取图像并显示它。

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

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

将图像转换为二值图像。bwtraceboundary而且bwboundaries只处理二值图像。

BW = im2bw(I);imshow (BW)

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

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

dim = size(BW)
昏暗的=1×2246 300
Col = round(dim(2)/2)-90;row = min(find(BW(:,col))
Row = 27

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

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

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

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

图中包含一个轴对象。axis对象包含image、line类型的2个对象。

要跟踪图像中所有硬币的边界,请使用bwboundaries函数。默认情况下,bwboundaries查找图像中所有对象的边界,包括其他对象中的对象。在本例中使用的二值图像中,一些硬币包含黑色区域bwboundaries解释为单独的对象。为了确保bwboundaries只留下痕迹的硬币,使用imfill填满每个硬币内的面积。bwboundaries返回一个单元格数组,其中每个单元格包含图像中对象的行/列坐标。

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

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

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

图中包含一个轴对象。axis对象包含12个image、line类型的对象。

选择“第一步”和“跟踪方向”

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

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

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

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