这两个函数可以用来处理图(一般是二值图)中出现的连通区域,我们来分别分析。
一.skimage.measure.label(input, background = None, return_num = False, connectivity = None)
功能:标记图中的连通区域
参数解释:input:输入二值图
background:指定北京元素像素值,默认为0
return_num:bool变量,True:返回(label,num)False:只返回label
connectivity:1:4邻接,计算上下左右4个方向 2:8邻接,计算周围8个方向,None默认取最高
返回值:
labels : 和input形状一样,但是数值是标记号,所以这是一个已经标记的图片
num : 标记的种类数,如果输出0则只有背景,如果输出n则有n个连通域
PS:什么叫做连通域,在二值图像中,如果两个像素点相邻且值相同(同为0或1),称这两个像素点在一个相互连通的区域内,这种关系存在传递性,我们用相同的值来标记同一个连通区域的所有像素。常见的邻接关系有2种:4邻接与8邻接。4邻接一共4个点,上下左右,8邻接的点包括周围8个,下图所示
例:
x=np.array([[1,0,0,0,0],[0,1,7,7,0],[0,0,1,1,9],[0,0,0,0,1]]) x '''Out[109]: array([[1, 0, 0, 0, 0], [0, 1, 7, 7, 0], [0, 0, 1, 1, 9], [0, 0, 0, 0, 1]])''' label(x,connectivity = 1, return_num=True) '''Out[110]: (array([[1, 0, 0, 0, 0], [0, 2, 3, 3, 0], [0, 0, 4, 4, 5], [0, 0, 0, 0, 6]]), 6)''' label(x,connectivity = 2, return_num=True) '''Out[111]: (array([[1, 0, 0, 0, 0], [0, 1, 2, 2, 0], [0, 0, 1, 1, 2], [0, 0, 0, 0, 1]]), 2)'''