Source code for fibsem.conversions

import numpy as np

from fibsem.mocktypes import MockAdornedImage


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)


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)


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