Registration/Alignment utilities

This code contains helper methods in using Elastix to perform section to section aligment. Elastix takes in many many different parameter settings. Below are some notes regarding one particular parameter.

Notes from the manual regarding MOMENTS vs GEOMETRY:

The CenteredTransformInitializer parameter supports two modes of operation. In the first mode, the centers of the images are computed as space coordinates using the image origin, size and spacing. The center of the fixed image is assigned as the rotational center of the transform while the vector going from the fixed image center to the moving image center is passed as the initial translation of the transform. In the second mode, the image centers are not computed geometrically but by using the moments of the intensity gray levels.

Keep in mind that the scale of units in rotation and translation is quite different. For example, here we know that the first element of the parameters array corresponds to the angle that is measured in radians, while the other parameters correspond to the translations that are measured in millimeters

library.utilities.utilities_registration.align_image_to_affine(file_key)

This is the method that takes the rigid transformation and uses PIL to align the image. This method takes about 20 seconds to run as compared to scikit’s version which takes 220 seconds to run on a full scale image.

Parameters

file_key – tuple of file input and output

Returns

nothing

library.utilities.utilities_registration.convert_2d_transform_forms(arr)

Helper method used by create_downsampled_transforms

Parameters

arr – an array of data to vertically stack

Returns

a numpy array

library.utilities.utilities_registration.create_downsampled_transforms(transforms: dict, downsample: bool, scaling_factor: float) dict

Changes the dictionary of transforms to the correct resolution

Parameters
  • animal – prep_id of animal we are working on animal

  • transforms – dictionary of filename:array of transforms

  • downsample – boolean: either true for thumbnails, false for full resolution images

Returns

corrected dictionary of filename: array of transforms

library.utilities.utilities_registration.create_rigid_parameters(elastixImageFilter, defaultPixelValue='0.0', debug=False)

Create and return a dictionary of rigid registration parameters for elastixImageFilter.

Parameters: - elastixImageFilter: The elastix image filter object. - defaultPixelValue: The default pixel value for the registration.

Returns: - rigid_params: A dictionary of rigid registration parameters.

library.utilities.utilities_registration.create_scaled_transform(T)

Creates a transform (T) to the correct resolution

library.utilities.utilities_registration.parameters_to_rigid_transform(rotation, xshift, yshift, center)

Takes the rotation, xshift, yshift that were created by Elastix and stored in the elastix_transformation table. Creates a matrix of the rigid transformation.

Parameters
  • rotation – a float designating the rotation

  • xshift – a float for showing how much the moving image shifts in the X direction.

  • yshift – a float for showing how much the moving image shifts in the Y direction.

  • center – tuple of floats showing the center of the image.

Returns

the 3x3 rigid transformation

library.utilities.utilities_registration.rigid_transform_to_parmeters(transform, center)

convert a 2d transformation matrix (3*3) to the rotation angles, rotation center and translation This is used in the manual aligner notebook.

Args:

transform (array like): 3*3 array that stores the 2*2 transformation matrix and the 1*2 translation vector for a 2D image. the third row of the array is a place holder of values [0,0,1].

Returns:

float: x translation float: y translation float: rotation angle in arc list: lisf of x and y for rotation center

library.utilities.utilities_registration.tif_to_png(file_key)

This method creates a PNG from a TIF :param file_key: tuple of file input and output :return: nothing