prysm.geometry#
Functions used to generate various geometrical constructs.
- prysm.geometry.gaussian(sigma, x, y, center=(0, 0))#
Generate a gaussian mask with a given sigma.
- Parameters
sigma (float) – width parameter of the gaussian, expressed in the same units as x and y
x (numpy.ndarray) – x spatial coordinates, 2D or 1D
y (numpy.ndarray) – y spatial coordinates, 2D or 1D
center (tuple of float) – center of the gaussian, (x,y)
- Returns
mask with gaussian shape
- Return type
numpy.ndarray
- prysm.geometry.rectangle(width, x, y, height=None, angle=0)#
Generate a rectangular, with the “width” axis aligned to ‘x’.
- Parameters
width (float) – diameter of the rectangle, relative to the width of the array. width=1 fills the horizontal extent when angle=0
height (float) – diameter of the rectangle, relative to the height of the array. height=1 fills the vertical extent when angle=0. If None, inherited from width to make a square
angle (float) – angle
x (numpy.ndarray) – x spatial coordinates, 2D
y (numpy.ndarray) – y spatial coordinates, 2D
- Returns
array with the rectangle painted at 1 and the background at 0
- Return type
numpy.ndarray
- prysm.geometry.rotated_ellipse(width_major, width_minor, x, y, major_axis_angle=0)#
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
x (numpy.ndarray) – x spatial coordinates, 2D
y (numpy.ndarray) – y spatial coordinates, 2D
- 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.square(x, y)#
Create a square mask.
- Parameters
samples (int, optional) – number of samples in the square output array
x (numpy.ndarray) – x spatial coordinates, 2D
y (numpy.ndarray) – y spatial coordinates, 2D
- Returns
binary ndarray representation of the mask
- Return type
numpy.ndarray
- prysm.geometry.truecircle(radius, rho)#
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
rho (numpy.ndarray) – radial coordinate, 2D
- Returns
nonbinary ndarray representation of the mask
- Return type
numpy.ndarray
Notes
Based on a more general algorithm by Jim Fienup
- prysm.geometry.circle(radius, rho)#
Create a circular mask.
- Parameters
radius (float) – radius of the circle, same units as rho. The return is 1 inside the radius and 0 outside
rho (numpy.ndarray) – 2D array of radial coordinates
- Returns
binary ndarray representation of the mask
- Return type
numpy.ndarray
- prysm.geometry.regular_polygon(sides, radius, x, y, center=(0, 0), rotation=0)#
Generate a regular polygon mask with the given number of sides.
- Parameters
sides (int) – number of sides to the polygon
radius (float, optional) – radius of the regular polygon. For R=1, will fill the x and y extent
x (numpy.ndarray) – x spatial coordinates, 2D or 1D
y (numpy.ndarray) – y spatial coordinates, 2D or 1D
center (tuple of float) – center of the gaussian, (x,y)
rotation (float) – rotation of the polygon, degrees
- Returns
mask for regular polygon with radius equal to the array radius
- Return type
numpy.ndarray
- prysm.geometry.spider(vanes, width, x, y, rotation=0, center=(0, 0))#
Generate the mask for a spider.
- Parameters
vanes (int) – number of spider vanes
width (float) – width of the vanes in array units, i.e. a width=1/128 spider with arydiam=1 and samples=128 will be 1 pixel wide
x (numpy.ndarray) – x spatial coordinates, 2D or 1D
y (numpy.ndarray) – y spatial coordinates, 2D or 1D
rotation (float, optional) – rotational offset of the vanes, clockwise
center (tuple of float) – point from which the vanes emanate, (x,y)
- Returns
array, 0 inside the spider and 1 outside
- Return type
numpy.ndarray
- prysm.geometry.offset_circle(radius, x, y, center)#
Rasterize an offset circle.
- Parameters
radius (float) – radius of the circle, same units as x and y
x (numpy.ndarray) – array of x coordinates
y (numpy.ndarray) – array of y coordinates
center (tuple) – tuple of (x, y) centers
- Returns
ndarray containing the boolean mask
- Return type
numpy.ndarray