3
votes

I am trying to align two multi-spectral images using multi-modal image registration techniques.

I built a prototype in MATLAB by first creating the optimizer and metric objects as follows:

[optimizer, metric] = imregconfig('Multimodal');

This creates an optimizer object of type OnePlusOneEvolutionaryOptimizer and metric of type MattesMutualInformation. The images are aligned as follows:

tform = imregtform(movingImage, fixedImage, 'rigid', optimizer, metric);

aligned = imwarp(movingImage,tform,'OutputView',imref2d(size(fixedImage)));

Then I went for a C++ implementation of the same algorithm which is offered by one of the examples in the ITK v4 library.

This example also gives correct results but here is the problem... The ITK version is way slower than the MATLAB version. I played around with the optimizer parameters and was able to speed it up a bit, but not comparable to MATLAB version.

MATLAB documentation of OnePlusOneEvolutionaryOptimizer states that the value of InitialRadius property is directly proportional to the algorithm's execution speed (compromising on robustness). The confusion here is that in ITK, the value of InitialRadius is inversely proportional to the execution speed as far as I tested.

I couldn't find literature/documentation describing how the optimizer parameters like InitialRadius and GrowthFactor are interpreted in ITK. Please help in providing explanation of these parameters and speeding up the algorithm.

1

1 Answers

1
votes

The first thing to check is making sure you are compiling your program in Release mode, not Debug mode.

Documentation and source code for 1+1 optimizer in ITK are available online.