One-plus-one evolutionary optimizer configuration object
OnePlusOneEvolutionary object describes
a one-plus-one evolutionary optimization configuration that you pass
to the function
solve image registration problems.
You can create a
using the following methods:
OnePlusOneEvolutionary object for registering
optimizer = registration.optimizer.OnePlusOneEvolutionary() Constructs
GrowthFactor— Growth factor of the search radius
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
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
Epsilon— Minimum size of the search radius
1.5e-6(default) | positive scalar
Minimum size of the search radius, specified as a positive scalar.
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 deceases 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
result in an optimization that fails to converge.
MaximumIterations— Maximum number of optimizer iterations
Maximum number of optimizer iterations, specified as a positive
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.
Value. To learn how value classes affect copy operations, see Copying Objects (MATLAB).
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.