如何在 python 中对二值图像进行组件标记

How to do component labeling of a binary image in python

我正在尝试通过简单数组的轮廓跟踪应用组件标签作为示例。

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 表示空 space,1 表示形状。

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

我认为 skimage.measure.regionprops, skimage.measure.label, and skimage.measure.find_contours 的组合可以解决问题,但我一直无法找到任何我正在寻找的示例。

我花了几个小时试图理解文档并搜索以前的帖子,但现在我陷入了死胡同。 似乎与我的问题类似,尽管我希望能够标记形状内部的每个像素,而不仅仅是周长。

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

你只需要使用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)

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)