繁体   English   中英

在给定顶点坐标的情况下获取多边形轮廓和多边形蒙版的坐标

[英]Get coordinates of polygon outline and polygon mask given vertex coordinates

给定一个包含多边形蒙版的矩阵(此处为小而简单的情况):

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方法可以获取原始多边形蒙版中所有点的坐标?

给定多边形v1, v2中的2个顶点v1, v2我们可以使用线栅格化算法获得所有点p ,这些点p是从v1v2的线的一部分。 Bresenham的线条绘制算法是一个非常快速的算法 之后,您可以将此算法应用于多边形中的每对形容顶点。 虽然,我不能保证轮廓将恰好是原始多边形中的轮廓,因为栅格化算法会为给定的线提供最佳的一组点,而不是原始算法中的轮廓(考虑压缩误差)。

对于填充算法,它们称为多边形栅格化算法,但是由于不知道哪种方法最好/最快,因此在这里我不能为您提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM