One-plus-one evolutionary optimizer configuration
OnePlusOneEvolutionary object describes a one-plus-one
evolutionary optimization configuration that you pass to the function
imregister to solve image registration problems.
You can create a
OnePlusOneEvolutionary object using the following
imregconfig — Returns a
OnePlusOneEvolutionary object paired with an appropriate
metric for registering multimodal images
metric = registration.optimizer.OnePlusOneEvolutionary;
OnePlusOneEvolutionaryobject with default settings
GrowthFactor— Growth factor of the search radius
Growth factor of the search radius, specified as a positive scalar. The
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
GrowthFactor to a small value, the optimization is
slower, but it is likely to converge on a better solution.
Epsilon— Minimum size of the search radius
1.5e-6(default) | positive scalar
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.
InitialRadius— Initial size of search radius
6.25e-3| positive scalar
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
might result in an optimization that fails to converge.
MaximumIterations— Maximum number of optimizer iterations
Maximum number of optimizer iterations, specified as a positive integer
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
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');
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');
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.
 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.
backgroundPoolor accelerate code with Parallel Computing Toolbox™
This function fully supports thread-based environments. For more information, see Run MATLAB Functions in Thread-Based Environment.