Hi, <br>I made some changes to the code,<br>and it seems as it is having better results,<br>but they are still far from the optimum.<br><br>I am using the BrainProtonDensitySlice.png&nbsp; and BrainProtonDensitySliceR10X13Y17S12.png from <br>
the examples data to test the algorithm.<br><br>As far as the metric parameters are concerned , I did the following changes:<br>//////////////////////<br>&nbsp; const unsigned int numberOfParameters = transform-&gt;GetNumberOfParameters();<br>
<br>&nbsp; typedef MetricType::ScalesType ScalesType;<br>&nbsp; ScalesType scales( numberOfParameters );<br>double t_scale;<br>double center_scale;<br>&nbsp; //scales.Fill( 1.0 );<br>&nbsp;&nbsp;&nbsp; std::cout&lt;&lt;&quot; enter center_scale : &quot;;<br>
&nbsp; std::cin&gt;&gt;center_scale; <br>&nbsp; std::cout&lt;&lt;&quot; enter t_scale : &quot;;<br>&nbsp; std::cin&gt;&gt;t_scale;<br>&nbsp; std::cout&lt;&lt;&quot; enter scales[0] : &quot;; //scaling<br>&nbsp; std::cin&gt;&gt;scales[0];<br>&nbsp; <br>
&nbsp; std::cout&lt;&lt;&quot; enter scales[1] : &quot;; //angle<br>&nbsp; std::cin&gt;&gt;scales[1];<br>&nbsp; <br>&nbsp; //const double t_scale=0.1; //translation scale<br>&nbsp; //scales[0] =&nbsp; 10.0;<br>&nbsp; //scales[1] =&nbsp; 1.0;<br>&nbsp; scales[2] =&nbsp; center_scale;<br>
&nbsp; scales[3] =&nbsp; center_scale;<br>&nbsp; scales[4] =&nbsp; t_scale;<br>&nbsp; scales[5] =&nbsp; t_scale;<br><br>&nbsp;&nbsp;&nbsp; <br>&nbsp; metric-&gt;SetDerivativeStepLengthScales(scales);<br>&nbsp; metric-&gt;SetDerivativeStepLength(1.0);<br><br>/////////<br>... and had some relatively (to the previous ones) good results, using:<br>
center_scale :10000,<br>t_scale: 0.1<br>scale[0] :0.1&nbsp; //for scaling<br>scale[1] :1&nbsp; //for the angle<br><br>Also the optimizer setting where changes to:<br><br><br>&nbsp; typedef OptimizerType::ScalesType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OptimizerScalesType;<br>
&nbsp; OptimizerScalesType optimizerScales( transform-&gt;GetNumberOfParameters() );<br>&nbsp; const double translationScale = 1.0 / 100.0;<br>&nbsp; const double centerScale =1.0/100.0;<br><br>&nbsp; optimizerScales[0] = 10.0;<br>&nbsp; optimizerScales[1] =&nbsp; 1.0;<br>
&nbsp; optimizerScales[2] =&nbsp; centerScale;<br>&nbsp; optimizerScales[3] =&nbsp; centerScale;<br>&nbsp; optimizerScales[4] =&nbsp; translationScale;<br>&nbsp; optimizerScales[5] =&nbsp; translationScale;<br><br>&nbsp; optimizer-&gt;SetScales( optimizerScales );<br>
<br>&nbsp; double steplength = 1.0;<br>&nbsp; <br>&nbsp; if( argc &gt; 9 )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; steplength = atof( argv[9] );<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; optimizer-&gt;SetMaximumStepLength( steplength ); <br>&nbsp; optimizer-&gt;SetMinimumStepLength( 0.00001 );<br>
&nbsp; optimizer-&gt;SetNumberOfIterations( 500 );<br>&nbsp;optimizer-&gt;MaximizeOn(); //change<br>.... using step lenght=0.5<br>The algorithm exited, at iteration number 70,<br>with <br>Scale 1.00275<br>Angle (radians) -0.160493<br>
Angle (degrees) -9.19556<br>Center X = 90.318<br>Center Y = 108.849<br>Translation X=15.2579<br>Translation Y= 15.4322<br>Metric Value= 1.07114<br><br>Can I get some help , on what further changes should I do, <br>in order to get better results?<br>
I had almost optimum results working with Mattes MI, <br>Scale 0.832628<br>
Angle (radians) -0.174455<br>
Angle (degrees) -9.99554<br>
Center X = 87.1628<br>
Center Y = 107.813<br>
Translation X=7.37987<br>
Translation Y= 8.52768<br>
Metric Value= -1.42415,<br>but I want to get familiar and work with NMI.<br>What changes to the scales parameters, should I do?<br><br>Thanks in advance,<br>Giorgos<br><br><br><br><br>