[Insight-users] NormalizedMutualInformationMetric
    Giorgos Pichis 
    gpichis at gmail.com
       
    Sun May 11 11:41:35 EDT 2008
    
    
  
Hi,
I made some changes to the code,
and it seems as it is having better results,
but they are still far from the optimum.
I am using the BrainProtonDensitySlice.png  and
BrainProtonDensitySliceR10X13Y17S12.png from
the examples data to test the algorithm.
As far as the metric parameters are concerned , I did the following changes:
//////////////////////
  const unsigned int numberOfParameters =
transform->GetNumberOfParameters();
  typedef MetricType::ScalesType ScalesType;
  ScalesType scales( numberOfParameters );
double t_scale;
double center_scale;
  //scales.Fill( 1.0 );
    std::cout<<" enter center_scale : ";
  std::cin>>center_scale;
  std::cout<<" enter t_scale : ";
  std::cin>>t_scale;
  std::cout<<" enter scales[0] : "; //scaling
  std::cin>>scales[0];
  std::cout<<" enter scales[1] : "; //angle
  std::cin>>scales[1];
  //const double t_scale=0.1; //translation scale
  //scales[0] =  10.0;
  //scales[1] =  1.0;
  scales[2] =  center_scale;
  scales[3] =  center_scale;
  scales[4] =  t_scale;
  scales[5] =  t_scale;
  metric->SetDerivativeStepLengthScales(scales);
  metric->SetDerivativeStepLength(1.0);
/////////
... and had some relatively (to the previous ones) good results, using:
center_scale :10000,
t_scale: 0.1
scale[0] :0.1  //for scaling
scale[1] :1  //for the angle
Also the optimizer setting where changes to:
  typedef OptimizerType::ScalesType       OptimizerScalesType;
  OptimizerScalesType optimizerScales( transform->GetNumberOfParameters() );
  const double translationScale = 1.0 / 100.0;
  const double centerScale =1.0/100.0;
  optimizerScales[0] = 10.0;
  optimizerScales[1] =  1.0;
  optimizerScales[2] =  centerScale;
  optimizerScales[3] =  centerScale;
  optimizerScales[4] =  translationScale;
  optimizerScales[5] =  translationScale;
  optimizer->SetScales( optimizerScales );
  double steplength = 1.0;
  if( argc > 9 )
    {
    steplength = atof( argv[9] );
    }
  optimizer->SetMaximumStepLength( steplength );
  optimizer->SetMinimumStepLength( 0.00001 );
  optimizer->SetNumberOfIterations( 500 );
 optimizer->MaximizeOn(); //change
.... using step lenght=0.5
The algorithm exited, at iteration number 70,
with
Scale 1.00275
Angle (radians) -0.160493
Angle (degrees) -9.19556
Center X = 90.318
Center Y = 108.849
Translation X=15.2579
Translation Y= 15.4322
Metric Value= 1.07114
Can I get some help , on what further changes should I do,
in order to get better results?
I had almost optimum results working with Mattes MI,
Scale 0.832628
Angle (radians) -0.174455
Angle (degrees) -9.99554
Center X = 87.1628
Center Y = 107.813
Translation X=7.37987
Translation Y= 8.52768
Metric Value= -1.42415,
but I want to get familiar and work with NMI.
What changes to the scales parameters, should I do?
Thanks in advance,
Giorgos
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20080511/6e4d14ff/attachment.htm>
    
    
More information about the Insight-users
mailing list