MATLAB中的连通区域函数 bwlabel
2013-05-25 16:17
260 查看
最近做人脸检测的时候遇到了bwlabel函数,始终没理解,偶然一 搜:
http://blog.163.com/zhuqibing2010@126/blog/static/14038650320101117361778/
L = bwlabel(BW,n)
bwlabel函数: Label connected components in 2-D binary image,处理的对象是二值图。
返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8。
四连通或八连通是图像处理里的基本感念:
8连通,是说一个像素,如果和其他像素在上、下、左、右、左上角、左下角、右上角或右下角连接着,则认为他们是联通的;
4连通,是指如果像素的位置在其他像素相邻的上、下、左或右,则认为他们是连接着的,连通的,在左上角、左下角、右上角或右下角连接,则不认为他们连通。
[L,num] = bwlabel(BW,n),默认的n是8。其中L表示进行连通处理后的图像,num表示就是BW中连通区域的个数。
补充:我听说过16连通,这应该是在三维空间里的概念了吧。
举例说明:
>> BW = [1 1 1 0 0 0 0 0
1 1 1 0 1 1 0 0
1 1 1 0 1 1 0 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 1 1 0
1 1 1 0 0 0 0 0];
按4连通计算,方形的区域,和翻转的L形区域,有用是对角连接,不属于连通,所以分开标记,连通区域个数为3
L = bwlabel(BW,4)
结果如下:
L =
1 1 1 0 0 0 0 0
1 1 1 0 2 2 0 0
1 1 1 0 2 2 0 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 3 3 0
1 1 1 0 0 0 0 0
而8连通标记,它们是连通的:
>> [L num] = bwlabel(BW,8)
结果如下:
L =
1 1 1 0 0 0 0 0
1 1 1 0 2 2 0 0
1 1 1 0 2 2 0 0
1 1 1 0 0 0 2 0
1 1 1 0 0 0 2 0
1 1 1 0 0 0 2 0
1 1 1 0 0 2 2 0
1 1 1 0 0 0 0 0
num =
2
另外还有以下几个函数可以计算二值图像的连通区域:
bwlabeln,
bwconncomp,
事实上,bwconncomp取代了bwlabel和bwlabeln,因为它需要更少的内存和运算时间。
几个函数的使用
http://blog.163.com/zhuqibing2010@126/blog/static/14038650320101117361778/
L = bwlabel(BW,n)
bwlabel函数: Label connected components in 2-D binary image,处理的对象是二值图。
返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8。
四连通或八连通是图像处理里的基本感念:
8连通,是说一个像素,如果和其他像素在上、下、左、右、左上角、左下角、右上角或右下角连接着,则认为他们是联通的;
4连通,是指如果像素的位置在其他像素相邻的上、下、左或右,则认为他们是连接着的,连通的,在左上角、左下角、右上角或右下角连接,则不认为他们连通。
[L,num] = bwlabel(BW,n),默认的n是8。其中L表示进行连通处理后的图像,num表示就是BW中连通区域的个数。
补充:我听说过16连通,这应该是在三维空间里的概念了吧。
举例说明:
>> BW = [1 1 1 0 0 0 0 0
1 1 1 0 1 1 0 0
1 1 1 0 1 1 0 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 0 1 0
1 1 1 0 0 1 1 0
1 1 1 0 0 0 0 0];
按4连通计算,方形的区域,和翻转的L形区域,有用是对角连接,不属于连通,所以分开标记,连通区域个数为3
L = bwlabel(BW,4)
结果如下:
L =
1 1 1 0 0 0 0 0
1 1 1 0 2 2 0 0
1 1 1 0 2 2 0 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 0 3 0
1 1 1 0 0 3 3 0
1 1 1 0 0 0 0 0
而8连通标记,它们是连通的:
>> [L num] = bwlabel(BW,8)
结果如下:
L =
1 1 1 0 0 0 0 0
1 1 1 0 2 2 0 0
1 1 1 0 2 2 0 0
1 1 1 0 0 0 2 0
1 1 1 0 0 0 2 0
1 1 1 0 0 0 2 0
1 1 1 0 0 2 2 0
1 1 1 0 0 0 0 0
num =
2
另外还有以下几个函数可以计算二值图像的连通区域:
bwlabeln,
bwconncomp,
事实上,bwconncomp取代了bwlabel和bwlabeln,因为它需要更少的内存和运算时间。
几个函数的使用
相关文章推荐
- bwlabel(BW,n) matlab中标记二值图像中白色(1)的连通区域
- 使用Matlab中regionprops函数获取图像连通区域
- Matlab得到二值图像中最大连通区域
- Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI
- OpenCV编程案例:使用轮廓函数检测连通区域
- matlab多值连通区域标记
- matlab中bwareaopen/bwarea/imclearborder/bwboundaries/imregionalmin等边界区域函数
- 连通区域标记:c++版的bwlabel实现(基于opencv)
- matlab,针对图像,如何获得 3D 连通区域的外接长方体
- matlab用来度量图像区域属性的函数——regionprops
- matlab 求图像的连通区域的圆度并可视化
- MATLAB 区域生长 连通区域计算 曲线的断点查询
- Matlab的regionprops详解 连通区域
- 【matlab】求图像的最大连通区域
- matlab图像处理之连通区域求质心
- matlab用来度量图像区域属性的函数——regionprops
- Matlab图像处理学习笔记(一):二值化、开操作、连通区域提取、重心、ROI
- matlab练习程序(二值图像连通区域标记法,两步法)
- matlab 中如何使用bwboundaries获取连通区域并求取其轮廓
- Matlab找最大连通区域