主要内容

bwboundaries

二值图像的区域边界跟踪

描述

例子

B= bwboundaries (BW跟踪二值图像中对象的外部边界,以及这些对象内部的孔的边界BWbwboundaries还下降到最外层的对象(父对象)并跟踪它们的子对象(完全被父对象包围的对象)。函数返回B,边界像素位置的单元数组。

B= bwboundaries (BW康涅狄格州跟踪对象的外部边界,其中康涅狄格州指定在跟踪父级和子级边界时使用的连通性。

例子

B= bwboundaries (BW康涅狄格州选项跟踪对象的外部边界,其中选项要么是“洞”“noholes”,指定是否要包括其他对象内部的孔的边界。

例子

Bl) = bwboundaries (___也返回一个标签矩阵l标记对象和孔的地方。

例子

Bln一个) = bwboundaries (___同样的回报n,发现的对象数量,和一个,一个邻接矩阵。

例子

全部折叠

将灰度图像读入工作空间。

我= imread (“rice.png”);

利用局部自适应阈值将灰度图像转换为二值图像。

BW = imbinarize(我);

计算图像中区域的边界,并将边界覆盖在图像上。

[B, L] = bwboundaries (BW,“noholes”);imshow (label2rgb (L, @jet,。5 .5 .5]))保持k = 1:长度(B)边界= B{k};情节(边界(:,2),边界(:1),' w '“线宽”, 2)结束

图中包含一个axes对象。axis对象包含152个类型为image、line的对象。

将二进制图像读入工作区。

BW = imread (“blobs.png”);

计算图像中的区域边界。

[B, L, N] = bwboundaries (BW);

显示覆盖边界的图像。在每个边界旁边添加区域号(基于标签矩阵)。使用缩放工具读取单个标签。

imshow (BW);持有;颜色= [“b”‘g’“r”“c”“米”“y”];k=1:长度(B),边界= B{k};cidx =国防部(k,长度(颜色))+ 1;情节(边界(:,2),边界(:1),颜色(cidx),“线宽”2);随机文本位置,以获得更好的可视性。rndRow =装天花板(长度(边界)/ (mod(兰德* k, 7) + 1));坳=边界(rndRow, 2);行=边界(rndRow, 1);h = text(col+1, row-1, num2str(L(row,col)));集(h,“颜色”、颜色(cidx),“字形大小”14岁的“FontWeight”“大胆”);结束

图中包含一个axes对象。坐标轴对象包含79个类型为图像、直线和文本的对象。

方法显示邻接矩阵间谍函数。

图间谍(A);

图中包含一个axes对象。axis对象包含一个类型为line的对象。

读取二进制图像到工作空间。

BW = imread (“blobs.png”);

计算边界。

[B, L, N] = bwboundaries (BW);

红色显示对象边界,绿色显示孔边界。

imshow (BW);持有k=1:长度(B),边界= B{k};如果(k > N) plot(boundary(:,2), boundary(:,1),‘g’“线宽”2);其他的情节(边界(:,2),边界(:1),“r”“线宽”2);结束结束

图中包含一个axes对象。坐标轴对象包含40个类型为image、line的对象。

将图像读入工作区。

BW = imread (“blobs.png”);

用红色显示父边界,用绿色显示它们的洞。

[B, L, N] = bwboundaries (BW);图;imshow (BW);持有循环通过对象边界k = 1: N如果第k列是孔的父结点%的邻接矩阵A包含一个非零元素如果(nnz(A(:,k)) > 0)边界= B{k};情节(边界(:,2),边界(:1),“r”“线宽”2);遍历边界k的子结点l = find(A(:,k))' boundary = B{l};情节(边界(:,2),边界(:1),‘g’“线宽”2);结束结束结束

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

输入参数

全部折叠

二值输入图像,指定为二维逻辑或数字矩阵。BW必须是二值图像,其中非零像素属于对象,零值像素构成背景。下图说明了这些组件。

二值图像中的父对象是白色的斑点,可以有洞,子对象则是洞中的岛。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑

像素连接性,指定为此表中的值之一。

价值

意义

二维的连接性

4

如果像素的边缘接触,则它们被连接起来。如果两个相邻像素都是打开的,并且沿着水平或垂直方向连接,那么它们就是同一对象的一部分。

中心像素连接到四个像素

当前像素显示为灰色。

8

如果像素的边或角接触,则它们是连接的。如果两个相邻的像素都是打开的,并且沿着水平、垂直或对角线方向连接,那么它们就是同一对象的一部分。

中心像素连接到八个像素

当前像素显示为灰色。

数据类型:

确定是否搜索父边界和子边界,指定为以下任意一种:

选项

意义

“洞”

搜索对象和洞的边界。这是默认设置。

“noholes”

只搜索对象(父和子)边界。这可以提供更好的性能。

数据类型:字符|字符串

输出参数

全部折叠

边界像素的行和列坐标,返回为p-by-1 cell array,其中p是物体和孔洞的数量。第一个n细胞B为对象边界,其余单元格为孔边界。

单元格数组中的每个单元格都包含2矩阵。矩阵中的每一行都包含边界像素的行坐标和列坐标。为对应区域的边界像素数。

连续区域的标签矩阵,作为非负整数的二维矩阵返回。的k该区域包括所有元素l有价值的k.用。表示的物体和孔的数量l等于马克斯(L (:)).的零值元素l制作背景。

数据类型:

找到的对象数,作为非负整数返回。

数据类型:

边界和孔之间的父子依赖关系,返回为一个正方形、稀疏、具有边长的逻辑矩阵马克斯(L (:)).的行和列一个对应于存储的边界位置B(i, j) = 1意味着对象是object的子对象吗j.包围或被包围的边界k-th边界可以用一个如下:

enclosing_boundary =找到((k,:));enclosed_boundaries =找到((:,k));

数据类型:

算法

bwboundaries函数实现了由Jacob停止准则修改的Moore-Neighbor跟踪算法。该函数基于边界的第一版中提出的函数用MATLAB进行数字图像处理[1]

参考文献

冈萨雷斯,R. C. R. E.伍兹和S. L.艾丁斯,用MATLAB进行数字图像处理,新泽西州,皮尔逊·普伦蒂斯霍尔,2004年。

扩展功能

版本历史

之前介绍过的R2006a

Baidu
map