skimage.measure.label
image
本文字数:538 字 | 阅读时长 ≈ 2 min

skimage.measure.label

image
本文字数:538 字 | 阅读时长 ≈ 2 min

skimage.measure.label(input, connectivity=None, return_num=False)

measure.label 函数主要用来寻找图片中的连通区域,并对其进行标记

返回

import numpy as np
from skimage import measure


x = np.array([[1,0,0,0,0],
              [0,1,8,8,0],
              [0,0,1,1,8],
              [0,0,0,0,1]])
y1, n1 = measure.label(x, connectivity=1, return_num=True)
y2, n2 = measure.label(x, connectivity=2, return_num=True)
'''
y1
[[1 0 0 0 0]
 [0 2 3 3 0]
 [0 0 4 4 5]
 [0 0 0 0 6]]
n1: 6

y2
[[1 0 0 0 0]
 [0 1 2 2 0]
 [0 0 1 1 2]
 [0 0 0 0 1]]
n2: 2
'''

对于 x 中的 1 和 8,本身就不属于同一类别,所以分开处理
对于 1

对于 8

skimage.measure.regionprops

上面的 label 函数一般与 regionprops 一起使用,此函数能提供每一个连通区域的属性列表,包括 area,label 等,下面通过例子来描述一下

properties = measure.regionprops(y2)  # 返回连通区域的属性
valid_label = set()
for prop in properties:
    if prop.area >= 1:  # 连通区域的所有像素和
        valid_label.add(prop.label)  # 连通区域的label


# 找到连通区域后,我们将不同的区域分别编码mask并输出
valid_label = np.array(list(valid_label))
one_hot_mask = (y2[None,:,:]==valid_label[:,None,None])
region_num = one_hot_mask.shape[0]
for i in range(region_num):
    print(one_hot_mask[i].astype(np.int8))

'''
[[1 0 0 0 0]
 [0 1 0 0 0]
 [0 0 1 1 0]
 [0 0 0 0 1]]

[[0 0 0 0 0]
 [0 0 1 1 0]
 [0 0 0 0 1]
 [0 0 0 0 0]]
'''

如上所示,对于 y2,他一共有两个连通域,我们分别对其输出,得到了每个区域的 mask

4月 06, 2025
3月 10, 2025
12月 31, 2024