Main Content

imregister

Intensity-based image registration

Description

example

moving_reg = imregister(moving,fixed,transformType,optimizer,metric) transforms the 2-D or 3-D grayscale image, moving, so that it is registered with the reference image, fixed. transformType defines the type of transformation to perform. metric defines the quantitative measure of similarity between the images to optimize. optimizer describes the method for optimizing the metric. The function returns the registered image, moving_reg.

[moving_reg,R_reg] = imregister(moving,Rmoving,fixed,Rfixed,transformType,optimizer,metric) transforms the spatially referenced image moving so that it is registered with the spatially referenced image fixed. Rmoving and Rfixed are spatial referencing objects that describe the world coordinate limits and the resolution of moving and fixed.

___ = imregister(___,Name,Value) specifies additional options with one or more name-value pair arguments.

Examples

collapse all

Read two images. This example uses two magnetic resonance (MRI) images of a knee. The fixed image is a spin echo image, while the moving image is a spin echo image with inversion recovery. The two sagittal slices were acquired at the same time but are slightly out of alignment.

fixed = dicomread("knee1.dcm");
moving = dicomread("knee2.dcm");

View the misaligned images.

imshowpair(fixed,moving,"Scaling","joint")

Create the optimizer and metric, specifying the modality as "multimodal" because the images come from different sensors.

[optimizer,metric] = imregconfig("multimodal")
optimizer = 
  registration.optimizer.OnePlusOneEvolutionary

  Properties:
         GrowthFactor: 1.050000e+00
              Epsilon: 1.500000e-06
        InitialRadius: 6.250000e-03
    MaximumIterations: 100
metric = 
  registration.metric.MattesMutualInformation

  Properties:
    NumberOfSpatialSamples: 500
     NumberOfHistogramBins: 50
              UseAllPixels: 1

Tune the properties of the optimizer to get the problem to converge on a global maxima and to allow for more iterations.

optimizer.InitialRadius = 0.009;
optimizer.Epsilon = 1.5e-4;
optimizer.GrowthFactor = 1.01;
optimizer.MaximumIterations = 300;

Perform the registration.

movingRegistered = imregister(moving,fixed,"affine",optimizer,metric);

View the registered images.

imshowpair(fixed,movingRegistered,"Scaling","joint")

Input Arguments

collapse all

Image to be registered, specified as numeric matrix representing a 2-D grayscale image or a 3-D numeric array representing a 3-D grayscale volume.

Data Types: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Spatial referencing information associated with the image to be registered, specified as an imref2d object or imref3d object.

Reference image in the target orientation, specified as numeric matrix representing a 2-D grayscale image or a 3-D numeric array representing a 3-D grayscale volume. The reference image must have the same dimensionality as the image to be registered, moving.

Data Types: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

Spatial referencing information associated with the reference (fixed) image, specified as an imref2d object or imref3d object.

Geometric transformation to be applied to the moving image, specified as one of the following values:

ValueDescription
"translation"(x,y) translation in 2-D, or (x,y,z) translation in 3-D.
"rigid"Rigid transformation consisting of translation and rotation.
"similarity"Nonreflective similarity transformation consisting of translation, rotation, and scale.
"affine"Affine transformation consisting of translation, rotation, scale, and shear.

The "similarity" and "affine" transformation types do not support reflection.

Data Types: char | string

Method for optimizing the similarity metric, specified as a RegularStepGradientDescent or OnePlusOneEvolutionary optimizer object.

Image similarity metric to be optimized during registration, specified as a MeanSquares or MattesMutualInformation metric object.

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

Example: "DisplayOptimization",1 enables the verbose optimization mode.

Verbose optimization flag, specified as the logical value true or false. Controls whether imregister displays optimization information in the command window during the registration process.

Data Types: logical

Initial geometric transformation, specified as an affinetform2d or affinetform3d object.

Note

You can also specify InitialTransformation as an affine2d object or an affine3d. However, these objects are not recommended. For more information, see Compatibility Considerations.

Number of pyramid levels used during the registration process, specified as a positive integer.

Example: "PyramidLevels",4 sets the number of pyramid levels to 4.

Data Types: double

Output Arguments

collapse all

Registered image, returned as a 2-D numeric matrix representing a 2-D grayscale image or a 3-D numeric array representing a 3-D grayscale volume. Any fill pixels introduced that do not correspond to locations in the original image are 0.

Spatial referencing information associated with the registered image, returned as an imref2d object or imref3d object.

Tips

  • Both imregtform and imregister use the same underlying registration algorithm. imregister performs the additional step of resampling moving to produce the registered output image from the geometric transformation estimate calculated by imregtform. Use imregtform when you want access to the geometric transformation that relates moving to fixed. Use imregister when you want a registered output image.

  • Create an optimizer and metric with the imregconfig function before calling imregister. Getting good results from optimization-based image registration usually requires modifying optimizer or metric settings for the pair of images being registered. The imregconfig function provides a default configuration that should only be considered a starting point. For example, if you increase the number of iterations in the optimizer, reduce the optimizer step size, or change the number of samples in a stochastic metric, the registration improves to a point, at the expense of performance. See the output of imregconfig for more information on the different parameters that you can modify.

  • If the spatial scaling of your images differs by more than 10%, resize them with imresize before registering them.

  • Use imshowpair or imfuse to visualize the results of registration.

  • You can use imregister in an automated workflow to register several images.

  • When you have spatial referencing information about the image to be registered, specify the information to imregister using spatial referencing objects. This helps imregister converge to better results more quickly because scale differences can be taken into account.

Version History

Introduced in R2012a

expand all