[Insight-users] Error with MutualInformationHistogramImageToImageMetric

Rosario Sance rsance at die.upm.es
Wed Jun 13 05:28:59 EDT 2007


Hi Luis,
Thank you very much for your useful comments. 
Actually I hadn't understood very well the role 
of the 'maximum step' parameter, and of course I 
have already tried this correction. However, it 
looked not to be enough, since the error persists...
Answering to your questions:

1) None. Actually I checked that it failed just 
when beginning the registration process. That's 
why I guess that it was due to initialization...

2) No, but how could I reflect them on the 
scales? In this particular case (but I use to 
work with different images), the characteristics are:

         Size of every volume in the series = 512 x 512 x 24
         ElementSpacing = 0.742188 x 0.742188 x 6.6

3) I had chosen MomentsOn(),  but actually I'd 
like to know which would be more recommendable 
and which criteria should I consider?

4) I got it now. But then I have another 
question. Wouldn't be equivalent to change the 
scales and then allow a larger step? So for 
example (just like an approximation):

typedef OptimizerType::ScalesType       OptimizerScalesType;
   OptimizerScalesType optimizerScales( transform->GetNumberOfParameters() );
   const double translationScale = 1.0 / 1000.0;
   const double rotationScale = 1.0 / 60.0;

   optimizerScales[0] = rotationScale ;
   optimizerScales[1] = rotationScale ;
   optimizerScales[2] = rotationScale ;
   optimizerScales[3] = translationScale;
   optimizerScales[4] = translationScale;
   optimizerScales[5] = translationScale;




I have another 2 comments:

5) What about the rotation description? I didn't 
change nothing in this piece of code, but maybe that's the clue...

typedef TransformType::VersorType  VersorType;
   typedef VersorType::VectorType     VectorType;

   VersorType     rotation;
   VectorType     axis;

   axis[0] = 0.0;
   axis[1] = 0.0;
   axis[2] = 1.0;

   const double angle = 0;

   rotation.Set(  axis, angle  );
   transform->SetRotation( rotation );

6) Which could be a good size for the 
'numberOfHistogramBins' defined for the metric? I 
am working with unsigned short format, and the 
images have intensities about the range min = 
0.000000, max = 660.000000. I guess that 
depending on that parameter the computational 
cost will change, but would you give me a 
suggestion? 32, 64, 128,... would be any of them ok?


I'm looking forward to your answer.
Thanks,
Rosario


At 03:19 13/06/2007, Luis Ibanez wrote:

>Hi Rosario,
>
>Thanks for the detailed description of your problem.
>
>The combination of registration components that you
>are using looks fine.
>
>You are also guessing correctly that the problem is
>probably related to the initialization.
>
>
>A couple of questions:
>
>
>1) How many iterations of the optimizer do you see
>    with the Observer before the Exception is thrown ?
>
>
>2) I see that in the translation scales you are not
>    taking into account the spacing and number of
>    pixels of your images. It is usually wise to do
>    so because in that way you can be sure that the
>    translation scaling really correspond to the
>    physical extent of your images.
>
>    What are the number of pixels of your images,
>    and what are their pixel spacings ?
>
>
>3) What mode of the CenteredTransformInitializer are
>    you using:  Geometry ? or Moments ?
>
>
>4) The value 0.2 as initial maximum step is a bit
>    large. Note that since the parameter scaling
>    for the Versor (unit quaternion) components of
>    the transform is 1.0, that means that your first
>    jump in the parametric space is going to be of
>    11 degrees in rotation. You may want to start
>    with a smaller amount, maybe something like just
>    1 degree or rotation, which should be a step of
>    0.02.
>
>
>
>Please let us know,
>
>
>   Thanks
>
>
>     Luis
>
>
>
>
>=====================
>Rosario Sance wrote:
>>Hi all,
>>My question is regarding to a particular 
>>implementation of a Registration algorithm I have just tried without success.
>>Firstly I checked the example " 
>>ImageRegistration8.cxx", in which the use of 
>>the " itkVersorRigid3DTransform" is illustrated, and it worked.
>>Then I did the same with the example " 
>>ImageRegistrationHistogramPlotter.cxx", which 
>>deals with the " 
>>MutualInformationHistogramImageToImageMetric", 
>>and also worked properly with my images. (Since 
>>they are 3D volumes I did the required changes and I had no problems at all).
>>However, when I tried to create a new algorithm with the elements:
>>TRANSFORM: itkVersorRigid3DTransform (with the 
>>itkCenteredTransformInitializer)
>>OPTIMIZER: itkVersorRigid3DTransformOptimizer
>>METRIC: MutualInformationHistogramImageToImageMetric
>>INTERPOLATOR: itkLinearInterpolateImageFunction
>>The code was properly built but I achieved a permanent error in execution:
>>/ExceptionObject caught !
>>itk::ExceptionObject (013CF7FC)
>>Location: "void __thiscall 
>>itk::HistogramImageToImageMetric<class 
>>itk::Image<float,3>,class 
>>itk::Image<float,3> >::ComputeHistogram(const 
>>class itk::Array<double> &,class 
>>itk::Statistics::Histogram<double,2,class 
>>itk::Statistics::DenseFrequencyContainer> &) const"
>>File: 
>>c:\itk\insighttoolkit-3.2.0\code\algorithms\itkHistogramImageToImageMetric.txx
>>Line: 303
>>Description: itk::ERROR: 
>>MutualInformationHistogramImageToImageMetric(018A50D8): 
>>All the points mapped to outside of the moving image
>>/I guessed that the problem came from the initialization of the Optimizer:
>>   /typedef/ / OptimizerType::ScalesType       OptimizerScalesType;
>>   OptimizerScalesType optimizerScales( transform->GetNumberOfParameters() );
>>   const double translationScale = 1.0 / 1000.0;
>>   optimizerScales[0] = 1.0;
>>   optimizerScales[1] = 1.0;
>>   optimizerScales[2] = 1.0;
>>   optimizerScales[3] = translationScale;
>>   optimizerScales[4] = translationScale;
>>   optimizerScales[5] = translationScale;
>>   optimizer->SetScales( optimizerScales );
>>   optimizer->SetMaximumStepLength( 0.2000  );
>>   optimizer->SetMinimumStepLength( 0.0001 );
>>   optimizer->SetNumberOfIterations( 200 );
>>
>>/but I was playing with it and I couldn't avoid 
>>the fail... The same with the initialization of the transform:
>>/ / /typedef itk::CenteredTransformInitializer< TransformType,
>>                                              FixedImageType,
>>                                              MovingImageType
>>                                                  >
>>TransformInitializerType;
>>   TransformInitializerType::Pointer initializer =
>>                                           TransformInitializerType::New();
>>(/...)
>>I have tried it with different images 
>>(different sizes and resolution). All of them 
>>are MRI dynamic studies of the abdominal region 
>>(3D volumes on time). I'd really like to know 
>>what's happening with my piece of code. *Is 
>>there any specific limitation for mixing those elements in a new algorithm?
>>*Thank you very much in advance.
>>Rosario
>>___________________________________________________
>>Rosario Sance Garzón
>>Grupo de Tecnologías de Imagen Biomédica
>>Dpto. Ingeniería Electrónica
>>E.T.S.I. Telecomunicación - UPM
>>Ciudad Universitaria
>>28040 - Madrid
>>Teléfono: 91 549 57 00 (Ext. 4220) Fax:        91 336 73 23
>>Web:       http://www.die.upm.es/im
>>___________________________________________________
>>/Rosario Sance Garzón
>>Biomedical Image Techologies
>>Electronic Engineering Department
>>E.T.S.I. Telecomunicación - UPM
>>Ciudad Universitaria
>>E-28040 - Madrid (SPAIN)
>>//Telephone: +34 91 549 57 00 (Ext. 4220) Fax:        +34 91 336 73 23
>>Web:       http://www.die.upm.es/im
>>/ ___________________________________________________
>>
>>------------------------------------------------------------------------
>>_______________________________________________
>>Insight-users mailing list
>>Insight-users at itk.org
>>http://www.itk.org/mailman/listinfo/insight-users
>
>
>--
>No virus found in this incoming message.
>Checked by AVG Free Edition. Version: 7.5.472 / 
>Virus Database: 269.8.15/847 - Release Date: 12/06/2007 21:42

___________________________________________________

Rosario Sance Garzón
Grupo de Tecnologías de Imagen Biomédica
Dpto. Ingeniería Electrónica
E.T.S.I. Telecomunicación - UPM
Ciudad Universitaria
28040 - Madrid

Teléfono: 91 549 57 00 (Ext. 4220)
Fax:        91 336 73 23
Web:       http://www.die.upm.es/im
___________________________________________________

Rosario Sance Garzón
Biomedical Image Techologies
Electronic Engineering Department
E.T.S.I. Telecomunicación - UPM
Ciudad Universitaria
E-28040 - Madrid (SPAIN)

Telephone: +34 91 549 57 00 (Ext. 4220)
Fax:        +34 91 336 73 23
Web:       http://www.die.upm.es/im
___________________________________________________
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/insight-users/attachments/20070613/649a2dfd/attachment.html


More information about the Insight-users mailing list