首页 > 解决方案 > Regionprops 总是找到一个区域 - python

问题描述

我有一个包含多个 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()     

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

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

标签: pythonimagescikit-learnscikit-image

解决方案


您的要素可能具有相同的标签值。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')

这会给你你想要的结果。

贴上标签


推荐阅读