如何在 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)
我正在尝试通过简单数组的轮廓跟踪应用组件标签作为示例。
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)