# prysm.geometry¶

Functions used to generate various geometrical constructs.

class prysm.geometry.MaskCache

Bases: object

get_mask(shape, samples, radius=1)

Get a mask with the given number of samples and shape.

Parameters
• shape (str) – string of a regular n-sided polygon, e.g. ‘square’, ‘hexagon’.

• samples (int) – number of samples, mask is (samples,samples) in shape

Returns

ndarray; ones inside the shape, zeros outside

Return type

numpy.ndarray

clear(*args)

Empty the cache.

prysm.geometry.gaussian(sigma=0.5, samples=128)

Generate a gaussian mask with a given sigma.

Parameters
• sigma (float) – width parameter of the gaussian, expressed in samples of the output array

• samples (int) – number of samples in square array

Returns

Return type

numpy.ndarray

prysm.geometry.rotated_ellipse(width_major, width_minor, major_axis_angle=0, samples=128)

Generate a binary mask for an ellipse, centered at the origin.

The major axis will notionally extend to the limits of the array, but this will not be the case for rotated cases.

Parameters
• width_major (float) – width of the ellipse in its major axis

• width_minor (float) – width of the ellipse in its minor axis

• major_axis_angle (float) – angle of the major axis w.r.t. the x axis, degrees

• samples (int) – number of samples

Returns

An ndarray of shape (samples,samples) of value 0 outside the ellipse and value 1 inside the ellipse

Return type

numpy.ndarray

Notes

The formula applied is:

((x-h)cos(A)+(y-k)sin(A))^2 ((x-h)sin(A)+(y-k)cos(A))^2

______________________________ + ______________________________ 1

a^2 b^2

where x and y are the x and y dimensions, A is the rotation angle of the major axis, h and k are the centers of the the ellipse, and a and b are the major and minor axis widths. In this implementation, h=k=0 and the formula simplifies to:

(x*cos(A)+y*sin(A))^2 (x*sin(A)+y*cos(A))^2

______________________________ + ______________________________ 1

a^2 b^2

Raises

ValueError – if minor axis width is larger than major axis width

prysm.geometry.triangle(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.square(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.pentagon(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.hexagon(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.heptagon(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.octagon(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.nonagon(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.decagon(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.hendecagon(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.dodecagon(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.trisdecagon(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.truecircle(samples=128, radius=1)

Create a “true” circular mask with anti-aliasing.

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

nonbinary ndarray representation of the mask

Return type

numpy.ndarray

Notes

Based on a more general algorithm by Jim Fienup

prysm.geometry.circle(samples=128, radius=1)

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.inverted_circle(samples=128, radius=1)

Create an inverted circular mask (obscuration).

Parameters
• samples (int, optional) – number of samples in the square output array

• radius (float, optional) – radius of the shape in the square output array. radius=1 will fill the x

Returns

binary ndarray representation of the mask

Return type

numpy.ndarray

prysm.geometry.regular_polygon(sides, samples, radius=1)

Generate a regular polygon mask with the given number of sides and samples in the mask array.

Parameters
• sides (int) – number of sides to the polygon

• samples (int) – number of samples in the output polygon

• radius (float, optional) – radius of the regular polygon. For R=1, will fill the x and y extent

Returns

Return type

numpy.ndarray

prysm.geometry.generate_mask(vertices, num_samples=128)

Create a filled convex polygon mask based on the given vertices.

Parameters
• vertices (iterable) – ensemble of vertice (x,y) coordinates, in array units

• num_samples (int) – number of points in the output array along each dimension

Returns

Return type

numpy.ndarray

prysm.geometry.generate_vertices(sides, radius=1)

Generate a list of vertices for a convex regular polygon with the given number of sides and radius.

Parameters
• sides (int) – number of sides to the polygon