bwlabel() 函数

1. 函数含义:

MATLAB图像处理工具箱中的函数bwlabel是把四连通或八连通的区域连接起来,调用语法为:

[L, NUM] = bwlabel(BW, N)

其中,

  • BW 为输入二值化图像;
  • N 可取值为4或8表示连接四连通或八连通区域;
  • NUM 为找到的连通区域数目;
  • L 为输出图像矩阵,其元素值为整数,背景被标记为0,第一个连通区域被标记为1,第二个连通区域被标记为2,依此类推.所以你不明白的1,2,3即为第1,2,3个连通区域的标记

 

From: matlabbwlabel函数的含义

2. 示例代码:

提取图像中,排名前 3 的连通域,如果需要提取前 5 个连通域,更改两处的 3 为 15 即可。

 

% 提取二值化图前三个最大连通域
imLabel = bwlabel(HHCInv);      % 对连通区域进行标记
stats = regionprops(imLabel,'Area');
[b,index]=sort([stats.Area],'descend');
if length(stats)<3
    bw=imLabel;
else
    bw=ismember(imLabel,index(1:3));
end

From: matlab二值图保留最大的几个连通域

2.1 regionprops() 函数

Regionprops()
用途是 get the properties of region,即用来度量图像区域属性的函数。

2.1.1 语法如下:

STATS = regionprops(L,properties)


2.1.2 说明如下:

测量标注矩阵 L 中每一个标注区域的一系列属性,L 中不同的正整数元素对应不同的区域。

例如:L 中等于整数1的元素对应区域1;L 中等于整数2的元素对应区域2;以此类推。

  • 返回值 STATS 是一个长度为 max ⁡ ( L ( : ) ) \max(L(:))max(L(:)) 的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。
  • properties 可以是由逗号分割的字符串列表、饱含字符串的单元数组、单个字符串 ‘all’ 或者 ‘basic’。如果 properties 等于字符串 ‘all’,则所有下述字串列表中的度量数据都将被计算,如果 properties 没有指定或者等于 ‘basic’,则属性: ‘Area’, ‘Centroid’, ‘BoundingBox’ 将被计算。

下面的列表就是所有有效的属性字符串,它们大小写敏感并且可以缩写。

From: matlabRegionprops详解

2.2 sort() 函数

2.2.1 语法如下:

B = sort(A)
B = sort(A,dim)
B = sort(___,direction)
B = sort(___,Name,Value)
[B,I] = sort(___)

2.2.2 说明如下:

B = sort(A) 按升序对 A 的元素进行排序。

如果 A 是向量,则 sort(A) 对向量元素进行排序。

如果 A 是矩阵,则 sort(A) 会将 A 的列视为向量并对每列进行排序。

如果 A 是多维数组,则 sort(A) 会沿大小不等于 1 的第一个数组维度计算,并将这些元素视为向量。

B = sort(A,dim) 返回 A 沿维度 dim 的排序元素。例如,如果 A 是一个矩阵,则 sort(A,2) 对每行中的元素进行排序。

B = sort(___,direction) 使用上述任何语法返回按 direction 指定的顺序显示的 A 的有序元素。'ascend' 表示升序(默认值),'descend' 表示降序。

B = sort(___,Name,Value) 指定用于排序的其他参数。例如,sort(A,‘ComparisonMethod’,‘abs’) 按模对 A 的元素进行排序。

[B,I] = sort(___) 还会为上述任意语法返回一个索引向量的集合。I 的大小与 A 的大小相同,它描述了 A 的元素沿已排序的维度在 B 中的排列情况。例如,如果 A 是一个向量,则 B = A(I)

 

示例:

在这里插入图片描述

From: 对数组元素排序-MATLAB sort-Math Works 中国

2.3 ismember

2.3.1 语法如下:

Lia = ismember(A,B)
Lia = ismember(A,B,'rows')
[Lia,Locb] = ismember(___)
[Lia,Locb] = ismember(___,'legacy')

2.3.2 说明如下:

如果 A 中某位置的数据能在 B 中找到,Lia = ismember(A,B) 将返回一个在该位置包含逻辑值 1 (true) 的数组。数组中的其他位置将包含逻辑值 0 (false)。

如果 A 和 B 是表或时间表,ismember 将为每一行返回一个逻辑值。对于时间表,ismember 在确定相等性时会考虑行时间。输出 Lia 是一个列向量。

From: 判断数组元素是否为集数组成员-MATLAB ismember-Math Works 中国

3. 其他示例:

grayimg = rgb2gray(flag_yellow);            % 灰度图像
% grayimg 的色彩空间为 Gray

BWimg = grayimg; 
[width,height]=size(grayimg);

% 二值化
BWimg = im2bw(grayimg, 0.8);

%先闭运算 再开运算
se=strel('disk',5);
BWimg = imclose(BWimg,se);
BWimg = imopen(BWimg,se);

%分割出连通域内的图像
showImg = frame;
for i=1:width
    for j=1:height
        if(BWimg(i,j) == 0)
            showImg(i,j,:)= frame(i,j,:);
        else 
            showImg(i,j,:)= 0;
        end
    end
end

在这里插入图片描述
在这里插入图片描述

From: 图像分割+连通域统计与标注——MATLAB

4. 其他示例:

如果返回图像中连通域大小大于阈值的连通域,可用matlab自带函数:BW2 = bwareaopen(BW, P)

在这里插入图片描述
在这里插入图片描述

From: Matlab得到二值图像中最大连通区域