skimage.draw#

skimage.draw.bezier_curve

生成贝塞尔曲线坐标。

skimage.draw.circle_perimeter

生成圆周的坐标。

skimage.draw.circle_perimeter_aa

生成抗锯齿圆周坐标。

skimage.draw.disk

生成圆内像素的坐标。

skimage.draw.ellipse

生成椭圆内像素的坐标。

skimage.draw.ellipse_perimeter

生成椭圆周长坐标。

skimage.draw.ellipsoid

在具有指定 间距 的网格上生成与网格维度对齐的半长轴的椭球体。

skimage.draw.ellipsoid_stats

计算与指定 间距 的网格维度对齐的椭球体的解析表面积和体积。

skimage.draw.line

生成线条的像素坐标。

skimage.draw.line_aa

生成抗锯齿线条的像素坐标。

skimage.draw.line_nd

在n维空间中绘制一条单像素宽的线。

skimage.draw.polygon

生成多边形内部像素的坐标。

skimage.draw.polygon2mask

从多边形创建一个二进制掩码。

skimage.draw.polygon_perimeter

生成多边形周长坐标。

skimage.draw.random_shapes

生成带有随机形状的图像,并用边界框进行标注。

skimage.draw.rectangle

生成矩形内像素的坐标。

skimage.draw.rectangle_perimeter

生成一个矩形周围精确的像素坐标。

skimage.draw.set_color

在图像中给定坐标处设置像素颜色。


skimage.draw.bezier_curve(r0, c0, r1, c1, r2, c2, weight, shape=None)[源代码][源代码]#

生成贝塞尔曲线坐标。

参数:
r0, c0整数

第一个控制点的坐标。

r1, c1整数

中间控制点的坐标。

r2, c2整数

最后一个控制点的坐标。

重量

中间控制点权重,它描述了线条的张力。

形状tuple, 可选

用于确定输出像素坐标最大范围的图像形状。这对于超出图像大小的曲线非常有用。如果为 None,则使用曲线的完整范围。

返回:
rr, cc(N,) 整数 ndarray

属于贝塞尔曲线的像素索引。可以直接用于索引数组,例如 img[rr, cc] = 1

注释

该算法是参考文献 [1] 中提出的有理二次算法。

参考文献

[1]

曲线绘制的光栅化算法,A. Zingl, 2012 http://members.chello.at/easyfilter/Bresenham.pdf

示例

>>> import numpy as np
>>> from skimage.draw import bezier_curve
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> rr, cc = bezier_curve(1, 5, 5, -2, 8, 8, 2)
>>> img[rr, cc] = 1
>>> img
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
       [0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
       [0, 0, 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, 1, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 1, 1, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)

形状

Shapes

skimage.draw.circle_perimeter(r, c, radius, method='bresenham', shape=None)[源代码][源代码]#

生成圆周的坐标。

参数:
r, c整数

圆心的坐标。

半径整数

圆的半径。

方法{‘bresenham’, ‘andres’}, 可选

bresenham : Bresenham 方法 (默认) andres : Andres 方法

形状tuple, 可选

用于确定输出像素坐标最大范围的图像形状。这对于超出图像大小的圆圈非常有用。如果为 None,则使用圆圈的完整范围。长度必须至少为 2。只有前两个值用于确定输入图像的范围。

返回:
rr, cc(N,) 整数 ndarray

Bresenham 和 Andres 的方法:属于圆周的像素索引。可以直接用于索引数组,例如 img[rr, cc] = 1

注释

Andres 方法的优点是同心圆可以创建一个圆盘,而 Bresenham 方法可以创建孔洞。当 Andres 圆旋转时,扭曲也更少。Bresenham 方法也被称为中点圆算法。抗锯齿圆生成器可以通过 circle_perimeter_aa 获得。

参考文献

[1]

J.E. Bresenham, “计算机控制数字绘图仪的算法”, IBM Systems journal, 4 (1965) 25-30.

[2]

E. Andres, “Discrete circles, rings and spheres”, Computers & Graphics, 18 (1994) 695-706.

示例

>>> from skimage.draw import circle_perimeter
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> rr, cc = circle_perimeter(4, 4, 3)
>>> img[rr, cc] = 1
>>> img
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 1, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 1, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 1, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 1, 0, 0],
       [0, 0, 1, 0, 0, 0, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 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]], dtype=uint8)

形状

Shapes

圆形和椭圆形Hough变换

Circular and Elliptical Hough Transforms

skimage.draw.circle_perimeter_aa(r, c, radius, shape=None)[源代码][源代码]#

生成抗锯齿圆周坐标。

参数:
r, c整数

圆心的坐标。

半径整数

圆的半径。

形状tuple, 可选

用于确定输出像素坐标最大范围的图像形状。这对于超出图像大小的圆圈非常有用。如果为 None,则使用圆圈的完整范围。长度必须至少为 2。只有前两个值用于确定输入图像的范围。

返回:
rr, cc, val(N,) ndarray (int, int, float)

像素的索引 (rr, cc) 和强度值 (val)。img[rr, cc] = val

注释

吴氏方法绘制抗锯齿圆。此实现不使用查找表优化。

使用 draw.set_color 函数将 circle_perimeter_aa 的结果应用于彩色图像。

参考文献

[1]

X. Wu, “An efficient antialiasing technique”, In ACM SIGGRAPH Computer Graphics, 25 (1991) 143-152.

示例

>>> from skimage.draw import circle_perimeter_aa
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> rr, cc, val = circle_perimeter_aa(4, 4, 3)
>>> img[rr, cc] = val * 255
>>> img
array([[  0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [  0,   0,  60, 211, 255, 211,  60,   0,   0,   0],
       [  0,  60, 194,  43,   0,  43, 194,  60,   0,   0],
       [  0, 211,  43,   0,   0,   0,  43, 211,   0,   0],
       [  0, 255,   0,   0,   0,   0,   0, 255,   0,   0],
       [  0, 211,  43,   0,   0,   0,  43, 211,   0,   0],
       [  0,  60, 194,  43,   0,  43, 194,  60,   0,   0],
       [  0,   0,  60, 211, 255, 211,  60,   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)
>>> from skimage import data, draw
>>> image = data.chelsea()
>>> rr, cc, val = draw.circle_perimeter_aa(r=100, c=100, radius=75)
>>> draw.set_color(image, (rr, cc), [1, 0, 0], alpha=val)

形状

Shapes

skimage.draw.disk(center, radius, *, shape=None)[源代码][源代码]#

生成圆内像素的坐标。

参数:
中心元组

磁盘的中心坐标。

半径

圆盘的半径。

形状tuple, 可选

图像形状作为大小为2的元组。确定输出像素坐标的最大范围。这对于超出图像大小的圆盘很有用。如果为None,则使用圆盘的完整范围。形状可能导致负坐标和环绕行为。

返回:
rr, ccint 的 ndarray

磁盘的像素坐标。可以直接用于索引数组,例如 img[rr, cc] = 1

示例

>>> import numpy as np
>>> from skimage.draw import disk
>>> shape = (4, 4)
>>> img = np.zeros(shape, dtype=np.uint8)
>>> rr, cc = disk((0, 0), 2, shape=shape)
>>> img[rr, cc] = 1
>>> img
array([[1, 1, 0, 0],
       [1, 1, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]], dtype=uint8)
>>> img = np.zeros(shape, dtype=np.uint8)
>>> # Negative coordinates in rr and cc perform a wraparound
>>> rr, cc = disk((0, 0), 2, shape=None)
>>> img[rr, cc] = 1
>>> img
array([[1, 1, 0, 1],
       [1, 1, 0, 1],
       [0, 0, 0, 0],
       [1, 1, 0, 1]], dtype=uint8)
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> rr, cc = disk((4, 4), 5)
>>> img[rr, cc] = 1
>>> img
array([[0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 1, 1, 1, 1, 1, 1, 1, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)

形状

Shapes

形状索引

Shape Index

skimage.draw.ellipse(r, c, r_radius, c_radius, shape=None, rotation=0.0)[源代码][源代码]#

生成椭圆内像素的坐标。

参数:
r, c

椭圆的中心坐标。

r_radius, c_radius

短半轴和长半轴。 (r/r_radius)**2 + (c/c_radius)**2 = 1

形状tuple, 可选

用于确定输出像素坐标最大范围的图像形状。这对于超出图像大小的椭圆非常有用。默认情况下,使用椭圆的完整范围。长度必须至少为2。只有前两个值用于确定范围。

旋转float, 可选 (默认值 0.)

设置椭圆的旋转(rotation)在范围(-PI, PI)内逆时针方向,因此 PI/2 度意味着交换椭圆轴

返回:
rr, ccint 的 ndarray

椭圆的像素坐标。可以直接用于索引数组,例如 img[rr, cc] = 1

注释

椭圆方程:

((x * cos(alpha) + y * sin(alpha)) / x_radius) ** 2 +
((x * sin(alpha) - y * cos(alpha)) / y_radius) ** 2 = 1

注意,未指定 shapeellipse 的位置也可以有负值,因为在平面上这是正确的。另一方面,在图像之后使用这些椭圆位置可能会导致出现在图像的另一侧,因为 image[-1, -1] = image[end-1, end-1]

>>> rr, cc = ellipse(1, 2, 3, 6)
>>> img = np.zeros((6, 12), dtype=np.uint8)
>>> img[rr, cc] = 1
>>> img
array([[1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1]], dtype=uint8)

示例

>>> from skimage.draw import ellipse
>>> img = np.zeros((10, 12), dtype=np.uint8)
>>> rr, cc = ellipse(5, 6, 3, 5, rotation=np.deg2rad(30))
>>> 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, 0, 0],
       [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)

形状

Shapes

近似和细分多边形

Approximate and subdivide polygons

掩蔽归一化互相关

Masked Normalized Cross-Correlation

角点检测

Corner detection

测量区域属性

Measure region properties

skimage.draw.ellipse_perimeter(r, c, r_radius, c_radius, orientation=0, shape=None)[源代码][源代码]#

生成椭圆周长坐标。

参数:
r, c整数

椭圆的中心坐标。

r_radius, c_radius整数

短半轴和长半轴。 (r/r_radius)**2 + (c/c_radius)**2 = 1

方向双精度,可选

主轴方向以顺时针方向为弧度。

形状tuple, 可选

用于确定输出像素坐标最大范围的图像形状。这对于超出图像大小的椭圆非常有用。如果为 None,则使用椭圆的完整范围。长度必须至少为 2。只有前两个值用于确定输入图像的范围。

返回:
rr, cc(N,) 整数 ndarray

属于椭圆周长的像素索引。可以直接用于索引数组,例如 img[rr, cc] = 1

参考文献

[1]

曲线绘制的光栅化算法,A. Zingl, 2012 http://members.chello.at/easyfilter/Bresenham.pdf

示例

>>> from skimage.draw import ellipse_perimeter
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> rr, cc = ellipse_perimeter(5, 5, 3, 4)
>>> 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, 0, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 1],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 1],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 1],
       [0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
       [0, 0, 0, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)

注意,未指定 shapeellipse 的位置也可以有负值,因为在平面上这是正确的。另一方面,在图像之后使用这些椭圆位置可能会导致出现在图像的另一侧,因为 image[-1, -1] = image[end-1, end-1]

>>> rr, cc = ellipse_perimeter(2, 3, 4, 5)
>>> img = np.zeros((9, 12), dtype=np.uint8)
>>> img[rr, cc] = 1
>>> img
array([[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
       [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0],
       [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
       [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
       [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
       [0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]], dtype=uint8)

形状

Shapes

圆形和椭圆形Hough变换

Circular and Elliptical Hough Transforms

skimage.draw.ellipsoid(a, b, c, spacing=(1.0, 1.0, 1.0), levelset=False)[源代码][源代码]#

在具有指定 间距 的网格上生成与网格维度对齐的半长轴的椭球体。

参数:
a浮动

与x轴对齐的半长轴长度。

b浮动

与y轴对齐的半长轴长度。

c浮动

与z轴对齐的半长轴长度。

间距由三个浮点数组成的3元组

在三个空间维度中的间距。

levelset布尔

如果为 True,则返回此椭球体的级别集(关于零的有符号级别集,正数表示内部)为 np.float64。如果为 False,则返回上述级别集的二值化版本。

返回:
椭球体(M, N, P) 数组

给定 spacing 的正确大小的数组中居中的椭球体。除非 levelset=True,否则为布尔数据类型,在这种情况下,返回一个浮点数组,其中高于 0.0 的等值面表示椭球体。

Marching Cubes

Marching Cubes

skimage.draw.ellipsoid_stats(a, b, c)[源代码][源代码]#

计算与指定 间距 的网格维度对齐的椭球体的解析表面积和体积。

参数:
a浮动

与x轴对齐的半长轴长度。

b浮动

与y轴对齐的半长轴长度。

c浮动

与z轴对齐的半长轴长度。

返回:
vol浮动

椭球体的计算体积。

冲浪浮动

计算椭球体的表面积。


skimage.draw.line(r0, c0, r1, c1)[源代码][源代码]#

生成线条的像素坐标。

参数:
r0, c0整数

起始位置(行,列)。

r1, c1整数

结束位置(行,列)。

返回:
rr, cc(N,) 整数 ndarray

属于线条的像素索引。可以直接用于索引数组,例如 img[rr, cc] = 1

注释

抗锯齿线条生成器可通过 line_aa 使用。

示例

>>> from skimage.draw import line
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> rr, cc = line(1, 1, 8, 8)
>>> img[rr, cc] = 1
>>> img
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)

形状

Shapes

直线霍夫变换

Straight line Hough transform

skimage.draw.line_aa(r0, c0, r1, c1)[源代码][源代码]#

生成抗锯齿线条的像素坐标。

参数:
r0, c0整数

起始位置(行,列)。

r1, c1整数

结束位置(行,列)。

返回:
rr, cc, val(N,) ndarray (int, int, float)

像素的索引 (rr, cc) 和强度值 (val)。img[rr, cc] = val

参考文献

[1]

曲线绘制的光栅化算法,A. Zingl, 2012 http://members.chello.at/easyfilter/Bresenham.pdf

示例

>>> from skimage.draw import line_aa
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> rr, cc, val = line_aa(1, 1, 8, 8)
>>> img[rr, cc] = val * 255
>>> img
array([[  0,   0,   0,   0,   0,   0,   0,   0,   0,   0],
       [  0, 255,  74,   0,   0,   0,   0,   0,   0,   0],
       [  0,  74, 255,  74,   0,   0,   0,   0,   0,   0],
       [  0,   0,  74, 255,  74,   0,   0,   0,   0,   0],
       [  0,   0,   0,  74, 255,  74,   0,   0,   0,   0],
       [  0,   0,   0,   0,  74, 255,  74,   0,   0,   0],
       [  0,   0,   0,   0,   0,  74, 255,  74,   0,   0],
       [  0,   0,   0,   0,   0,   0,  74, 255,  74,   0],
       [  0,   0,   0,   0,   0,   0,   0,  74, 255,   0],
       [  0,   0,   0,   0,   0,   0,   0,   0,   0,   0]], dtype=uint8)

形状

Shapes

skimage.draw.line_nd(start, stop, *, endpoint=False, integer=True)[源代码][源代码]#

在n维空间中绘制一条单像素宽的线。

生成的线条将是 n 维连接的。也就是说,线条中的两个连续像素在 n 维中将是直接或对角邻居。

参数:
开始类数组, 形状 (N,)

线条的起始坐标。

停止类数组, 形状 (N,)

线条的终点坐标。

端点bool, 可选

是否在返回的行中包含端点。默认为 False,这样可以方便地绘制多点路径。

整数bool, 可选

是否将坐标四舍五入为整数。如果为 True(默认),返回的坐标可以直接用于数组索引。False 可以用于例如矢量绘图。

返回:
坐标数组的元组

线上的点的坐标。

示例

>>> lin = line_nd((1, 1), (5, 2.5), endpoint=False)
>>> lin
(array([1, 2, 3, 4]), array([1, 1, 2, 2]))
>>> im = np.zeros((6, 5), dtype=int)
>>> im[lin] = 1
>>> im
array([[0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0],
       [0, 1, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0]])
>>> line_nd([2, 1, 1], [5, 5, 2.5], endpoint=True)
(array([2, 3, 4, 4, 5]), array([1, 2, 3, 4, 5]), array([1, 1, 2, 2, 2]))

skimage.draw.polygon(r, c, shape=None)[源代码][源代码]#

生成多边形内部像素的坐标。

参数:
r(N,) 数组类

多边形顶点的行坐标。

c(N,) 数组类

多边形顶点的列坐标。

形状tuple, 可选

用于确定输出像素坐标最大范围的图像形状。这对于超出图像大小的多边形非常有用。如果为 None,则使用多边形的完整范围。长度必须至少为 2。只有前两个值用于确定输入图像的范围。

返回:
rr, ccint 的 ndarray

多边形的像素坐标。可以直接用于索引数组,例如 img[rr, cc] = 1

参见

polygon2mask

从多边形创建一个二进制掩码。

注释

此函数确保 rrcc 不包含负值。坐标小于 0 的多边形像素不会被绘制。

示例

>>> import skimage as ski
>>> r = np.array([1, 2, 8])
>>> c = np.array([1, 7, 4])
>>> rr, cc = ski.draw.polygon(r, c)
>>> img = np.zeros((10, 10), dtype=int)
>>> img[rr, cc] = 1
>>> img
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 0, 0, 0, 0],
       [0, 0, 0, 0, 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]])

如果定义了图像的 shape 并且 polygon 的顶点/点超出了这个坐标空间,则只会返回多边形像素的一部分(或者根本不返回)。通过偏移多边形的顶点可以移动多边形,并可能绘制多边形的任意子区域。

>>> offset = (2, -4)
>>> rr, cc = ski.draw.polygon(r - offset[0], c - offset[1], shape=img.shape)
>>> img = np.zeros((10, 10), dtype=int)
>>> img[rr, cc] = 1
>>> img
array([[0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
       [0, 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, 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, 0, 0, 0, 0, 0, 0]])

形状

Shapes

skimage.draw.polygon2mask(image_shape, polygon)[源代码][源代码]#

从多边形创建一个二进制掩码。

参数:
image_shape大小为2的元组

掩码的形状。

多边形(N, 2) 数组类

形状为 (N, 2) 的多边形坐标,其中 N 是点的数量。坐标为 (行, 列)。

返回:
掩码类型为 ‘bool’ 的 2-D ndarray

对应于输入多边形的二进制掩码。

参见

polygon

生成多边形内部像素的坐标。

注释

此函数不进行边界检查。多边形中超出 image_shape 定义的坐标空间的部分不会被绘制。

示例

>>> import skimage as ski
>>> image_shape = (10, 10)
>>> polygon = np.array([[1, 1], [2, 7], [8, 4]])
>>> mask = ski.draw.polygon2mask(image_shape, polygon)
>>> mask.astype(int)
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 1, 0, 0],
       [0, 0, 1, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 1, 1, 0, 0, 0, 0],
       [0, 0, 0, 0, 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]])

如果 polygon 的顶点/点位于由 image_shape 定义的坐标空间之外,则只有部分(或根本没有)多边形会被绘制在掩码中。

>>> offset = np.array([[2, -4]])
>>> ski.draw.polygon2mask(image_shape, polygon - offset).astype(int)
array([[0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
       [0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
       [0, 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, 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, 0, 0, 0, 0, 0, 0]])

skimage.draw.polygon_perimeter(r, c, shape=None, clip=False)[源代码][源代码]#

生成多边形周长坐标。

参数:
r(N,) ndarray

多边形顶点的行坐标。

c(N,) ndarray

多边形顶点的列坐标。

形状tuple, 可选

用于确定输出像素坐标最大范围的图像形状。这对于超出图像大小的多边形非常有用。如果为 None,则使用多边形的完整范围。长度必须至少为 2。只有前两个值用于确定输入图像的范围。

剪辑bool, 可选

是否将多边形裁剪到提供的形状。如果设置为True,绘制的图形将始终是一个闭合的多边形,所有边都将可见。

返回:
rr, ccint 的 ndarray

多边形的像素坐标。可以直接用于索引数组,例如 img[rr, cc] = 1

示例

>>> from skimage.draw import polygon_perimeter
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> rr, cc = polygon_perimeter([5, -1, 5, 10],
...                            [-1, 5, 11, 5],
...                            shape=img.shape, clip=True)
>>> img[rr, cc] = 1
>>> img
array([[0, 0, 0, 0, 1, 1, 1, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0, 1, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 1],
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 1],
       [0, 1, 1, 0, 0, 0, 0, 0, 0, 1],
       [0, 0, 0, 1, 0, 0, 0, 1, 1, 0],
       [0, 0, 0, 0, 1, 1, 1, 0, 0, 0]], dtype=uint8)

skimage.draw.random_shapes(image_shape, max_shapes, min_shapes=1, min_size=2, max_size=None, num_channels=3, shape=None, intensity_range=None, allow_overlap=False, num_trials=100, rng=None, *, channel_axis=-1)[源代码][源代码]#

生成带有随机形状的图像,并用边界框进行标注。

图像中填充了随机形状,这些形状具有随机大小、随机位置和随机颜色,可以重叠也可以不重叠。

形状具有随机的 (行, 列) 起始坐标和由 min_sizemax_size 限制的随机大小。可能会出现随机生成的形状完全不适合图像的情况。在这种情况下,算法会尝试使用新的起始坐标再次生成,尝试一定的次数。然而,这也意味着某些形状可能会被完全跳过。在这种情况下,此函数生成的形状数量将少于请求的数量。

参数:
image_shape元组

要生成的图像的行数和列数。

max_shapes整数

形状的最大数量以(尝试)适应形状。

min_shapesint, 可选

形状的最小数量以(尝试)适应形状。

min_sizeint, 可选

每个形状要适应图像的最小尺寸。

max_sizeint, 可选

每个形状拟合到图像中的最大尺寸。

num_channelsint, 可选

生成图像中的通道数。如果为1,则生成单色图像,否则生成具有多个通道的彩色图像。如果 multichannel 设置为 False,则忽略此参数。

形状{rectangle, circle, triangle, ellipse, None} str, 可选

要生成的形状的名称,或 None 以随机选择。

intensity_range{由uint8元组组成的元组, uint8元组}, 可选

要从中采样像素值的值范围。对于灰度图像,格式为 (min, max)。对于多通道图像,如果通道间的范围相同,则为 ((min, max),);如果不同,则为 ((min_0, max_0), … (min_N, max_N))。由于该函数仅支持生成 uint8 数组,因此最大范围为 (0, 255)。如果为 None,则每个通道设置为 (0, 254),保留强度 = 255 的颜色用于背景。

允许重叠bool, 可选

如果 True,允许形状重叠。

num_trialsint, 可选

在跳过形状之前尝试将其适配到图像中的频率。

rng : {numpy.random.Generator, int}, 可选toctree 是一个 reStructuredText 指令 ,这是一个非常多功能的标记。指令可以有参数、选项和内容。

伪随机数生成器。默认情况下,使用 PCG64 生成器(参见 numpy.random.default_rng())。如果 rng 是整数,则用于为生成器设定种子。

channel_axisint 或 None, 可选

如果为 None,则假定图像是灰度图像(单通道)。否则,此参数指示数组的哪个轴对应于通道。

Added in version 0.19: channel_axis 在 0.19 版本中被添加。

返回:
图像uint8 数组

带有拟合形状的图像。

标签列表

图像中每个形状的标签列表。每个标签是一个 (类别, ((r0, r1), (c0, c1))) 元组,指定形状的类别和边界框坐标。

示例

>>> import skimage.draw
>>> image, labels = skimage.draw.random_shapes((32, 32), max_shapes=3)
>>> image 
array([
   [[255, 255, 255],
    [255, 255, 255],
    [255, 255, 255],
    ...,
    [255, 255, 255],
    [255, 255, 255],
    [255, 255, 255]]], dtype=uint8)
>>> labels 
[('circle', ((22, 18), (25, 21))),
 ('triangle', ((5, 6), (13, 13)))]

随机形状

Random Shapes

skimage.draw.rectangle(start, end=None, extent=None, shape=None)[源代码][源代码]#

生成矩形内像素的坐标。

参数:
开始元组

矩形的原点,例如 ([plane,] row, column)

结束元组

矩形的端点 ([plane,] row, column)。对于一个2D矩阵,由矩形定义的切片是 [start:(end+1)]。必须指定 endextent 中的一个。

范围元组

绘制的矩形的范围(大小)。例如,([num_planes,] num_rows, num_cols)。必须指定 endextent 之一。负的 extent 是有效的,并且会导致矩形沿相反方向绘制。如果 extent 为负,则 start 点不包括在内。

形状tuple, 可选

用于确定输出坐标最大边界的图像形状。这对于裁剪超出图像大小的矩形非常有用。默认情况下,不进行裁剪。

返回:
坐标int 数组,形状 (Ndim, Npoints)

矩形中所有像素的坐标。

注释

此函数可以通过传递 startendextent 作为长度为 N 的元组,应用于 N 维图像。

示例

>>> import numpy as np
>>> from skimage.draw import rectangle
>>> img = np.zeros((5, 5), dtype=np.uint8)
>>> start = (1, 1)
>>> extent = (3, 3)
>>> rr, cc = rectangle(start, extent=extent, shape=img.shape)
>>> img[rr, cc] = 1
>>> img
array([[0, 0, 0, 0, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 0, 0, 0, 0]], dtype=uint8)
>>> img = np.zeros((5, 5), dtype=np.uint8)
>>> start = (0, 1)
>>> end = (3, 3)
>>> rr, cc = rectangle(start, end=end, shape=img.shape)
>>> img[rr, cc] = 1
>>> img
array([[0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 1, 1, 1, 0],
       [0, 0, 0, 0, 0]], dtype=uint8)
>>> import numpy as np
>>> from skimage.draw import rectangle
>>> img = np.zeros((6, 6), dtype=np.uint8)
>>> start = (3, 3)
>>>
>>> rr, cc = rectangle(start, extent=(2, 2))
>>> img[rr, cc] = 1
>>> rr, cc = rectangle(start, extent=(-2, 2))
>>> img[rr, cc] = 2
>>> rr, cc = rectangle(start, extent=(-2, -2))
>>> img[rr, cc] = 3
>>> rr, cc = rectangle(start, extent=(2, -2))
>>> img[rr, cc] = 4
>>> print(img)
[[0 0 0 0 0 0]
 [0 3 3 2 2 0]
 [0 3 3 2 2 0]
 [0 4 4 1 1 0]
 [0 4 4 1 1 0]
 [0 0 0 0 0 0]]

skimage.draw.rectangle_perimeter(start, end=None, extent=None, shape=None, clip=False)[源代码][源代码]#

生成一个矩形周围精确的像素坐标。

参数:
开始元组

内矩形的原点,例如,(行, 列)

结束元组

内矩形的终点 (行, 列)。对于一个二维矩阵,由内矩形定义的切片是 [开始:(结束+1)]。必须指定 endextent 中的一个。

范围元组

内矩形的范围(大小)。例如,(行数, 列数)。必须指定 endextent 之一。允许负范围。请参阅 rectangle 以更好地理解它们的行为。

形状tuple, 可选

用于确定输出坐标最大边界的图像形状。这对于裁剪超出图像大小的周长很有用。默认情况下,不进行裁剪。长度必须至少为2。只有前两个值用于确定输入图像的范围。

剪辑bool, 可选

是否将周长裁剪到提供的形状。如果设置为True,绘制的图形将始终是一个闭合的多边形,所有边都将可见。

返回:
坐标int 数组,形状 (2, Npoints)

矩形中所有像素的坐标。

示例

>>> import numpy as np
>>> from skimage.draw import rectangle_perimeter
>>> img = np.zeros((5, 6), dtype=np.uint8)
>>> start = (2, 3)
>>> end = (3, 4)
>>> rr, cc = rectangle_perimeter(start, end=end, shape=img.shape)
>>> img[rr, cc] = 1
>>> img
array([[0, 0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1, 1],
       [0, 0, 1, 0, 0, 1],
       [0, 0, 1, 0, 0, 1],
       [0, 0, 1, 1, 1, 1]], dtype=uint8)
>>> img = np.zeros((5, 5), dtype=np.uint8)
>>> r, c = rectangle_perimeter(start, (10, 10), shape=img.shape, clip=True)
>>> img[r, c] = 1
>>> img
array([[0, 0, 0, 0, 0],
       [0, 0, 1, 1, 1],
       [0, 0, 1, 0, 1],
       [0, 0, 1, 0, 1],
       [0, 0, 1, 1, 1]], dtype=uint8)

skimage.draw.set_color(image, coords, color, alpha=1)[源代码][源代码]#

在图像中给定坐标处设置像素颜色。

请注意,此函数会就地修改图像的颜色。超出图像形状的坐标将被忽略。

参数:
图像(M, N, C) ndarray

图像

坐标元组 ((K,) ndarray, (K,) ndarray)

要着色的像素的行和列坐标。

颜色(C,) ndarray

要分配给图像中坐标的颜色。

alpha标量或 (K,) ndarray

Alpha 值用于混合颜色与图像。0 表示透明,1 表示不透明。

示例

>>> from skimage.draw import line, set_color
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> rr, cc = line(1, 1, 20, 20)
>>> set_color(img, (rr, cc), 1)
>>> img
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 1]], dtype=uint8)