skimage.measure.label和skimage.measure.regionprops()函数
参考链接:
https://blog.csdn.net/zz2230633069/article/details/85107971
连通域:
图像的连通域是指图像中具有相同像素值并且位置相邻的像素组成的区域,连通域分析是指在图像中寻找出彼此相互独立的连通域并标记出来
功能:实现连通区域标记
函数名:skimage.measure.label
函数调用形式:
skimage.measure.label(input, neighbors=None, background=None,return_num=False,connectivity= None)[source]**
参数:
input: 需要被标记的图片,通常是二值化图像
neighbors:这个参数被移除,被下面的connectivit替代
background:背景像素,只要等于这个像素值的原图像素都标记为0,即作为背景。
return_num: 是一个bool值,true的话返回一个元组(labels,num) False的话返回labels
connectivity: Maximum number of orthogonal hops to consider a pixel/voxel as a neighbor
connectivity根据输入图像的维度进行选择,如果输入图像是个二维图像,connectivity的选择范围为{1,2},如果为None,默认是取最高维度即2,当connectivity=1时代表4连通,当connectivity=2的时候代表8连通
returns: labels:和input形状一样,但是数值是标记号,是原输入图像的标记(labels:0为背景,不同连通域用不同的数字标记:1,2,3,4... ...)
num:标记的种类数(如果输出0则只有背景,如果输出2则有两个连通域,后面以此类推)
example:
input是二值图像
首先确定背景像素,全部标记为0,如果没有背景像素,则全部标记成连通域。例子中最后一个background=-1,则原图1和0像素全部标记成连通域1和2,不同元素的区域不是同一个连通域。
其余非背景像素根据connectivity的值(4连通还是8连通)进行 “标记连通域” 操作,同一个连通域像素是同一个值,不同连通域值不一样。分别依次用0(背景),1,2,3......等整数标记连通域。
功能:获取连通域对象对每个连通域进行属性获取和操作,比如计算面积、外接矩形、凸包面积等。
skimage.measure.regionprops函数
regions=skimage.measure.regionprop(label_image, intensity_image=None,cache=True,coordinates=None, *, extra_properties=None) :
测量标记连通域图像的属性
input参数: label_image: 标记过的图像(ndarray类型)
intensity_image:强度与标记图像大小相同的图像(可选,默认None)
cache:bool可选确定是否缓存计算的属性,缓存属性计算速度快,而内存消耗增加
coordinates:
extra_properties:
output:输出可访问的属性
area: 区域的像素数
bbox: bounding box 的坐标
bbox_area: number of pixels of bounding box面积
centroid: array 质心坐标 (row,col)
convex_area: 凸包图像的像素
convex_image:等具体参考函数文档
输出的regions数据格式如下所示:6个连通域对象(标记为0的背景不包括)