gpt4 book ai didi

python - Skimage 多边形函数 : Why does the last vertice repeats in the polygon documentation example?

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:58 25 4
gpt4 key购买 nike

我试图了解多边形函数如何与文档的这个示例一起工作:

from skimage.draw import polygon
img = np.zeros((10, 10), dtype=np.uint8)
r = np.array([1, 2, 8, 1])
c = np.array([1, 7, 4, 1])
rr, cc = polygon(r, c)
img[rr, cc] = 1
img
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
[0, 0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)

我有几个问题:

r 变量有行坐标,c 变量有列坐标。据我所知,这意味着有 4 个这样的顶点:(1,1)、(2,7)、(8,4) 和 (1,1)。但是当我看到 img 数组时,它看起来像一个三角形......顶点总数不应该是 3 个而不是 4 个吗?

enter image description here

如果我删除最后一个顶点,并使用多边形函数,我会得到相同的结果。

r = np.array([1, 2, 8])
c = np.array([1, 7, 4])
rr, cc = polygon(r, c)

# rr2 = array([2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 7])
# cc2 = array([1, 2, 3, 4, 5, 6, 3, 4, 5, 6, 3, 4, 5, 3, 4, 5, 4, 4])

r2 = np.array([1, 2, 8, 1])
c2 = np.array([1, 7, 4, 1])
rr2, cc2 = polygon(r2, c2)

# rr2 = array([2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 7])
# cc2 = array([1, 2, 3, 4, 5, 6, 3, 4, 5, 6, 3, 4, 5, 3, 4, 5, 4, 4])

为什么我得到相同的结果?它忽略了最后一个顶点 (1,1)?

最佳答案

polygon 函数使用两个序列,即多边形顶点的行坐标和列坐标。您不需要在两个序列的末尾重复第一个顶点的坐标,因为它们被假定为定义闭合的多边形链。

查看源代码很有见地。引擎盖下skimage.draw.polygon电话 skimage._draw._polygon这又通过调用辅助函数 point_in_polygon 来确定像素是否位于多边形内。 .在此函数中有一个 for 循环,它遍历构成多边形的线段。从代码中可以清楚地看出,多边形链被强制闭合,因为第一条线段由索引 n_vert - 10 的顶点定义。因此 polygon([1, 2, 8, 1], [1, 7, 4, 1]) 返回位于由以下线段定义的多边形内的像素坐标:

(1, 1) - (1, 1)
(1, 1) - (2, 7)
(2, 7) - (8, 4)
(8, 4) - (1, 1)

polygon([1, 2, 8], [1, 7, 4]) 返回位于由以下线段定义的多边形内的像素的坐标

(8, 4) - (1, 1)
(1, 1) - (2, 7)
(2, 7) - (8, 4)

由于线段 (1, 1) - (1, 1) 的长度为零,因此两个多边形实际上是同一个多边形。这就是您获得相同结果的原因。

关于python - Skimage 多边形函数 : Why does the last vertice repeats in the polygon documentation example?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55114005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com