14. Image registration

Image registration is a basic brick for the fusion of the four cameras. There are two fusion strategies c.

  • The direct strategy (see section Fusion direct strategy), where one image is chosen as the reference image, and the 3 others are co-registered with it , these 3 co-registrations are image-to-image registrations.

  • The hierarchical strategy (see section Fusion hierarchical strategy), where stacks are first reconstructed by co-registering pairs of images issued from opposite cameras (involving two image-to-image registrations, one per pair), and then co-registered together (involving one stack-to-stack registration).

Each registration, either image-to-image or stack-to-stack, can be a sequence of two registrations. Usually, these two registrations differ by the transformation type to be computed: a first transformation with few degrees of freedom (more likely to bring the two images close to each other) is first calculated, then, from this starting point (the first computed transformation), a second transformation with more degrees of freedom (that will bring the images closer to each other) is calculated. This two-step calculation is more likely to avoid local minima while computing a transformation.

Therefore, there are 4 sets of registration parameters in fusion parameters (see section astec_fusion parameters)

  • For image-to-image registrations:

    • registration parameters prefixed by fusion_preregistration_

    • registration parameters prefixed by fusion_registration_

  • For stack-to-stack registrations:

    • registration parameters prefixed by fusion_stack_preregistration_

    • registration parameters prefixed by fusion_stack_registration_

A full description of the registration parameters can be found in section Registration parameters.

14.1. Image-to-image registration

Default parameters include

fusion_preregistration_compute_registration = False

fusion_registration_compute_registration = True
fusion_registration_pyramid_highest_level = 6
fusion_registration_pyramid_lowest_level = 3
fusion_registration_transformation_type = 'affine'

Therefore this is only a one-step registration, which computes an affine transformation. Registration is done with pyramids of image. Images at the higher levels of the pyramid are first co-registered, then the computed transformation served as initialization for the next level, and so on and so forth until the lowest required level (see section Registration parameters for a more detailed description of pyramid levels). Computing the transformation at a high level allows to capture large displacements.

Roughly, setting pyramid_highest_level to 6 and pyramid_lowest_level to 3 comes to compute the transformation from an image each dimension is divided by \(2^6 = 64\) to an image where they are divided by \(2^3 = 8\). Decreasing pyramid_lowest_level may improve the calculation precision but at a high computational cost.

Setting the transformation type to translation, ie

fusion_registration_transformation_type = 'translation'

is an efficient way to check whether the acquisition parameters are correctly set (see section Important parameters in the parameter file for fusion).

The two-steps registration is a means that may prevent from registration errors (minimisation towards an undesired local minima)

The parameters

fusion_preregistration_compute_registration = True
fusion_preregistration_pyramid_highest_level = 6
fusion_preregistration_pyramid_lowest_level = 3
fusion_preregistration_transformation_type = 'translation'

fusion_registration_compute_registration = True
fusion_registration_pyramid_highest_level = 4
fusion_registration_pyramid_lowest_level = 3
fusion_registration_transformation_type = 'affine'

first compute a translation to align the images, allowing for large displacements (with pyramid_highest_level = 6) and then refine it by an affine translation with smaller allowed displacements (with pyramid_highest_level = 4).

14.2. Stack-to-stack registration

Default parameters include

fusion_stack_preregistration_compute_registration = True
fusion_stack_preregistration_pyramid_highest_level = 6
fusion_stack_preregistration_pyramid_lowest_level = 3
fusion_stack_preregistration_transformation_type = 'affine'

fusion_stack_registration_compute_registration = True
fusion_stack_registration_pyramid_highest_level = 6
fusion_stack_registration_pyramid_lowest_level = 3
fusion_stack_registration_transformation_type = 'vectorfield'

Therefore this is a two-steps registration, which first computes an affine transformation, and then a deformation field.