一、bwboundaries函数返回值
在Matlab中,bwboundaries函数用于寻找二值图像中物体的边缘。该函数返回一个细胞数组,每个元素对应一个物体的边缘点坐标集合。具体而言,bwboundaries函数获取的是连接二值图像(即只有0和1两种值的图像)中的前景图像的边缘。
% 示例代码
% 对于以下的二值图像bw,有两个物体,分别用0和1表示
bw = zeros(8,8);
bw(2:3,2:4) = 1;
bw(5:7,5:7) = 1;
% 调用bwboundaries函数寻找bw中前景图像的边缘
B = bwboundaries(bw);
% 此时B为一个大小为2的细胞数组,每个元素都是一个大小若干的二维数组,表示对应一个物体的边缘坐标
二、bwboundaries函数介绍
bwboundaries函数采用的是基于边界跟踪算法,其中最常用的是Moore-Neighbor Tracing算法。该算法的步骤如下:
1、寻找图像中前景像素f的第一个非孤立像素n,设该像素坐标为(nrow, ncol)。
2、从n开始,按照顺时针的方向对f进行跟踪,记录下所有经过的像素。若当前点的4邻域内还有未跟踪的前景像素,则顺时针旋转90度继续跟踪(也就是说,沿着外轮廓的像素必须是连续的,不能存在跳跃现象)。
3、如果又在外轮廓跟踪到了起始像素n,那么这个外轮廓就是跟踪完成了。否则,跟踪还未完成,重复步骤2。
需要注意的是,当存在多个物体时,该算法只会跟踪到每个物体的最外轮廓边缘。
三、bwboundaries中文意思
bwboundaries函数的名称可以分为两部分,bw代表二值图像,而boundaries则可以理解为边界的复数形式,表征了该函数的主要作用
四、bwboundaries函数边缘检测选取
在使用bwboundaries函数时,需要注意二值图像的像素值只有0和1两种,因此图像通常需要进行二段处理或者采用图像分割的方法得到。至于二值图像的选取方式,在实际应用中,常根据不同场景下的需要,采用不同的图像分割算法,例如全局和局部阈值分割等。
我们在之前的示例中已经提到了关于图像选取的方式,实现代码如下:
bw = zeros(8,8);
bw(2:3,2:4) = 1;
bw(5:7,5:7) = 1;
这种方式是通过手动设置二值图像像素值来实现的,而在实际应用中,图像通常是通过图像处理工具箱中的函数或者自行编写的算法得到。
除了以上所述的这些方面外,bwboundaries函数还涉及到很多细节和注意事项,如果想要更深入地了解该函数,建议大家还是需要阅读官方文档或者相关的书籍和论文。