<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;"><div>Glad to hear that :)</div><div><br></div><div>Tuning an optimization is completely application specific. The purpose of registration,&nbsp;</div><div><br></div><div>the images and the used components should be all&nbsp;matched together to get the best</div><div><br></div><div>results. Most of the time this is a trial-and-error process, but in general you should&nbsp;</div><div><br></div><div>consider the following.&nbsp;</div><div><br></div><div>First thing to figure out is parameter setting of the B-Spline&nbsp;transformation, in particular</div><div><br></div><div>number of grid nodes (grid size), large number of&nbsp;grid nodes&nbsp;will result in a more smooth</div><div><br></div><div>deformation but with higher computational cost. In my&nbsp;experince starting with a grid size of</div><div><br></div><div>5-6 (2&nbsp;grid size on image + 3 border grid
 size) seems&nbsp;to have good results, based on the</div><div><br></div><div>resulting deformation optimal grid size can be assigned.</div><div><br></div><div>Once you figure out the transformation parameters the optimization parameters can be</div><div><br></div><div>tuned, first thing to do is to scale the registration&nbsp;parameters so values of different range</div><div><br></div><div>have a normalized effect on the optimization (e.g. DeformableRegistration15.cxx) and then</div><div><br></div><div>start evaluating the registration with the&nbsp;default parameters and with low number of</div><div><br></div><div>iterations, cost function evaluations and corrections (e.g. #iterations 50, #function</div><div><br></div><div>evaluations 100 and #corrections 10), this way you can avoid computational overload.</div><div><br></div><div>Usually during the evaluation initial estimate of other optimization parameters is obtained,</div><div><br></div><div>five
 main parameters that should be tuned (common to most optimizers) are gradient&nbsp;</div><div><br></div><div>tolerance, cost function convergence factor, min/max step lengths and relaxation factor.</div><div><br></div><div>Gradient tolerance determines a lower threshold which cuases the&nbsp;optimization to stop if its</div><div><br></div><div>value reached, recommended values for gradient tolerance are 1e-6 to 1e-10, higher values</div><div><br></div><div>might result in&nbsp;premature elimination of the optimization process. The optimizer stops if the</div><div><br></div><div>reduction of the cost function value is lower than the assigned&nbsp;convergence factor, lower</div><div><br></div><div>values&nbsp;have higher accuracy, usual range of convergence factor values are, 1e+1 (high</div><div><br></div><div>accuracy),&nbsp;1e+7&nbsp;(moderate accuracy) and 1e+12 (low accuracy). Min and max (initial) step</div><div><br></div><div>lengths&nbsp;determine
 the allowed range of step length changes, for noisy metrics usually min</div><div><br></div><div>step&nbsp;length is high so the optimizer would not fall into the local extrema, range of values for</div><div><br></div><div>min/max step lengths are between 0.001and 0.1. The relaxation factor controls the rate</div><div><br></div><div>which step lengths are reduced, lower values will shrink the step length which also might</div><div><br></div><div>result in a local exrema (range of values= 0.5-10.0). The first optimization parameter to tune</div><div><br></div><div>is the convergence factor then gradient tolerance and after that the step lenghts and</div><div><br></div><div>relaxation factor, notice that it is best to start with the default values which lower the</div><div><br></div><div>computation time and continue from there. You can also assign a lower and upper bound for</div><div><br></div><div>the optimization search space with the
 SetLower/UpperBound method. Other parameter</div><div><br></div><div>settings are ralated to the type of metric used and they also should be considered with</div><div><br></div><div>regards to accuracy and computation time. I think this is just about enough to get things</div><div><br></div><div>working, if other memebers have any additional information that I have missed it would be</div><div><br></div><div>great to share it with&nbsp;us.&nbsp;</div><div><br></div><div>P.S., each of the aforementioned parameters and methods are specific to certain optimizers</div><div><br></div><div>and some may not be supported by a certain optimizer.</div><div><br></div><div>Best regards,</div><div><br></div><div>Dawood</div><br>--- On <b>Mon, 3/21/11, Brecht Heyde <i>&lt;Brecht.Heyde@med.kuleuven.be&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Brecht Heyde
 &lt;Brecht.Heyde@med.kuleuven.be&gt;<br>Subject: RE: [Insight-users] DeformableRegistration4.cxx error?<br>To: "Dawood Masslawi" &lt;davoud_zzz@yahoo.com&gt;<br>Cc: "insight-users@itk.org" &lt;insight-users@itk.org&gt;<br>Date: Monday, March 21, 2011, 8:43 AM<br><br><div class="plainMail">Hi Dawood,<br><br>Thanks for the suggestion. I reran the example and it seems to work just fine: the borders of the rat lungs seems to be mapped unto each other after registration.<br><br>Do you have any suggestions in tuning optimizer parameters in the context of B-spline registration?<br><br>Best regards,<br>Brecht<br>________________________________________<br>From: <a ymailto="mailto:insight-users-bounces@itk.org" href="/mc/compose?to=insight-users-bounces@itk.org">insight-users-bounces@itk.org</a> [<a ymailto="mailto:insight-users-bounces@itk.org" href="/mc/compose?to=insight-users-bounces@itk.org">insight-users-bounces@itk.org</a>] On Behalf Of Dawood Masslawi
 [<a ymailto="mailto:davoud_zzz@yahoo.com" href="/mc/compose?to=davoud_zzz@yahoo.com">davoud_zzz@yahoo.com</a>]<br>Sent: 19 March 2011 15:04<br>To: Brecht Heyde<br>Cc: <a ymailto="mailto:insight-users@itk.org" href="/mc/compose?to=insight-users@itk.org">insight-users@itk.org</a><br>Subject: Re: [Insight-users] DeformableRegistration4.cxx error?<br><br>Hi Brecht,<br><br>The "DeformableRegistration13.cxx" example uses the RegularStepGradientDescent<br><br>optimizer for 2D images. Using the same settings should work for your code.<br><br>Good
 luck,<br><br>Dawood<br><br><br>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br><br>&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br><br><br><br>Hi all,<br><br>I forgot to mention that I found a similar post on the ITK user list back in 2009: <a href="http://itk-insight-users.2283740.n2.nabble.com/Problem-with-DeformableRegistration4-cxx-example-td3218635.html" target="_blank">http://itk-insight-users.2283740.n2.nabble.com/Problem-with-DeformableRegistration4-cxx-example-td3218635.html</a><br><br>Has
 anything been resolved since then? I'll try rerunning the example with a RegularStepGradientDescent optimizer.<br>Has anyone found any acceptable settings for the optimizer? Something along the lines of:<br>optimizer-&gt;MinimizeOn();<br>optimizer-&gt;SetMaximumStepLength(2.00);<br>optimizer-&gt;SetMinimumStepLength(0.001);<br>optimizer-&gt;SetNumberOfIterations(200);<br><br>Where and how would you start tuning this optimizer for this fairly large amount of parameters (already in 2D)?<br><br>Regards,<br>Brecht<br>________________________________________<br>From: Brecht Heyde<br>Sent: 18 March 2011 20:20<br>To: insight-users at itk.org&lt;<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a>&gt;<br>Cc: Brecht Heyde<br>Subject: DeformableRegistration4.cxx error?<br><br>Dear all,<br><br>I just tried running Examples/Registration/DeformableRegistration4.cxx/.<br>Is it normal that
 the stop condition of the LBFGS optimizer gives me an error: "vnl_lbfgs: Error. Netlib routine lbfgs failed."?<br><br>Also, I compared the differences after registration and they are still fairly large (see attachments)<br><br>Please find the output of the program below:<br><br>--<br>&gt;DeformableRegistration4 ..\..\data\RatLungSlice1.mha ..\..\data\RatLungSlice2.mha ..\..\data\RatLungSlice2deformed.mha ..\..\data\differenceoutput.mha ..\..\data\differencebefore.mha ..\..\data\deformfield.mha<br><br>Intial Parameters =<br>[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,<br> 0, 0, 0, 0, 0, 0, 0, 0]<br><br>Starting
 Registration<br>*************************************************<br>&nbsp; N=128&nbsp;&nbsp;&nbsp;NUMBER OF CORRECTIONS=5&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;INITIAL VALUES F= 169.433&nbsp;&nbsp;&nbsp;GNORM= 16.0675<br>*************************************************<br>&nbsp;&nbsp;&nbsp;I&nbsp;&nbsp;&nbsp;NFN&nbsp; &nbsp; FUNC&nbsp; &nbsp; &nbsp; &nbsp; GNORM&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;STEPLENGTH<br>&nbsp;&nbsp;&nbsp;1&nbsp; &nbsp; 2&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;139.836&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;9.070&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;0.062<br>&nbsp;&nbsp;&nbsp;2&nbsp; &nbsp; 3&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;127.553&nbsp; &nbsp; &nbsp; 10.676&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.500<br>&nbsp;&nbsp;&nbsp;3&nbsp; &nbsp; 4&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;113.837&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;8.462&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.500<br>&nbsp;&nbsp;&nbsp;4&nbsp; &nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; 98.974&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;5.939&nbsp; &nbsp;
 &nbsp;&nbsp;&nbsp;1.500<br>&nbsp;&nbsp;&nbsp;5&nbsp; &nbsp; 6&nbsp; &nbsp; &nbsp; &nbsp; 94.611&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;4.260&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.500<br>&nbsp;&nbsp;&nbsp;6&nbsp; &nbsp; 7&nbsp; &nbsp; &nbsp; &nbsp; 93.683&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.780&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.500<br>&nbsp;&nbsp;&nbsp;7&nbsp; &nbsp; 8&nbsp; &nbsp; &nbsp; &nbsp; 92.602&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.161&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.500<br>&nbsp;&nbsp;&nbsp;8&nbsp; &nbsp; 9&nbsp; &nbsp; &nbsp; &nbsp; 91.093&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.608&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.500<br>&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;10&nbsp; &nbsp; &nbsp; &nbsp; 90.869&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.485&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.500<br>&nbsp; 10&nbsp;&nbsp;&nbsp;12&nbsp; &nbsp; &nbsp; &nbsp; 90.796&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1.187&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;0.228<br>&nbsp; 11&nbsp;&nbsp;&nbsp;14&nbsp; &nbsp; &nbsp; &nbsp;
 90.717&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;0.954&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;0.220<br>&nbsp; 12&nbsp;&nbsp;&nbsp;16&nbsp; &nbsp; &nbsp; &nbsp; 90.694&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;0.822&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;0.129<br>&nbsp; 13&nbsp;&nbsp;&nbsp;18&nbsp; &nbsp; &nbsp; &nbsp; 90.666&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;0.720&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;0.125<br> IFLAG= -1&nbsp; LINE SEARCH FAILED. SEE DOCUMENTATION OF ROUTINE MCSRCH ERROR RETURN OF LINE S<br>EARCH: INFO= 3 POSSIBLE CAUSES: FUNCTION OR GRADIENT ARE INCORRECT OR INCORRECT TOLERANCES<br>vnl_lbfgs: Error. Netlib routine lbfgs failed.<br>Optimizer stop condition = LBFGSOptimizer: Failure<br>Last Transform Parameters<br>[0.011861, 0.0530738, -0.114476, -0.0014865, 0.0148372, -0.0549163, -0.00438914, 0, 0.1025<br>66, 0.502715, -0.762941, 0.35145, 0.153952, -0.63219, -0.0498668, 0, 0.00738199, 0.0666841<br>, 0.570735, -0.0706879, -0.17164, -0.115005, -0.0396254, 0, 0.0192471, 0.09889,
 -0.943169,<br> -0.647905, 0.172792, -0.181095, 0.0226301, 0, 0.050406, 0.190277, -0.870343, 0.320529, 0.<br>489361, -0.130754, 0.0165127, 0, -0.00494977, 0.0367683, -0.134814, -0.0234467, -0.487765,<br> -0.12967, -0.00325786, 0, -0.00218239, -0.0164876, -0.00720033, 0.013605, -0.0421713, -0.<br>00401046, -0.000156239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.000118737, -0.027066, -0.0382732, 0.0<br>483314, 0.121524, 0.0467903, 0.000733309, 0, -0.0314756, -0.494522, -0.152103, 0.605314, 0<br>.417874, 0.0194144, 0.00334922, 0, -0.00976682, 0.459453, 1.36226, 0.784408, -0.443754, -0<br>.712014, -0.000740298, 0, 0.051106, -0.530244, -3.37043, -2.10846, 0.0149461, 0.0297596, -<br>0.00694551, 0, 0.0164421, -0.761362, -2.79346, -2.53847, -0.683093, 0.206363, -0.00512468,<br> 0, 0.0233849, 0.154342, -0.42728, -1.65801, -1.25134, -0.0402723, 0.00227039, 0, 0.000605<br>736, 0.00629161, -0.0126661, -0.176088, -0.174036, -0.00030687, 0.00118331, 0, 0, 0, 0, 0,<br> 0, 0, 0,
 0]<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Probe Tag&nbsp; &nbsp; Starts&nbsp; &nbsp; Stops&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;Time (s)<br>&nbsp; &nbsp; &nbsp; &nbsp; Registration&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;28.9173<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Probe Tag&nbsp; &nbsp; Starts&nbsp; &nbsp; Stops&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;Memory (kB)<br>&nbsp; &nbsp; &nbsp; &nbsp; Registration&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;396<br><br>--<br>CMakeLists.txt<br>PROJECT( RegistrationExamples )<br><br>CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )<br><br># Find ITK<br>IF ( NOT EXISTS ${ITK_BINARY_DIR} )<br>&nbsp; SET( ITK_BINARY_DIR "" CACHE PATH "Path to ITK binary folder" )<br>&nbsp; MESSAGE( FATAL_ERROR "ITK binary
 directory ${ITK_BINARY_DIR} does not exist!" )<br>ELSE()<br>&nbsp; &nbsp;&nbsp;&nbsp;#Manually include ITKConfig.cmake and UseITK.cmake.<br>&nbsp; &nbsp;&nbsp;&nbsp;#This is also done if ITK is found automatically: IF(ITK_FOUND) includes FindITK.cmake from C:\CMake 2.8\share\cmake-2.8\Modules<br>&nbsp; &nbsp;&nbsp;&nbsp;#In FindITK.cmake ITKConfig.cmake and UseITK.cmake are included<br>&nbsp; MESSAGE ( STATUS "Including ITKConfig.cmake" )<br>&nbsp; INCLUDE ( ${ITK_BINARY_DIR}/ITKConfig.cmake )<br>&nbsp; MESSAGE ( STATUS "Including UseITK.cmake" )<br>&nbsp; INCLUDE ( ${ITK_BINARY_DIR}/UseITK.cmake )<br>ENDIF()<br>MESSAGE( STATUS "ITK binary directory: ${ITK_BINARY_DIR}" )<br><br>ADD_EXECUTABLE(DeformableRegistration4 DeformableRegistration4.cxx )<br>TARGET_LINK_LIBRARIES(DeformableRegistration4 ITKIO ITKNumerics ITKStatistics ITKAlgorithms ITKBasicFilters ITKFEM)<br>--<br><br>Does anyone see any problems here?<br>Thanks!<br><br>Best regards,<br>Brecht
 Heyde<br><br><br></div></blockquote></td></tr></table><br>