【发布时间】:2019-12-27 08:54:58
【问题描述】:
给定一个包含多边形掩码的矩阵(这里是一个小而简单的情况):
array([[0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0],
[0, 0, 1, 1, 1, 0, 0],
[0, 1, 1, 1, 1, 1, 0],
[0, 1, 1, 1, 1, 1, 0],
[0, 0, 1, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0]])
用skimage.segmentation.find_boundaries()提取轮廓,给出:
array([[0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0],
[0, 0, 1, 0, 1, 0, 0],
[0, 1, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 1, 0],
[0, 0, 1, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0]])
然后提取轮廓的[row,column](即[y,x])坐标,给出:
outline = array([[2,2],[1,2],[1,3],[2,4],[3,5],[4,5],[5,4],[5,3],[5,2],[4,1],[3,1]])
然后将这些坐标修剪为定义多边形(即顶点)的最小集合,给出:
vertices = array([[2,2],[1,2],[1,3],[3,5],[4,5],[5,4],[5,2],[4,1],[3,1]])
(对应于:)
array([[0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 1, 0],
[0, 1, 0, 0, 0, 1, 0],
[0, 0, 1, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0]])
在给定顶点坐标(上面的数组vertices)的情况下,有没有一种快速的方法使用numpy/scipy/skimage/etc来获取轮廓坐标(上面的数组outline)?
进一步,取回轮廓坐标后,有没有好的numpy/scipy/skimage方式取回原始多边形掩码中所有点的坐标?
【问题讨论】:
标签: python algorithm numpy scipy scikit-image