精华内容
下载资源
问答
  • 这两个函数可以用来处理图(一般是二值图)中出现的连通区域,我们来分别分析。 一.skimage.measure.label(input,background= None,return_num= False,connectivity= ... return_num:bool变量,True:返回(label...

    这两个函数可以用来处理图(一般是二值图)中出现的连通区域,我们来分别分析。

    一.skimage.measure.label(inputbackground = 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)'''
    

    二.skimage.measure.regionprops(label_image, intensity_image = None, cache = True)[source]

    参数解释:label_image:已经被标记好的输入图片
                      intensity_image:强度图,每个通道的像素值
                      cache:是否开启缓存,开启能加快计算速度
    返回值:area    (int)                             区域内像素点总数
                  bbox    (tuple)                        边界外接框(min_row, min_col, max_row, max_col)
                  centroid    (array)                  质心坐标
                  convex_area (int)                   凸包内像素点总数
                  convex_image    (ndarray)     和边界外接框同大小的凸包  
                  coords    (ndarray)                 区域内像素点坐标
                  Eccentricity     (float)              离心率
                  equivalent_diameter(float)     和区域面积相同的圆的直径
                  euler_number    (int)         区域欧拉数
                  extent     (float)                      区域面积和边界外接框面积的比率
                  filled_area    (int)                    区域和外接框之间填充的像素点总数 
                  perimeter     (float)                  区域周长
                  label    (int)                             区域标记

     PS:标注部分为常用部分,其中要注意返回的centroid,x,y坐标与图像中的x轴,y轴有所差异。

    展开全文
  • skimage.measure.label和skimage.measure.regionprops()

    万次阅读 多人点赞 2019-06-29 22:25:39
    skimage.measure.label()函数 对二值图像进行连通区域进行标记,它的返回值就是标记,并没有对二值图像进行改变 在二值图像中,如果两个像素点相邻且值相同(同为0或同为1),那么就认为这两个像素点在一个相互...

    原博客

    https://www.cnblogs.com/denny402/p/5166258.html

    skimage.measure.label()函数

    对二值图像进行连通区域进行标记,它的返回值就是标记,并没有对二值图像进行改变

    在二值图像中,如果两个像素点相邻且值相同(同为0或同为1),那么就认为这两个像素点在一个相互连通的区域内。而同一个连通区域的所有像素点,都用同一个数值来进行标记,这个过程就叫连通区域标记。在判断两个像素是否相邻时,我们通常采用4连通或8连通判断。在图像中,最小的单位是像素,每个像素周围有8个邻接像素,常见的邻接关系有2种:4邻接与8邻接。4邻接一共4个点,即上下左右,如下左图所示。8邻接的点一共有8个,包括了对角线位置的点,如下右图所示。

    在skimage包中,我们采用measure子模块下的label()函数来实现连通区域标记。

    函数格式:

    skimage.measure.label(image,connectivity=None)

    参数中的image表示需要处理的二值图像,connectivity表示连接的模式,1代表4邻接,2代表8邻接。

    输出一个标记数组(labels), 从0开始标记。

    #coding=utf-8
    import numpy as np
    import scipy.ndimage as ndi
    from skimage import measure,color
    import matplotlib.pyplot as plt
    
    #编写一个函数来生成原始二值图像
    def microstructure(l=256):
        n = 5
        x, y = np.ogrid[0:l, 0:l]  #生成网络
        mask = np.zeros((l, l))
        generator = np.random.RandomState(1)  #随机数种子
        points = l * generator.rand(2, n**2)
        mask[(points[0]).astype(np.int), (points[1]).astype(np.int)] = 1
        mask = ndi.gaussian_filter(mask, sigma=l/(4.*n)) #高斯滤波
        return mask > mask.mean()
    
    data = microstructure(l=128)*1 #生成测试图片
    
    labels=measure.label(data,connectivity=2)  #8连通区域标记
    dst=color.label2rgb(labels)  #根据不同的标记显示不同的颜色
    print('regions number:',labels.max()+1)  #显示连通区域块数(从0开始标记)
    
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4))
    ax1.imshow(data, plt.cm.gray, interpolation='nearest')
    ax1.axis('off')
    ax2.imshow(dst,interpolation='nearest')
    ax2.axis('off')
    
    fig.tight_layout()
    plt.show()

     

    skimage.measure.regionprops()函数

    如果想分别上面的的每一个连通区域进行操作,比如计算面积、外接矩形、凸包面积等,则需要调用measure子模块的regionprops()函数。该函数格式为:

    返回所有连通区块的属性列表,常用的属性列表如下表:

    属性名称类型描述
    areaint区域内像素点总数
    bboxtuple边界外接框(min_row, min_col, max_row, max_col)
    centroidarray  质心坐标
    convex_areaint凸包内像素点总数
    convex_imagendarray和边界外接框同大小的凸包  
    coordsndarray区域内像素点坐标
    Eccentricity float离心率
    equivalent_diameter float和区域面积相同的圆的直径
    euler_numberint  区域欧拉数
    extent float区域面积和边界外接框面积的比率
    filled_areaint区域和外接框之间填充的像素点总数
    perimeter float区域周长
    labelint区域标记

    代码

    #coding=utf-8
    import numpy as np
    import scipy.ndimage as ndi
    from skimage import measure,color
    import matplotlib.pyplot as plt
    
    #编写一个函数来生成原始二值图像
    def microstructure(l=256):
        n = 5
        x, y = np.ogrid[0:l, 0:l]  #生成网络
        mask = np.zeros((l, l))
        generator = np.random.RandomState(1)  #随机数种子
        points = l * generator.rand(2, n**2)
        mask[(points[0]).astype(np.int), (points[1]).astype(np.int)] = 1
        mask = ndi.gaussian_filter(mask, sigma=l/(4.*n)) #高斯滤波
        return mask > mask.mean()
    
    data = microstructure(l=128)*1 #生成测试图片
    
    labels = measure.label(data,connectivity=2)  #
    
    #筛选连通区域大于500的
    properties = measure.regionprops(labels)
    valid_label = set()
    for prop in properties:
        if prop.area > 500:
            valid_label.add(prop.label)
    current_bw = np.in1d(labels, list(valid_label)).reshape(labels.shape)
    
    
    dst = color.label2rgb(current_bw)  #根据不同的标记显示不同的颜色
    print('regions number:', current_bw.max()+1)  #显示连通区域块数(从0开始标记)
    
    fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(8, 4))
    ax1.imshow(data, plt.cm.gray, interpolation='nearest')
    ax1.axis('off')
    ax2.imshow(current_bw, plt.cm.gray, interpolation='nearest')
    ax2.axis('off')
    ax3.imshow(dst,interpolation='nearest')
    ax3.axis('off')
    
    fig.tight_layout()
    plt.show()

     

     

    skimage.segmentation.clear_border函数

    https://blog.csdn.net/qq_36401512/article/details/88252649

    clear_border(labels, buffer_size=0, bgval=0, in_place=False)主要作用是清除二值图像中边界的1值。例如

    >>> import numpy as np
    >>> from skimage.segmentation import clear_border
    >>> labels = np.array([[0, 0, 0, 0, 0, 0, 0, 1, 0],
    ...                    [0, 0, 0, 0, 1, 0, 0, 0, 0],
    ...                    [1, 0, 0, 1, 0, 1, 0, 0, 0],
    ...                    [0, 0, 1, 1, 1, 1, 1, 0, 0],
    ...                    [0, 1, 1, 1, 1, 1, 1, 1, 0],
    ...                    [0, 0, 0, 0, 0, 0, 0, 0, 0]])
    >>> clear_border(labels)
    array([[0, 0, 0, 0, 0, 0, 0, 0, 0],
           [0, 0, 0, 0, 1, 0, 0, 0, 0],
           [0, 0, 0, 1, 0, 1, 0, 0, 0],
           [0, 0, 1, 1, 1, 1, 1, 0, 0],
           [0, 1, 1, 1, 1, 1, 1, 1, 0],
           [0, 0, 0, 0, 0, 0, 0, 0, 0]])

     

    展开全文
  • python 的skimage库中的measure.label可用于标记不同连通域,从而方便图像分析 skimage.measure.label(label_image, background=None, return_num=False, connectivity=None) 源码如下: @deprecate_kwarg({"input...

    python 的skimage库中的measure.label可用于标记不同连通域,从而方便图像分析

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

    源码如下:

    @deprecate_kwarg({"input": "label_image"}, removed_version="1.0")
    def label(label_image, background=None, return_num=False, connectivity=None):
        r"""Label connected regions of an integer array.
        Two pixels are connected when they are neighbors and have the same value.
        In 2D, they can be neighbors either in a 1- or 2-connected sense.
        The value refers to the maximum number of orthogonal hops to consider a
        pixel/voxel a neighbor::
          1-connectivity     2-connectivity     diagonal connection close-up
               [ ]           [ ]  [ ]  [ ]             [ ]
                |               \  |  /                 |  <- hop 2
          [ ]--[x]--[ ]      [ ]--[x]--[ ]        [x]--[ ]
                |               /  |  \             hop 1
               [ ]           [ ]  [ ]  [ ]
        Parameters
        ----------
        label_image : ndarray of dtype int
            Image to label.
        background : int, optional
            Consider all pixels with this value as background pixels, and label
            them as 0. By default, 0-valued pixels are considered as background
            pixels.
        return_num : bool, optional
            Whether to return the number of assigned labels.
        connectivity : int, optional
            Maximum number of orthogonal hops to consider a pixel/voxel
            as a neighbor.
            Accepted values are ranging from  1 to input.ndim. If ``None``, a full
            connectivity of ``input.ndim`` is used.
        Returns
        -------
        labels : ndarray of dtype int
            Labeled array, where all connected regions are assigned the
            same integer value.
        num : int, optional
            Number of labels, which equals the maximum label index and is only
            returned if return_num is `True`.
        See Also
        --------
        regionprops
        regionprops_table
        References
        ----------
        .. [1] Christophe Fiorio and Jens Gustedt, "Two linear time Union-Find
               strategies for image processing", Theoretical Computer Science
               154 (1996), pp. 165-181.
        .. [2] Kensheng Wu, Ekow Otoo and Arie Shoshani, "Optimizing connected
               component labeling algorithms", Paper LBNL-56864, 2005,
               Lawrence Berkeley National Laboratory (University of California),
               http://repositories.cdlib.org/lbnl/LBNL-56864
        Examples
        --------
        >>> import numpy as np
        >>> x = np.eye(3).astype(int)
        >>> print(x)
        [[1 0 0]
         [0 1 0]
         [0 0 1]]
        >>> print(label(x, connectivity=1))
        [[1 0 0]
         [0 2 0]
         [0 0 3]]
        >>> print(label(x, connectivity=2))
        [[1 0 0]
         [0 1 0]
         [0 0 1]]
        >>> print(label(x, background=-1))
        [[1 2 2]
         [2 1 2]
         [2 2 1]]
        >>> x = np.array([[1, 0, 0],
        ...               [1, 1, 5],
        ...               [0, 0, 0]])
        >>> print(label(x))
        [[1 0 0]
         [1 1 2]
         [0 0 0]]
        """
        if label_image.dtype == bool:
            return _label_bool(label_image, background=background,
                               return_num=return_num, connectivity=connectivity)
        else:
            return clabel(label_image, background, return_num, connectivity)
    © 2021 GitHub, Inc.
    

    当两个像素相邻时,两个像素连接在一起并且具有相同的值。在2D模式下,它们可以是1或2连通的邻居。该值是指将像素视为邻居的最大正交跳数

    1-connectivity     2-connectivity     diagonal connection close-up
    
         [ ]           [ ]  [ ]  [ ]             [ ]
          |               \  |  /                 |  <- hop 2
    [ ]--[x]--[ ]      [ ]--[x]--[ ]        [x]--[ ]
          |               /  |  \             hop 1
         [ ]           [ ]  [ ]  [ ]
    

    示例:

    >>> import numpy as np
    >>> x = np.eye(3).astype(int)
    >>> print(x)
    [[1 0 0]
     [0 1 0]
     [0 0 1]]
    >>> print(label(x, connectivity=1))
    [[1 0 0]
     [0 2 0]
     [0 0 3]]
    >>> print(label(x, connectivity=2))
    [[1 0 0]
     [0 1 0]
     [0 0 1]]
    >>> print(label(x, background=-1))
    [[1 2 2]
     [2 1 2]
     [2 2 1]]
    >>> x = np.array([[1, 0, 0],
    ...               [1, 1, 5],
    ...               [0, 0, 0]])
    >>> print(label(x))
    [[1 0 0]
     [1 1 2]
     [0 0 0]]
    
    展开全文
  • skimage.measure.label函数

    万次阅读 2018-12-19 21:44:55
    skimage.measure.label(input, neighbors = None, background = None, return_num = False, connectivity = None)[source]** 参数介绍: Parameters:input : Image to label 需要被标记的图片,输入的数据结构不作...

    功能:实现连通区域标记

    函数调用形式:

    skimage.measure.label(input, neighbors = None, background = None, return_num = False, connectivity = None)[source]**

    参数介绍:

    Parameters:
    input : Image to label 需要被标记的图片,输入的数据结构不作要求
    neighbors : 这个参数将被移除,被下面的connectivity替代。可以忽略不看
    background : 选择背景像素,指定像素作为背景,全部相同像素标记为0
    return_num : 是一个bool值,如果为True的话返回值是一个元组(labelsnum );如果为False的话就只返回labels
    connectivity : Maximum number of orthogonal hops to consider a pixel/voxel as a neighbor. Accepted values are ranging from 1 to input.ndim. If None, a full connectivity of input.ndim is used. [int, optional]。如果input是一个二维的图片,那么connectivity的值范围选择{1,2},如果是None则默认是取最高的值,对于二维来说,当connectivity=1时代表4连通,当connectivity=2时代表8连通.
    Returns:
    labels : 和input形状一样,但是数值是标记号,所以这是一个已经标记的图片
    num : 标记的种类数,如果输出0则只有背景,如果输出2则有两个种类或者说是连通域

    举例:

    x=np.array([[1,0,0,0,0],[0,1,8,8,0],[0,0,1,1,8],[0,0,0,0,1]])
    x
    '''Out[109]: 
    array([[1, 0, 0, 0, 0],
           [0, 1, 8, 8, 0],
           [0, 0, 1, 1, 8],
           [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)'''
    label(x,return_num=True)
    '''Out[112]: 
    (array([[1, 0, 0, 0, 0],
            [0, 1, 2, 2, 0],
            [0, 0, 1, 1, 2],
            [0, 0, 0, 0, 1]]), 2)'''

     

    展开全文
  • measure.label寻找最大连通域

    千次阅读 2020-01-09 15:03:24
    网上看了几个帖子,自己试了...用skimage.measure.label寻找最大连通域 from skimage import measure # 输入二值图像mask def largeConnectComponent(bw_image): labeled_img, num = measure.label(bw_imag...
  • C++有没有类似python skimage库里measure.label()连通域标记的函数?
  • matlab调用代码 L1 = bwlabel(DL);...label_image = measure.label(x) 可以验证 k 与 label_image 的值完全相同 ——————————————————————2020.11.5更新———————————————————
  • python---之scipy.ndimage.measurements.label

    千次阅读 2018-08-15 20:35:55
    scipy.ndimage.measurements.label(input, structure=None, output=None) input:输入一个数组,数组中非0值被认为是目标区域,0值是背景区域 structure:可以用 scipy.ndimage.generate_binary_structure函数来规定...
  • measure.label操作后,会将二值化(全True或Flase)的图片值全部重新赋值,当做为一种标记,具体赋值方式是:比如二值化图像中,有8个单独的连通区域,那么第一个连通区域内所有像素点值变为1,第二个连通区域内所有...
  • measure.label此类报错意味着measure模块中没有label 这个错误的原因是skimage版本太低,需要pip升级一下 给一个通用方法都能奏效,指定清华的源解决 sudo pip install scikit-image -U -i ...
  • 鹅妹子的skimage.measure.regionprops

    千次阅读 2019-07-04 19:55:20
    参考:https://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.regionprops skimage的强大无需多言,但是木有想到厉害成这个亚子!简直是宝藏函数! 今天简单记录skimage.measure使用中遇到的...
  • skimage中measure方法

    千次阅读 2019-04-04 22:38:21
    from skimage.measure import label,regionprops regionprops方法与label方法使用更好。 可以标记出每个联通区域。 label方法将图像的每个联通区域使用不同的像素标记出来,regionprops计算每个联通区域的属性...
  • Measure的英文学习链接:http://scikit-image.org/docs/dev/api/skimage.measure.html 1、Measure中所有的函数功能做一个简单的介绍: skimage.measure.find_contours(array,level) 对于给定的...
  • 在训练神经网络做图像分类任务的时候,我们经常会用到旋转这一数据增强方式,而如果是回归任务,那么我们在旋转图片的同时,还需要对label(关键点的坐标)进行旋转。下面就介绍如何使用opencv对回归任务中的图片和...
  • label_img =measure.label(label) props = measure.regionprops(label_img)  for prop in props:  area_list.append(prop.area) id_max = np.argmax(area_list) res[label_img == id_max+1] = 0 7....
  • title: Skimage库使用 date: 2021-04-13 08:07:15 tags: 学习笔记 图像处理 abbrlink: 13 Skimage库使用 ...最近发现Skimage库挺好用的,可以和OpenCV搭配一起使用,让图像处理更加灵活...from skimage import measure.
  • 这里需要注意的是:measure.label函数获取的连通域背景是0,前景的连通域其实是从1开始计算,而measure.regionprops函数获取的连通域不包含背景,前景的连通域属性就是从0开始的。 下面举一个例子: 随便找...
  • label_image =measure.label(cleared) #连通区域标记 borders = np.logical_xor(bw, cleared) #异或 label_image[borders] = -1 image_label_overlay =color.label2rgb(label_image, image=image) #不同标记...
  • measure.lable返回的label和阈值图像有相同的大小,唯一的区别就是label存储的为阈值图像每一斑点对应的正整数。 然后在第5行初始化一个掩膜来存储大的斑点。 第7行开始循环遍历每个label中的正整数标签,如果标签为...
  • measureskimage.measure.approximate_polygon(coords,...)近似具有指定公差的多边形链。skimage.measure.block_reduce(image,block_size)通过对局部块应用函数来下采样图像。skimage.measure.compare_mse(im1,im2...
  • skimage.measure求最大连通区域

    千次阅读 2019-08-01 15:52:09
    from skimage import measure list0 = [0,0,0,0,2,0,0,3,0,0,0,0,3,3,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,3,3,0,0,0,0] testa0 = np.array(list0).reshape(6,6)+1 #0会被忽略掉,但是我这里会要使用,所以+1 ...
  • 出错原因 numpy版本太高 解决方法一:直接 pip install numpy==1.16.0 解决方法二:pycharm改设置 第三种方法 :
  • python的图像连通区域提取使用的函数是measure.label(img)做连通标记,然后具体信息的话通过measure.regionprops获取 import cv2 import time import numpy as np from skimage import measure image = cv.imread(...
  • 在skimage包中,使用measure子模块下的label函数即可实现连通区域标记。 参数input表示需要处理的二值图像,connectivity表示判定连通的模式(1代表4连通,2代表8连通),输出labels为一个从0开始的标记数组。 ...
  • Examples: >>> from skimage import data, util >>> from skimage.measure import label >>> img = util.img_as_ubyte(data.coins()) > 110 >>> label_img = label(img, connectivity = img.ndim) >>> props = ...
  • python skimage 连通性区域检测

    万次阅读 2017-12-08 17:31:22
    涉及到的函数为import matplotlib.pyplot as plt from skimage import measure, color labels = measure.label(img4[:,:,0], connectivity=2) dst = color.label2rgb(labels) plt.imshow(dst)
  • 图片连通区域检测 1.原图 2.连通区域结果 3.编码实现 #coding=utf-8 from skimage import measure, color import cv2 import numpy as np import matplotlib.pyplot as plt ... label_img, num = measure.label(i...
  • {label[0]:(0, -52, 18),label[1]:(-46, -68, 32), label[2]:(46, -68, 32),label[3]:(1, 50, -5)} I got 0 correlation matrix [[ 1. 0. -0. -0.] [ 0. 1. -0. -0.] [-0. -0. 1. -0.] [-0. -0. -0. 1.]] </li>...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,295
精华内容 3,318
关键字:

measure.label