【问题标题】:Regionprops finds always one region - pythonRegionprops 总是找到一个区域 - python
【发布时间】:2020-08-15 20:34:00
【问题描述】:

我有一个包含多个 glob 的图像,当我使用 regionprops 来查找每个 glob 的质心和 BB 时。但是,它总是只为所有这些找到 1。 更具体地说,我得到左图的结果,但我想要右图的结果: regions_problem

我的代码:

            regions = regionprops(itk_label)

            fig, ax = plt.subplots()
            ax.imshow(itk_label, cmap=plt.cm.gray)

            i=0
            for props in regions:
                i=i+1
                print(str(i))
                y0, x0 = props.centroid

                ax.plot(x0, y0, '.r', markersize=5)

                minr, minc, maxr, maxc = props.bbox
                bx = (minc, maxc, maxc, minc, minc)
                by = (minr, minr, maxr, maxr, minr)
                ax.plot(bx, by, '-b', linewidth=1.0)

            ax.axis((0, 600, 600, 0))
            plt.show()     

谁能告诉我我做错了什么?

有趣的是,右边的图像也是我过去创造的。但是,我不能再这样做了。

【问题讨论】:

    标签: python image scikit-learn scikit-image


    【解决方案1】:

    您的要素可能具有相同的标签值。 regionprops 要求您的功能独立标记,即。 1, 2, 3, ...。这是一个例子:

    在这种情况下,两个特征都具有标签值1,因此它们被视为一个对象进行测量:

    import numpy as np
    from skimage import measure
    from matplotlib import pyplot as plt
    
    im = np.zeros((600, 600), dtype=int)
    
    im[350:400, 350:400] = 1
    im[510:530, 200:240] = 1
    
    np.unique(im)
    >>> array([0, 1])
    
    plt.matshow(im)
    
    regions = measure.regionprops(im)
    for r in regions:
        plt.plot(*r.centroid[::-1], marker='x', color='r')
    

    如果您使用measure.label 函数,您可以单独标记分离的特征,即。标签值1, 2:

    plt.matshow(im)
    
    labelled = measure.label(im)
    np.unique(labelled)
    >>> array([0, 1, 2])
    
    regions = measure.regionprops(labelled)
    for r in regions:
        plt.plot(*r.centroid[::-1], marker='x', color='r')
    

    这会给你想要的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 2022-10-01
      • 2012-01-09
      • 1970-01-01
      • 2018-05-08
      相关资源
      最近更新 更多