【问题标题】:Get coordinates of polygon outline and polygon mask given vertex coordinates获取给定顶点坐标的多边形轮廓和多边形掩码的坐标
【发布时间】: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


    【解决方案1】:

    给定多边形v1, v2 中的两个顶点,我们可以使用线光栅化算法获得所有点p,它们是从v1v2 的线的一部分。一个非常快速的算法是Bresenham's line drawing algorithm。在此之后,您可以将此算法应用于多边形中的每对形容词顶点。虽然,我不能保证轮廓将与原始多边形中的轮廓完全相同,因为光栅化算法将为给定线提供最佳点集,而不是原始算法中的点集(考虑到压缩错误)。

    对于填充算法,它们被称为多边形光栅化算法,但在这里我无法为您提供帮助,因为我不知道哪个是最好的/最快的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 2012-07-05
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      • 2017-11-04
      相关资源
      最近更新 更多