用法:
L = bwlabel(BW,n)
返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8。
4连通或8连通是图像处理里的基本感念:而8连通,是说一个像素,如果和其他像素在上、下、左、右、左上角、左下角、右上角或右下角连接着,则认为他们是联通的;4连通是指,如果像素的位置在其他像素相邻的上、下、左或右,则认为他们是连接着的,连通的,在左上角、左下角、右上角或右下角连接,则不认为他们连通。请注意“或”字的含义,就是满足其中一个条件就认为是连通的。
[L,num] = bwlabel(BW,n)这里num返回的就是BW中连通区域的个数。
通俗的说,这个函数的作用是用来找这个二值图像中的连通区域的,对于不同的符合条件的连通区域(4连通,8连通)分别用不同的标号加以区别,结果保存在L这个矩阵里,而num里保存的是输入图像中连通区域的总数。
举例说明:
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,就是有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
http://blog.csdn.net/wanrenwangxuejing/article/details/25108191
函数bwlabel,belabeln和bwconncomp都是标记二值图像中的连通域。Bwconncomp可以替代bwlabel and bwlabeln的用法,而且需要相当小的计算空间并且比一些较早的函数计算速度更快。
函数 | 输入图像维数 | 输出形式 | 内存使用 | 邻域类型 |
bwlabel | 2-D | 双精度标记矩阵 | 高 | 4 或 8 |
bwlabeln | N-D | 双精度标记矩阵 | 高 | 任意 |
bwconncomp | N-D | CC 结构 | 低 |
任意 |
Matlab 中 imregionalmax函数 和 bwconncomp函数的使用
imregionalmax函数
找出当前连通区域内元素大于或等于强度t的元素,将其置为1,,其他像素都设置为0。返回二值图像。
举例说明
三种用法如下:
BW = imregionalmax(I)
BW = imregionalmax(I,conn)
gpuarrayBW = imregionalmax(gpuarrayI,___)
-
BW = imregionalmax(I) 默认2维数据为8联通,3维数据为26联通。
假设A如下:A =
10 10 10 10 10 10 10 10 10 10 10 22 22 22 10 10 44 10 10 10 10 22 22 22 10 10 10 45 10 10 10 22 22 22 10 10 10 10 44 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 33 33 33 10 10 10 10 10 10 10 33 33 33 10 10 10 10 10 10 10 33 33 33 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
regmax = imregionalmax(A)
上述命令的结果为:
regmax =
10×10 logical array0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
若A(3,3) = 23,则相同命令结果为:
regmax =
10×10 logical array
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
若A(3,3) = 20,则相同命令结果为:
regmax =
10×10 logical array
0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0
0 1 0 1 0 0 0 1 0 0
0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- BW = imregionalmax(I,conn)
conn:指定函数中使用的连通度。 - gpuarrayBW = imregionalmax(gpuarrayI,___)
gpuarrayBW = imregionalmax(gpuarrayI,___) 在GPU上执行该操作,输入图像必须是一个gpuArray,函数返回一个gpuArray。需要支持 Parallel Computing Toolbox™ .
bwconncomp函数
找出二值图像中所有的连通区域。
举例说明
用法如下:
CC = bwconncomp(BW)
CC = bwconncomp(BW,conn)
-
BW = imregionalmax(I) 默认2维数据为8联通,3维数据为26联通。
假设S如下:
S =0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 0 0 1 1 1 1 0 0 0
- 1
- 2
- 3
- 4
- 5
D = bwconncomp(S);
上述命令的结果为:
D=1*1 struct
D.Connectivity 使用的连通度
D.ImageSize 图像大小
D.NumObjects 连通区域数
D.PixelIdxList 连通区域的索引
这里具体看看 D.PixelIdxList:
因为是默认的8联通,所以7,8,12,13和19,24为一个连通区域,若使用4连通,这里就是两个连通区域。