prysm.detector#
Detector-related simulations.
- class prysm.detector.Detector(dark_current, read_noise, bias, fwc, conversion_gain, bits, exposure_time, prnu=None, dcnu=None)#
Bases:
object
Basic model of a detector, no fuss.
- expose(aerial_img, frames=1)#
Form an exposure of an aerial image.
- Parameters
aerial_img (numpy.ndarray) – aerial image, with units of e-/sec. Should include any QE as part of its Z scaling
frames (int) – number of images to expose, > 1 is functionally equivalent to calling with frames=1 in a loop, but the random values are all drawn at once which can much improve performance in GPU-based modeling.
- Returns
of shape (frames, *aerial_img.shape), if frames=1 the first dim is squeezed, and output shape is same as input shape. dtype=uint8 if nbits <= 8, else uint16 for <= 16, etc not scaled to fill containers, i.e. a 12-bit image will have peak DN of 4095 in a container that can reach 65535.
has units of DN.
- Return type
numpy.ndarray
- prysm.detector.olpf_ft(fx, fy, width_x, width_y)#
Analytic FT of an optical low-pass filter, two or four pole.
- Parameters
fx (numpy.ndarray) – x spatial frequency, in cycles per micron
fy (numpy.ndarray) – y spatial frequency, in cycles per micron
width_x (float) – x diameter of the pixel, in microns
width_y (float) – y diameter of the pixel, in microns
- Returns
FT of the OLPF
- Return type
numpy.ndarray
- prysm.detector.pixel_ft(fx, fy, width_x, width_y)#
Analytic FT of a rectangular pixel aperture.
- Parameters
fx (numpy.ndarray) – x spatial frequency, in cycles per micron
fy (numpy.ndarray) – y spatial frequency, in cycles per micron
width_x (float) – x diameter of the pixel, in microns
width_y (float) – y diameter of the pixel, in microns
- Returns
FT of the pixel
- Return type
numpy.ndarray
- prysm.detector.pixel(x, y, width_x, width_y)#
Spatial representation of a pixel.
- Parameters
x (numpy.ndarray) – x coordinates
y (numpy.ndarray) – y coordinates
width_x (float) – x diameter of the pixel, in microns
width_y (float) – y diameter of the pixel, in microns
- Returns
spatial representation of the pixel
- Return type
numpy.ndarray
- prysm.detector.bindown(array, factor, mode='avg')#
Bin (resample) an array.
- Parameters
array (numpy.ndarray) – array of values
factor (int or sequence of int) – binning factor. If an integer, broadcast to each axis of array, else unique factors may be used for each axis.
mode (str, {'avg', 'sum'}) – sum or avg, how to adjust the output signal
- Returns
ndarray binned by given number of samples
- Return type
numpy.ndarray
Notes
For each axis of array, shape must be an integer multiple of factor.
array may be ND, a scalar factor will broadcast to all dimensions.
To bin an image cube e.g. of shape (3, m, n), use bindown(img, [1, factor, factor])
- Raises
ValueError – invalid mode
- prysm.detector.tile(array, factor, scaling='sum')#
Tile (repeat) an array by factor.
- Parameters
array (numpy.ndarray) – array of values
factor (int or sequence of int) – binning factor. If an integer, broadcast to each axis of array, else unique factors may be used for each axis.
scaling (str, {'avg', 'sum'}) – sum or avg, how to adjust the output signal
- Returns
ndarray binned by given number of samples
- Return type
numpy.ndarray
Notes
This function is the adjoint operation for bindown.
It works with ND arrays, with the same rules as bindown.
In 2D, it is equivalent to array.repeat(factor, axis=0).repeat(factor, axis=1) (and is more generally equivalent for higher dimensionality, but it runs about ndim times faster (twice as fast in 2D, 3x in 3D, etc).
The return may be a view into the argument and is mutated after calling tile at the user’s risk