<html><body><div style="color:#000; background-color:#fff; font-family:Courier New, courier, monaco, monospace, sans-serif;font-size:12pt"><div id="yiv1008358354"><div><div style="color:#000;background-color:#fff;font-family:times new roman, new york, times, serif;font-size:12pt;"><div style="font-family:Courier New, courier, monaco, monospace, sans-serif;" id="yiv1008358354yui_3_2_0_111_132694209626448"><span id="yiv1008358354yui_3_2_0_111_132694209626465">Hi all,</span><span><br></span></div><div id="yiv1008358354yui_3_2_0_111_1326942096264482" style="font-family:Courier New, courier, monaco, monospace, sans-serif;"><br><span id="yiv1008358354yui_3_2_0_111_132694209626465"></span></div><div id="yiv1008358354yui_3_2_0_111_1326942096264483" style="font-family:Courier New, courier, monaco, monospace, sans-serif;"><span id="yiv1008358354yui_3_2_0_111_132694209626465">I am trying to register 2D images (spect modality) witk itk Mattes mutual information.
 Visually, offsets between both images are very small (translation of ~ 5 mms). I am initializing transform parameters to 0 for the 3 parameters of euler 2D transform. However, after registration I got a rotation around 90 degres. Plus, when I am observing
 optimizer iterations, first iteration is already 1.6 radian for rotation parameter, even if my initial rotation parameter was 0. <br></span></div><div id="yiv1008358354yui_3_2_0_111_1326942096264596" style="font-family:Courier New, courier, monaco, monospace, sans-serif;"><br>Here is the observer:<br><br>MultiResolution Level : 0<br>0 = -0.372419 : [1.7683, -0.0955618, -0.929501]<br>1 = -0.0383217 : [1.92583, -2.08874, -0.978926]<br>2 = -0.0362538 : [1.69325, -1.10031, -2.21542]<br>3 = -0.0377709 : [1.56321, -1.28384, -3.79953]<br>4 = -0.0419196 : [1.66387, -2.53705, -3.55923]<br>141 = -0.042436 : [1.51798, -17.6144, -6.53557]<br>142 = -0.0423536 : [1.52173, -17.635, -6.52587]<br>143 = -0.042424 : [1.51635, -17.6507, -6.54188]<br><br>&nbsp;Iterations&nbsp;&nbsp;&nbsp; = 145<br>&nbsp;Metric value&nbsp; = -0.0424182<br>&nbsp;Stop Condition&nbsp; = RegularStepGradientDescentOptimizer: Step too small after 144<br>&nbsp;iterations. Current step (0.0184467)
 is less than minimum step (0.02).<br>Result =<br>&nbsp;Translation X = 17.6507 mm<br>&nbsp;Translation Y = 6.54188 mm<br>&nbsp;Rotation X = -86.8805 degres<br><br>Here is part of the print out of registration:<br>&nbsp; CurrentLevel: 1<br>&nbsp; InitialTransformParameters: [0, 0, 0]<br>&nbsp; InitialTransformParametersOfNextLevel: [0, 0, 0]<br>&nbsp; LastTransformParameters: [1.51635, -17.6507, -6.54188]<br>&nbsp; FixedImageRegion: ImageRegion (103F17EC)<br>&nbsp; Dimension: 2<br>&nbsp; Index: [0, 0]<br>&nbsp; Size: [256, 1024]<br><br>&nbsp; FixedImageRegion at level 0: ImageRegion (04DA4C98)<br>&nbsp; Dimension: 2<br>&nbsp; Index: [0, 0]<br>&nbsp; Size: [128, 512]<br><br>&nbsp; FixedImageRegion at level 1: ImageRegion (04DA4CAC)<br>&nbsp; Dimension: 2<br>&nbsp; Index: [0, 0]<br>&nbsp; Size: [256, 1024]<br><br><br><span id="yiv1008358354yui_3_2_0_111_132694209626465"></span></div><div id="yiv1008358354yui_3_2_0_111_1326942096264611"
 style="font-family:Courier New, courier, monaco, monospace, sans-serif;"><span id="yiv1008358354yui_3_2_0_111_132694209626465">It's clear that I am missing something. </span><span id="yiv1008358354yui_3_2_0_111_132694209626465">Please help. Here is my code:</span></div><div id="yiv1008358354yui_3_2_0_111_1326942096264466" style="font-family:Courier New, courier, monaco, monospace, sans-serif;"><span id="yiv1008358354yui_3_2_0_111_132694209626465"><br></span></div><div id="yiv1008358354yui_3_2_0_111_1326942096264467" style="font-family:Courier New, courier, monaco, monospace, sans-serif;"><span id="yiv1008358354yui_3_2_0_111_132694209626465">&nbsp; ImageType::RegionType fixedImageRegion = fixedImage-&gt;GetBufferedRegion();<br>&nbsp; ImageType::RegionType movingImageRegion = movingImage-&gt;GetBufferedRegion();&nbsp;&nbsp; <br id="yiv1008358354yui_3_2_0_111_1326942096264334"></span></div><div style="font-family:Courier New, courier, monaco, monospace,
 sans-serif;" id="yiv1008358354yui_3_2_0_111_1326942096264104"><span id="yiv1008358354yui_3_2_0_111_132694209626465"><br></span></div><div style="font-family:Courier New, courier, monaco, monospace, sans-serif;" id="yiv1008358354yui_3_2_0_111_1326942096264105"><span id="yiv1008358354yui_3_2_0_111_132694209626465">&nbsp; typedef itk::Euler2DTransform&lt; double &gt; TransformType;&nbsp; <br>&nbsp; TransformType::Pointer transform = TransformType::New();<br>&nbsp; registration_-&gt;SetTransform(transform);<br><br>&nbsp; // Initialize transform parameters<br>&nbsp; int transformParametersTotal =
 registration_-&gt;GetTransform()-&gt;GetNumberOfParameters();<br>&nbsp; typedef RegistrationType::ParametersType ParametersType;<br>&nbsp; ParametersType initialParameters(transformParametersTotal);<br>&nbsp; initialParameters.Fill(0.0);<br>&nbsp; registration_-&gt;SetInitialTransformParameters(initialParameters);&nbsp; <br><br>&nbsp; metric_-&gt;SetNumberOfHistogramBins(50);<br>&nbsp; metric_-&gt;UseAllPixelsOn();<br><br>&nbsp; registration_-&gt;SetFixedImage(fixedImage);<br>&nbsp; registration_-&gt;SetMovingImage(movingImage);&nbsp;&nbsp;&nbsp; <br>&nbsp; registration_-&gt;SetFixedImageRegion(fixedImageRegion);<br></span></div><div style="font-family:Courier New, courier, monaco, monospace, sans-serif;" id="yiv1008358354yui_3_2_0_111_1326942096264433"><span id="yiv1008358354yui_3_2_0_111_132694209626465"><br></span></div><div style="font-family:Courier New, courier, monaco, monospace, sans-serif;" id="yiv1008358354yui_3_2_0_111_1326942096264444"><span
 id="yiv1008358354yui_3_2_0_111_132694209626465">&nbsp;
 typedef OptimizerType::ScalesType ScalesType;<br>&nbsp; int transformParametersTotal = registration_-&gt;GetTransform()-&gt;GetNumberOfParameters();<br>&nbsp; ScalesType parametersScales(transformParametersTotal);<br>&nbsp; parametersScales.Fill( 1.0 );<br><br>&nbsp; for (int j = 1; j &lt; transformParametersTotal; j++ ){<br>&nbsp;&nbsp;&nbsp; parametersScales[j] = 1.0 / 1000;<br>&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><br>&nbsp; optimizer_-&gt;SetScales(parametersScales);<br>&nbsp;&nbsp; <br>&nbsp; // The initial step length is defined with SetMaximumStepLength()<br>&nbsp; optimizer_-&gt;SetMaximumStepLength(2.0);&nbsp; <br>&nbsp; optimizer_-&gt;SetMinimumStepLength(0.02);<br><br>&nbsp; // Define number of iterations per multi-resolution level<br>&nbsp; optimizer_-&gt;SetNumberOfIterations( 200);<br>&nbsp; <br>&nbsp; optimizer_-&gt;SetRelaxationFactor(0.8);&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp; <br>&nbsp; OptimizerIterationUpdate::Pointer
 observer = OptimizerIterationUpdate::New();<br>&nbsp; optimizer_-&gt;AddObserver( itk::IterationEvent(), observer );<br><br>&nbsp;&nbsp; typedef RegistrationInterfaceCommand&lt;RegistrationType&gt; CommandType;<br>&nbsp;&nbsp; CommandType::Pointer command = CommandType::New();<br>&nbsp;&nbsp; registration_-&gt;AddObserver( itk::IterationEvent(), command );<br>&nbsp; <br>&nbsp;&nbsp;&nbsp; registration_-&gt;Update(); <br>&nbsp;&nbsp;&nbsp; // Output parameters<br>&nbsp;&nbsp;&nbsp; ParametersType finalParameters = registration_-&gt;GetLastTransformParameters();<br>&nbsp;&nbsp;&nbsp;&nbsp; result[0] = ;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result[1] = <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result[2] = ;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br><br>&nbsp;&nbsp;&nbsp; // Print out results<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "Result = " &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout
 &lt;&lt; " Translation X = " &lt;&lt; </span><span id="yiv1008358354yui_3_2_0_111_132694209626465">- finalParameters[1]</span><span id="yiv1008358354yui_3_2_0_111_132694209626465">&nbsp; &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; " Translation Y = " &lt;&lt;</span><span id="yiv1008358354yui_3_2_0_111_132694209626465">- finalParameters[2];</span><span id="yiv1008358354yui_3_2_0_111_132694209626465"> &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; " Rotation X = " &lt;&lt; -</span><span id="yiv1008358354yui_3_2_0_111_132694209626465"> finalParameters[0] * RAD_TO_DEG</span><span id="yiv1008358354yui_3_2_0_111_132694209626465"> &lt;&lt; std::endl;&nbsp; </span></div><div style="font-family:Courier New, courier, monaco, monospace, sans-serif;" id="yiv1008358354yui_3_2_0_111_132694209626451">&nbsp;</div><div style="font-family:Courier New, courier, monaco, monospace, sans-serif;">Isabelle Renaud<br
 id="yiv1008358354yui_3_2_0_111_132694209626456"></div></div></div></div></div></body></html>