[英]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
是从v1
到v2
的线的一部分。 Bresenham的线条绘制算法是一个非常快速的算法 。 之后,您可以将此算法应用于多边形中的每对形容顶点。 虽然,我不能保证轮廓将恰好是原始多边形中的轮廓,因为栅格化算法会为给定的线提供最佳的一组点,而不是原始算法中的轮廓(考虑压缩误差)。
对于填充算法,它们称为多边形栅格化算法,但是由于不知道哪种方法最好/最快,因此在这里我不能为您提供帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.