做网站卖酒网站内容页优化
【Matlab 图像】bwlabel 连通域及图像分割
- 1. 函数含义:
- 2. 示例代码:
- 2.1 regionprops() 函数
- 2.1.1 语法如下:
- 2.1.2 说明如下:
- 2.2 sort() 函数
- 2.2.1 语法如下:
- 2.2.2 说明如下:
- 2.3 ismember
- 2.3.1 语法如下:
- 2.3.2 说明如下:
- 3. 其他示例:
- 4. 其他示例:
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: matlab中bwlabel函数的含义
2. 示例代码:
提取图像中,排名前 3 的连通域,如果需要提取前 5 个连通域,更改两处的 3 为 15 即可。
% 提取二值化图前三个最大连通域
imLabel = bwlabel(HHCInv); % 对连通区域进行标记
stats = regionprops(imLabel,'Area');
[b,index]=sort([stats.Area],'descend');
if length(stats)<3bw=imLabel;
elsebw=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: matlab的Regionprops详解
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 的色彩空间为 GrayBWimg = 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:widthfor j=1:heightif(BWimg(i,j) == 0)showImg(i,j,:)= frame(i,j,:);else showImg(i,j,:)= 0;endend
end
From: 图像分割+连通域统计与标注——MATLAB
4. 其他示例:
如果返回图像中连通域大小大于阈值的连通域,可用matlab自带函数:BW2 = bwareaopen(BW, P)
From: Matlab得到二值图像中最大连通区域