draw
¶skimage.draw.bezier_curve |
Generate Bezier curve coordinates. |
skimage.draw.circle (r, c, radius[, shape]) |
Generate coordinates of pixels within circle. |
skimage.draw.circle_perimeter |
Generate circle perimeter coordinates. |
skimage.draw.circle_perimeter_aa |
Generate anti-aliased circle perimeter coordinates. |
skimage.draw.ellipse (r, c, yradius, xradius) |
Generate coordinates of pixels within ellipse. |
skimage.draw.ellipse_perimeter |
Generate ellipse perimeter coordinates. |
skimage.draw.ellipsoid (a, b, c[, spacing, ...]) |
Generates ellipsoid with semimajor axes aligned with grid dimensions on grid with specified spacing. |
skimage.draw.ellipsoid_stats (a, b, c) |
Calculates analytical surface area and volume for ellipsoid with semimajor axes aligned with grid dimensions of specified spacing. |
skimage.draw.line |
Generate line pixel coordinates. |
skimage.draw.line_aa |
Generate anti-aliased line pixel coordinates. |
skimage.draw.polygon |
Generate coordinates of pixels within polygon. |
skimage.draw.polygon_perimeter (cr, cc[, ...]) |
Generate polygon perimeter coordinates. |
skimage.draw.set_color (img, coords, color[, ...]) |
Set pixel color in the image at the given coordinates. |
skimage.draw.
bezier_curve
()¶Generate Bezier curve coordinates.
Parameters: | y0, x0 : int
y1, x1 : int
y2, x2 : int
weight : double
shape : tuple, optional
|
---|---|
Returns: | rr, cc : (N,) ndarray of int
|
Notes
The algorithm is the rational quadratic algorithm presented in reference [R67].
References
[R67] | (1, 2) A Rasterizing Algorithm for Drawing Curves, A. Zingl, 2012 http://members.chello.at/easyfilter/Bresenham.pdf |
Examples
>>> 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)
skimage.draw.
circle
(r, c, radius, shape=None)[source]¶Generate coordinates of pixels within circle.
Parameters: | r, c : double
radius: double
shape : tuple, optional
|
---|---|
Returns: | rr, cc : ndarray of int
|
Notes
This function is a wrapper for skimage.draw.ellipse()
Examples
>>> from skimage.draw import circle
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> rr, cc = circle(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)
skimage.draw.
circle_perimeter
()¶Generate circle perimeter coordinates.
Parameters: | cy, cx : int
radius: int
method : {‘bresenham’, ‘andres’}, optional
shape : tuple, optional
|
---|---|
Returns: | rr, cc : (N,) ndarray of int
|
Notes
Andres method presents the advantage that concentric circles create a disc whereas Bresenham can make holes. There is also less distortions when Andres circles are rotated. Bresenham method is also known as midpoint circle algorithm. Anti-aliased circle generator is available with circle_perimeter_aa.
References
[R68] | J.E. Bresenham, “Algorithm for computer control of a digital plotter”, IBM Systems journal, 4 (1965) 25-30. |
[R69] | E. Andres, “Discrete circles, rings and spheres”, Computers & Graphics, 18 (1994) 695-706. |
Examples
>>> 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)
skimage.draw.
circle_perimeter_aa
()¶Generate anti-aliased circle perimeter coordinates.
Parameters: | cy, cx : int
radius: int
shape : tuple, optional
|
---|---|
Returns: | rr, cc, val : (N,) ndarray (int, int, float)
|
Notes
Wu’s method draws anti-aliased circle. This implementation doesn’t use lookup table optimization.
References
[R70] | X. Wu, “An efficient antialiasing technique”, In ACM SIGGRAPH Computer Graphics, 25 (1991) 143-152. |
Examples
>>> 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)
skimage.draw.
ellipse
(r, c, yradius, xradius, shape=None)[source]¶Generate coordinates of pixels within ellipse.
Parameters: | r, c : double
yradius, xradius : double
shape : tuple, optional
|
---|---|
Returns: | rr, cc : ndarray of int
|
Examples
>>> from skimage.draw import ellipse
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> rr, cc = ellipse(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, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 1, 1, 1, 0, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 0],
[0, 0, 1, 1, 1, 1, 1, 1, 1, 0],
[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, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
skimage.draw.
ellipse_perimeter
()¶Generate ellipse perimeter coordinates.
Parameters: | cy, cx : int
yradius, xradius : int
orientation : double, optional (default 0)
shape : tuple, optional
|
---|---|
Returns: | rr, cc : (N,) ndarray of int
|
References
[R71] | A Rasterizing Algorithm for Drawing Curves, A. Zingl, 2012 http://members.chello.at/easyfilter/Bresenham.pdf |
Examples
>>> 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)
skimage.draw.
ellipsoid
(a, b, c, spacing=(1.0, 1.0, 1.0), levelset=False)[source]¶Generates ellipsoid with semimajor axes aligned with grid dimensions on grid with specified spacing.
Parameters: | a : float
b : float
c : float
spacing : tuple of floats, length 3
levelset : bool
|
---|---|
Returns: | ellip : (N, M, P) array
|
skimage.draw.
ellipsoid_stats
(a, b, c)[source]¶Calculates analytical surface area and volume for ellipsoid with semimajor axes aligned with grid dimensions of specified spacing.
Parameters: | a : float
b : float
c : float
|
---|---|
Returns: | vol : float
surf : float
|
skimage.draw.
line
()¶Generate line pixel coordinates.
Parameters: | y0, x0 : int
y1, x1 : int
|
---|---|
Returns: | rr, cc : (N,) ndarray of int
|
See also
line_aa
Examples
>>> 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)
skimage.draw.
line_aa
()¶Generate anti-aliased line pixel coordinates.
Parameters: | y0, x0 : int
y1, x1 : int
|
---|---|
Returns: | rr, cc, val : (N,) ndarray (int, int, float)
|
References
[R72] | A Rasterizing Algorithm for Drawing Curves, A. Zingl, 2012 http://members.chello.at/easyfilter/Bresenham.pdf |
Examples
>>> 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, 56, 0, 0, 0, 0, 0, 0, 0],
[ 0, 56, 255, 56, 0, 0, 0, 0, 0, 0],
[ 0, 0, 56, 255, 56, 0, 0, 0, 0, 0],
[ 0, 0, 0, 56, 255, 56, 0, 0, 0, 0],
[ 0, 0, 0, 0, 56, 255, 56, 0, 0, 0],
[ 0, 0, 0, 0, 0, 56, 255, 56, 0, 0],
[ 0, 0, 0, 0, 0, 0, 56, 255, 56, 0],
[ 0, 0, 0, 0, 0, 0, 0, 56, 255, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=uint8)
skimage.draw.
polygon
()¶Generate coordinates of pixels within polygon.
Parameters: | y : (N,) ndarray
x : (N,) ndarray
shape : tuple, optional
|
---|---|
Returns: | rr, cc : ndarray of int
|
Examples
>>> from skimage.draw import polygon
>>> img = np.zeros((10, 10), dtype=np.uint8)
>>> x = np.array([1, 7, 4, 1])
>>> y = np.array([1, 2, 8, 1])
>>> rr, cc = polygon(y, x)
>>> 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)
skimage.draw.
polygon_perimeter
(cr, cc, shape=None, clip=False)[source]¶Generate polygon perimeter coordinates.
Parameters: | cr : (N,) ndarray
cc : (N,) ndarray
shape : tuple, optional
clip : bool, optional
|
---|---|
Returns: | pr, pc : ndarray of int
|
Examples
>>> 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.
set_color
(img, coords, color, alpha=1)[source]¶Set pixel color in the image at the given coordinates.
Coordinates that exceed the shape of the image will be ignored.
Parameters: | img : (M, N, D) ndarray
coords : tuple of ((P,) ndarray, (P,) ndarray)
color : (D,) ndarray
alpha : scalar or (N,) ndarray
|
---|---|
Returns: | img : (M, N, D) ndarray
|
Examples
>>> 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)