我试图通过一个简单数组的轮廓跟踪来应用组件标签。
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.regionprops,skimage.measure.label和skimage.measure.find_contours的组合可以解决问题,但我找不到任何想要的示例离开。
我花了数小时试图理解文档并搜索以前的帖子,但现在已经陷入困境。 This post here似乎类似于我的问题,尽管我希望能够标记形状中的每个像素,而不是周长。
我应该做的任何帮助或解释都非常感谢。谢谢
答案 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)
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)