MATLAB--数字图像处理 bwlabel()函数

时间:2023-01-12 15:00:48


bwlabel()

用处
一般用在图像区域的分割,比如人脸区域与其他肤色区域分割开

用法
L = bwlabel(BW,n)

返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2…num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8。

8连通:是说一个像素,如果和其他像素在上、下、左、右、左上角、左下角、右上角或右下角连接着,则认为他们是联通的;

4连通是指,如果像素的位置在其他像素相邻的上、下、左或右,则认为他们是连接着的,连通的,在左上角、左下角、右上角或右下角连接,则不认为他们连通。

注意:在8连通中,只有一个像素的上、下、左、右、左上角、左下角、右上角、右下角其中一个位置有像素,则认为它们是连通的,属于一块区域。满足其中一个位置即可,比如只有左边有像素,这样也是算连通的。同理,4连通也是,满足上、下、左、右其中一个位置有像素即可

[L,num] = bwlabel(BW,n)

num返回的就是BW中连通区域的个数,可以理解成一幅图像中可以分成几块连通区域。

举例说明

MATLAB代码

a=[1,1,1,0,0,0,1,1;
1,1,1,0,0,0,1,0;
1,1,1,0,0,0,0,0;
0,0,0,1,0,0,1,0;
0,0,0,0,0,0,1,0;]
t_1=bwlabel(a,4)%4连通
t_2=bwlabel(a,8)%8连通

结果

a =
%原矩阵
1 1 1 0 0 0 1 1
1 1 1 0 0 0 1 0
1 1 1 0 0 0 0 0
0 0 0 1 0 0 1 0
0 0 0 0 0 0 1 0


t_1 =
%4连通
1 1 1 0 0 0 3 3
1 1 1 0 0 0 3 0
1 1 1 0 0 0 0 0
0 0 0 2 0 0 4 0
0 0 0 0 0 0 4 0


t_2 =
%8连通
1 1 1 0 0 0 2 2
1 1 1 0 0 0 2 0
1 1 1 0 0 0 0 0
0 0 0 1 0 0 3 0
0 0 0 0 0 0 3 0

解释
上面矩阵a若用4连通分,则可以分成4个区域,若用8连通分,则可以分成3个区域。
结果中的数字代表的是区域的序号。