Skip to main content
`Ctrl`+`K`

# `shapes`: 2D shapes drawing

This module provides functions making masks on an image.

- `circle_fill()` function generates coordinates of a circle in an image.

- `draw_line()` function generates coordinates of a line in an image.

- `polygon_fill_mask()` function generates a mask from a set of points defining a polygon.

The `Polygon` class provides checking if a point is inside a polygon.

The whole module uses the (row, col) (i.e., (y, x))) convention for 2D coordinates.

class Polygon(vertices)

  Define a polygon that provides inside check and mask generation.

  Parameters:

    vertices (Nx2 array of floats of (row, col)) – corners of the polygon

  is_inside(self, row, col)

    Check if (row, col) is inside or outside the polygon

    Parameters:

      - row (float)

      - col (float)

    Returns:

      True if position is inside polygon, False otherwise

  make_mask(self, int height, int width)

    Create a mask array representing the filled polygon

    Parameters:

      - height (int) – Height of the mask array

      - width (int) – Width of the mask array

    Returns:

      2D array (height, width)

circle_fill(int crow, int ccol, float radius)

  Generates coordinate of image points lying in a disk.

  Parameters:

    - crow (int) – Row of the center of the disk

    - ccol (int) – Column of the center of the disk

    - radius (float) – Radius of the disk

  Returns:

    Array coordinates of points inside the disk (might be negative)

  Return type:

    2-tuple of numpy.ndarray (rows, cols)

draw_line(int row0, int col0, int row1, int col1, int width=1)

  Line includes both end points. Width is handled by drawing parallel lines, so junctions of lines belonging to different octant with width > 1 will not look nice.

  Using Bresenham line algorithm: Bresenham, J. E. Algorithm for computer control of a digital plotter. IBM Systems Journal. Vol 4 No 1. 1965. pp 25-30

  Parameters:

    - row0 (int) – Start point row

    - col0 (int) – Start point col

    - row1 (int) – End point row

    - col1 (int) – End point col

    - width (int) – Thickness of the line in pixels (default 1) Width must be at least 1.

  Returns:

    Array coordinates of points inside the line (might be negative)

  Return type:

    2-tuple of numpy.ndarray (rows, cols)

ellipse_fill(int crow, int ccol, float radius_r, float radius_c)

  Generates coordinate of image points lying in a ellipse.

  Parameters:

    - crow (int) – Row of the center of the ellipse

    - ccol (int) – Column of the center of the ellipse

    - radius_r (float) – Radius of the ellipse in the row

    - radius_c (float) – Radius of the ellipse in the column

  Returns:

    Array coordinates of points inside the ellipse (might be negative)

  Return type:

    2-tuple of numpy.ndarray (rows, cols)

polygon_fill_mask(vertices, shape)

  Return a mask of boolean, True for pixels inside a polygon.

  Parameters:

    - vertices (numpy.ndarray like container of dimension Nx2) – Strip of segments end points (row, column) or (y, x)

    - shape (2-tuple of int) – size of the mask as (height, width)

  Returns:

    Mask corresponding to the polygon

  Return type:

    numpy.ndarray of dimension shape