Main Content

OnePlusOneEvolutionary

One-plus-one evolutionary optimizer configuration

Description

A OnePlusOneEvolutionary object describes a one-plus-one evolutionary optimization configuration that you pass to the function imregister to solve image registration problems.

Creation

You can create a OnePlusOneEvolutionary object using the following methods:

  • imregconfig — Returns a OnePlusOneEvolutionary object paired with an appropriate metric for registering multimodal images

  • Entering

    metric = registration.optimizer.OnePlusOneEvolutionary;
    on the command line creates a OnePlusOneEvolutionary object with default settings

Properties

expand all

Growth factor of the search radius, specified as a positive scalar. The optimizer uses GrowthFactor to control the rate at which the search radius grows in parameter space. If you set GrowthFactor to a large value, the optimization is fast, but it might result in finding only the metric’s local extrema. If you set GrowthFactor to a small value, the optimization is slower, but it is likely to converge on a better solution.

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

Minimum size of the search radius, specified as a positive scalar. Epsilon controls the accuracy of convergence by adjusting the minimum size of the search radius. If you set Epsilon to a small value, the optimization of the metric is more accurate, but the computation takes longer. If you set Epsilon to a large value, the computation time decreases at the expense of accuracy.

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

Initial size of search radius, specified as a positive scalar. If you set InitialRadius to a large value, the computation time decreases. However, overly large values of InitialRadius might result in an optimization that fails to converge.

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

Maximum number of optimizer iterations, specified as a positive integer scalar. MaximumIterations determines the maximum number of iterations the optimizer performs at any given pyramid level. The registration could converge before the optimizer reaches the maximum number of iterations.

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

Examples

collapse all

Create a OnePlusOneEvolutionary object and use it to register two MRI images of a knee that were obtained using different protocols.

Read the images into the workspace. The images are multimodal because they have different brightness and contrast.

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

View the misaligned images.

figure
imshowpair(fixed, moving,'Scaling','joint');

Figure contains an axes object. The axes object contains an object of type image.

Create the optimizer configuration object suitable for registering multimodal images.

optimizer = registration.optimizer.OnePlusOneEvolutionary
optimizer = 
  registration.optimizer.OnePlusOneEvolutionary

  Properties:
         GrowthFactor: 1.050000e+00
              Epsilon: 1.500000e-06
        InitialRadius: 6.250000e-03
    MaximumIterations: 100

Create the metric configuration object suitable for registering multimodal images.

metric = registration.metric.MattesMutualInformation;

Tune the properties of the optimizer so that the problem will converge on a global maxima. Increase the number of iterations the optimizer will use to solve the problem.

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.

figure
imshowpair(fixed, movingRegistered,'Scaling','joint');

Figure contains an axes object. The axes object contains an object of type image.

Algorithms

An evolutionary algorithm iterates to find a set of parameters that produce the best possible registration result. It does this by perturbing, or mutating, the parameters from the last iteration (the parent). If the new (child) parameters yield a better result, then the child becomes the new parent whose parameters are perturbed, perhaps more aggressively. If the parent yields a better result, it remains the parent and the next perturbation is less aggressive.

References

[1] Styner, M., C. Brechbuehler, G. Székely, and G. Gerig. "Parametric estimate of intensity inhomogeneities applied to MRI." IEEE Transactions on Medical Imaging. Vol. 19, Number 3, 2000, pp. 153-165.

Extended Capabilities

Version History

Introduced in R2012a

expand all