Source code for fibsem.conversions

import numpy as np

from fibsem.mocktypes import MockAdornedImage, MockPixelSize


def _angle_to_matplotlib(theta):
    """Convert Autoscript rotation angle to matplotlib angle.

    Autoscript requires: Positive direction is clockwise, value in radians.
    Matplotlib requires: Positive direction is anti-clockwise, in degrees.

    Parameters
    ----------
    theta : in radians, positive direction is clockwise.

    Returns
    -------
    np.rad2deg(-theta) : in degrees, positive direction is anti-clockwise.
    """
    return np.rad2deg(-theta)


[docs]def convert_to_adornedimage(image, pixelsize_x=None, pixelsize_y=None): """Mock an adorned image type. Parameters ---------- image : numpy array Equivalent to image.data on a real AdornedImage type. pixelsize_x : float, optional. Pixel size in x dimension, in meters. pixelsize_y : float, optional. Pixel size in y dimension, in meters. Returns ------- MockAdornedImage """ return MockAdornedImage(image=image, pixelsize_x=pixelsize_x, pixelsize_y=pixelsize_y)
[docs]def convert_to_numpy(image): """Return numpy image array from AdornedImage type.""" try: from autoscript_sdb_microscope_client.structures import AdornedImage except ImportError: pass else: if isinstance(image, AdornedImage): return image.data if isinstance(image, np.ndarray): return image elif isinstance(image, MockAdornedImage): return image.data else: raise TypeError('Unexpected data type: {}'.format(type(image)))
[docs]def meters_to_pixels(amount, pixel_size): """Convert meters to pizels.""" return amount / pixel_size.x
[docs]def pixels_to_meters(amount, pixel_size): """Convert pixel size to meters.""" return amount * pixel_size.x
def _realspace_coord_to_pixels(coord, pixel_size, image_shape): """Converts a real space coordinate to a pixel coordinate. Parameters ---------- coord : Listlike. Realspace coordinate; in row, column format. pixel_size : Pixel size object, with attributes x and y. Units of meters. image_shape : tuple Shape of image dimensions, numpy shape attribute. Returns ------- pixel_coordinate Pixel space coordinate; in row, column format. Image origin for pixel coordinates is at the top left corner. """ coord[0] = -coord[0] / pixel_size.y # remember sign flip in y coord[1] = coord[1] / pixel_size.x pixel_coordinate = np.array(coord) + (np.array(image_shape) / 2) return pixel_coordinate def _pixel_coord_to_realspace(coord, pixel_size, image_shape): """Converts a pixel space coordinate to real space. Parameters ---------- coord : Listlike. Pixel space coordinate; in row, column format. pixel_size : Pixel size object, with attributes x and y. Units of meters. image_shape : tuple Shape of image dimensions, numpy shape attribute. Returns ------- realspace_coordinate Realspace coordinate; in row, column format. Real space image origin is at the center of the field of view. """ realspace_coordinate = np.array(coord) - (np.array(image_shape) / 2) realspace_coordinate[0] = -1 * realspace_coordinate[0] * pixel_size.y realspace_coordinate[1] = realspace_coordinate[1] * pixel_size.x return realspace_coordinate