如何在python

时间:2019-04-14 20:53:44

标签: python scikit-image

我试图通过一个简单数组的轮廓跟踪来应用组件标签。

arr = np.array([
                [1,0,1,0,0,0,0],
                [1,1,1,0,0,0,0],
                [0,1,1,0,0,0,1],
                [0,1,1,0,0,1,1],
                [0,0,0,0,1,1,1],
                [0,0,0,1,1,1,1],
                [0,0,0,1,1,1,1],
                ])

这表示一个二进制图像,其中0是空白空间,而1是表示形状。

我想要得到的结果是分别标记这两个多边形,并通过matplotlib在图形中显示每个多边形的颜色不同(以证明多边形中的每个点都已标记到各自的区域。

我认为skimage.measure.regionpropsskimage.measure.labelskimage.measure.find_contours的组合可以解决问题,但我找不到任何想要的示例离开。

我花了数小时试图理解文档并搜索以前的帖子,但现在已经陷入困境。 This post here似乎类似于我的问题,尽管我希望能够标记形状中的每个像素,而不是周长。

我应该做的任何帮助或解释都非常感谢。谢谢

1 个答案:

答案 0 :(得分:2)

您只需要使用skimage.measure.label

import numpy as np
from skimage.measure import label
from skimage import io

arr = np.array([[1,0,1,0,0,0,0],
                [1,1,1,0,0,0,0],
                [0,1,1,0,0,0,1],
                [0,1,1,0,0,1,1],
                [0,0,0,0,1,1,1],
                [0,0,0,1,1,1,1],
                [0,0,0,1,1,1,1]])

img = label(arr)
io.imshow(img)

labeled

In [12]: img
Out[12]: 
array([[1, 0, 1, 0, 0, 0, 0],
       [1, 1, 1, 0, 0, 0, 0],
       [0, 1, 1, 0, 0, 0, 2],
       [0, 1, 1, 0, 0, 2, 2],
       [0, 0, 0, 0, 2, 2, 2],
       [0, 0, 0, 2, 2, 2, 2],
       [0, 0, 0, 2, 2, 2, 2]], dtype=int64)