[Insight-users] Optimizer reproducibility

Jan Schreiber Jan.Schreiber at umit.at
Wed Apr 6 10:09:46 EDT 2005


Hi, 

for the registration of 2d x-ray images, I am using a combination of

  itk::CenteredAffineTransform< double, 2 > TransformType;
  itk::RegularStepGradientDescentOptimizer       OptimizerType;
  itk::LinearInterpolateImageFunction< MovingImageType, double >
InterpolatorType;
  itk::MultiResolutionImageRegistrationMethod< FixedImageType,
MovingImageType > RegistrationType;
  itk::RecursiveMultiResolutionPyramidImageFilter< FixedImageType,
FixedImageType > FixedImagePyramidType;
  itk::RecursiveMultiResolutionPyramidImageFilter< MovingImageType,
MovingImageType > MovingImagePyramidType;
  itk::MattesMutualInformationImageToImageMetric< FixedImageType,
MovingImageType > MetricType;
  itk::ImageMaskSpatialObject<2> MaskType;

Strangely, I get different results when performing the registration
several times. 

More in detail:
* When starting the application and executing the registration process,
restarting the application and doing the registration again, produces
the same results. *fine*

* When starting the registration, executing the registration and
executing it again without a restart, I get different results.
*frightening*

-> Having not initialized everything?
I wrote a little test program, that instantiates and loads the images,
instantiates my registration class and executes the registration -
several times. Every time, the images and registration are instantiated
with ::New() and the images are freshly loaded - I get different
results. *frustrating*

Can anyone explain that?
Is it a subject of optimizer initialization? - Can I influence it?
The metric value of the first registration is not the smallest - so it
seams to be a local minimum only...

I would be very glad for any hints to get a reproducible registration
with a more reliable minimum found by the optimizer. 

Thanks in advance, 
Jan

P.S.: the Doxygen Documentation
http://www.itk.org/Doxygen16/html/classitk_1_1MattesMutualInformationImageToImageMetric.html
tells in the detailed description, that "The method GetValue() computes
of the mutual information..." but the ItkSoftwareGuide-2-0-0 says that
the MattesMutualInformationImageToImageMetric "computes the negative
mutual information"... 



More information about the Insight-users mailing list