图像中的边界跟踪
该工具箱包括两个函数,您可以使用它来查找二值图像中对象的边界:
的bwtraceboundary
函数返回图像中对象边界上所有像素的行坐标和列坐标。您必须指定对象上的边界像素的位置作为跟踪的起点。
的bwboundaries
函数返回图像中所有对象的边界像素的行坐标和列坐标。
对于这两个函数,二值图像中非零像素属于一个对象,值为0(零)的像素构成背景。
图像中对象的边界跟踪
这个例子展示了如何在二值图像中使用跟踪对象的边界bwtraceboundary
.然后,使用bwboundaries
,该示例跟踪图像中所有对象的边界。
读取图像并显示它。
I = imread(“coins.png”);imshow(我)
将图像转换为二值图像。bwtraceboundary
而且bwboundaries
只处理二值图像。
BW = im2bw(I);imshow (BW)
确定要跟踪的对象边界上像素的行坐标和列坐标。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);
要跟踪图像中所有硬币的边界,请使用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);结束
选择“第一步”和“跟踪方向”
对于某些对象,在选择作为起点的边界像素和为第一步参数选择的方向(北、南等)时必须小心。
例如,如果一个对象包含一个洞,并且您选择对象薄部分上的像素作为起始像素,那么您可以跟踪对象的外部边界或洞的内部边界,这取决于您为第一步选择的方向。对于已填充的对象,为第一步参数选择的方向并不重要。
为了说明这一点,该图显示了当起始像素位于对象的一个薄部分上并且第一步设置为南北时所跟踪的像素。连通性设置为8(默认值)。
第一步参数和方向参数对边界跟踪的影响