Hi Luis,<br><br>Thanks for your answer.<br><br>I tried it  (3D and modified 2d version) but it doesn&#39;t work. The link shows fixed, moving images and differences before and after registration: <a href="http://img207.imageshack.us/img207/2383/deformablereg15.png">http://img207.imageshack.us/img207/2383/deformablereg15.png</a>.<br>
However, my goal is finding only deformable transform, because previously I modified the image only applying non-rigid transformation (I know that my test images don&#39;t have rigid and affine transformation).<br><br>I don&#39;t know where is the problem. I&#39;ve done all kind of tests (2D, 3D, changing the metric, smoomthing images, changing number of colous...). I explain to you in detail:<br>
<br>The basic code uses LBFGSBOptimizer, MattesMutualInformation and only one BSplineDeformableTransfrom in 3 dimensions (based on DeformableRegistration8.cxx). This works correctly with 3D phantom images as you can see in the next link: <a href="http://img140.imageshack.us/img140/1831/phantomdeformableregist.png">http://img140.imageshack.us/img140/1831/phantomdeformableregist.png</a>. Also I modified the code to use with 2D images, and the result is the same taking one slice of the phantom.<br>
<br>The parameters of the LBFGSBoptimizer are setting like this:<br><br>  double costFunctionconvergenceFactor = 1e-3;<br>  double projectedGradientTolerance = 1e-12;<br>  int maxNumberOfIterations = 500;<br>  int maxNumberOfEvaluations = 500 ;<br>
  int maxNumberOfCorrections = 20;<br><br>The problem appears when I use MRI prostate images of real patient. The registration should recovery the same deformation that it has recovered in phantom images, but it doesn&#39;t work. The prostate images have these features:<br>
<br>Spacing =  [0.46875, 0.46875, 3]<br>Size = [128, 128, 21]<br>Origin = [0, 0, 0]<br>Resolution = 8 bits<br><br>The following part of the mail are the tests I&#39;ve done in order to find the problem. I noticed that working with 2D slices of the volume I has the same problem. For this reason the tests are done in 2D because 3D registration spends more time. In all tests I&#39;ve tried differents values of bins  (16,32 and 64) and nodes of grid (from 4 to 30), and the number of samples are 100% of the image. You can see  fixed and moving image in this link: <a href="http://img339.imageshack.us/img339/6524/fixedandmoving.png">http://img339.imageshack.us/img339/6524/fixedandmoving.png</a>.<br>
<br>2D TESTS:<br> <br>- My original code cited before: it doesn&#39;t work. Most of test do few iterations for little grid (4 - 15). Increasing the grid (20) I achieve more iterations, but no good results. The next link is the checkerboard after the registration with 20 nodes: <a href="http://img34.imageshack.us/img34/783/2doriginaltest.png">http://img34.imageshack.us/img34/783/2doriginaltest.png</a>.<br>
<br>- Smoothing, binarizing and dicreasing  the colors of fixed and moving image.  Each of this pre-process had been applied and tested separately not achieving good results (the same output as in the last test). <a href="http://img36.imageshack.us/img36/2329/preprocessedimages.png">http://img36.imageshack.us/img36/2329/preprocessedimages.png</a><br>
<br>- Taking only a region of the image in order to focus the registration. In this case I&#39;ve extracted the first quadrant that corresponds to the part where the deformation was applied obtaining a 64x64 image.<br><br>
- Changing MattesMutualInformationMetric for MeanSquaresMetric: In this case I&#39;ve got better results and I&#39;ve seen a transformation applied to the moving image. The number of nodes of the grid in the best test is 5. <a href="http://img20.imageshack.us/img20/3776/rmstest2dresult.png">http://img20.imageshack.us/img20/3776/rmstest2dresult.png</a><br>
<br><br>Any idea where is the problem? The metric? The optimizer? I&#39;ve also tried RegularGradientOptimizer with MI and the results are the same.<br><br>Thanks in advance.<br><br>Albert<br><br><br><br>
<br><div class="gmail_quote">2009/5/21 Luis Ibanez <span dir="ltr">&lt;<a href="mailto:luis.ibanez@kitware.com" target="_blank">luis.ibanez@kitware.com</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<br>
Hi Albert,<br>
<br>
Please try try using:<br>
<br>
<br>
       DeformableRegistration15.cxx<br>
<br>
<br>
This example performs a sequence of<br>
<br>
<br>
   * Rigid<br>
   * Affine<br>
   * and two resolutions of<br>
     deformable registration<div><br>
<br>
<br>
Please let us know what you find,<br>
<br>
<br>
    Thanks<br>
<br>
<br>
       Luis<br>
<br>
---------------------<br></div>
Albert Gubern wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div></div><div>
Hi again,<br>
<br>
I&#39;ve changed my code using RegularStepGradientDescentOptimizer instead of LBFGSBOptimizer.<br>
<br>
Using brain phantom volume, I had good visual results (the moving image is transformed looking like fixed image) with LBFGSBOptimizer, and the final value of the metric was  -0.836697.<br>
<br>
Starting Registration<br>
0   -0.580566   0 0<br>
0   -0.580643   0 0<br>
0   -0.583835   0 0<br>
0   -0.583835   0.000114794 0<br>
1   -0.598343   0.000114794 0<br>
1   -0.598343   7.34998e-05 0<br>
2   -0.617556   7.34998e-05 0<br>
2   -0.617556   0.000133695 0<br>
(...)<br>
83   -0.836697   0.000103487 0<br>
83   -0.836697   0.000103487 0<br>
83   -0.836686   0.000103487 0<br>
83   -0.836697   0.000103487 0<br>
83   -0.836697   0.000103487 0<br>
83   -0.836686   0.000103487 0<br>
83   -0.836697   0.000103487 0<br>
83   -0.836697   0.000103487 0<br>
<br>
On the other hand, using RegularStepGradientDescentOptimizer the final value of the metric with 800 iterations is -0.638617 and the resampled image is not good and only is deformed in their first and last slices. With MRI prostate volume I had the same problem: the transformation only deforms the first and the last slice of the volume.<br>


<br>
 Starting Registration<br>
0   -0.580566 1   -0.57976 2   -0.579975 3   -0.579813 4   -0.580218 5   -0.580442 (...)<br>
793   -0.637725 794   -0.637952 795   -0.637915 796   -0.637942 797   -0.638316 798   -0.637498 799   -0.638617<br>
<br>
I&#39;ve set the stepLength of the optimizer but I haven&#39;t achieved better metric values progress in each step of the registration. Also, I don&#39;t understand why the output image only is transformed in the first and the last slice.<br>


<br>
So, having in consideration that with  LBFGSBOptimizer I have good results registering the brain phantom volume, I would like to know how can I tune this optimizer in order to work with MRI prostate images.<br>
<br>
If we need more information about my code, don&#39;t doubt to ask me.<br>
<br>
Thanks.<br>
<br>
Albert<br>
<br></div></div>
2009/5/12 Luis Ibanez &lt;<a href="mailto:luis.ibanez@kitware.com" target="_blank">luis.ibanez@kitware.com</a> &lt;mailto:<a href="mailto:luis.ibanez@kitware.com" target="_blank">luis.ibanez@kitware.com</a>&gt;&gt;<div>
<br>
<br>
    Hi Albert,<br>
<br>
    It turned out in practice that the LBFGSBOptimizer is not as superior<br>
    as it may have been assumed.<br>
<br>
    Lately we have simply used the RegularStepGradientDescentOptimizer<br>
    with reasonable results.<br>
<br>
    See for example:<br>
<br>
        Insight/Examples/Registration/DeformableRegistration15.cxx<br>
<br>
    In general,<br>
    any claims saying than some component is<br>
<br>
                                 &quot;The Best&quot;<br>
<br>
    should be taken with a lot of suspicion.<br>
<br>
<br>
    Such claims are good only for publishing papers in traditional<br>
    Journals and Conferences that do not exercise reproducibility.<br>
    You can not rely on such sources when you are working on<br>
    serious applications.<br>
<br>
<br>
    Don&#39;t hesitate to experiment with other components of the<br>
    registration framework.<br>
<br>
    In many cases, the challenge is not so much about what components<br>
    to use, but about how to fine-tune their parameters for the problem<br>
    at hand.<br>
<br>
<br>
    Please let us know what you find,<br>
<br>
<br>
        Thanks<br>
<br>
<br>
             Luis<br>
<br>
<br>
    -------------------------<br>
    On Tue, May 12, 2009 at 11:21 AM, Albert Gubern &lt;<a href="mailto:bertkrek@gmail.com" target="_blank">bertkrek@gmail.com</a><br></div><div><div></div><div>
    &lt;mailto:<a href="mailto:bertkrek@gmail.com" target="_blank">bertkrek@gmail.com</a>&gt;&gt; wrote:<br>
     &gt; Hi,<br>
     &gt;<br>
     &gt; I&#39;ve modified the example DeformableRegistration8.cxx in order to<br>
    do a 3D<br>
     &gt; DeformableRegistration. This example uses<br>
    MattesMutualInformationMetric,<br>
     &gt; BSplineDeformableTransform and LBFGSBOptimizer.<br>
     &gt;<br>
     &gt; I tested the code with a brain phantom generated with Matlab. The<br>
    original<br>
     &gt; volume is deformed using Matlab b-spline deformation based on<br>
    this routine<br>
     &gt; <a href="http://www.mathworks.com/matlabcentral/fileexchange/20057" target="_blank">http://www.mathworks.com/matlabcentral/fileexchange/20057</a>, and I<br>
    want to use<br>
     &gt; the deformable registration of ITK to recover the deformation.<br>
    The next link<br>
     &gt; shows two checkerboard of one slice, before and after the succesful<br>
     &gt; registration:<br>
     &gt;<br>
    <a href="http://img140.imageshack.us/img140/1831/phantomdeformableregist.png" target="_blank">http://img140.imageshack.us/img140/1831/phantomdeformableregist.png</a>. The<br>
     &gt; original volume is set as the fixed image and the deformed<br>
    phantom as the<br>
     &gt; moving.<br>
     &gt; - Mostra el text citat -<br>
     &gt;<br>
     &gt; The output of the execution is:<br>
     &gt;<br>
     &gt; Starting Registration<br>
     &gt; 0   -0.579387   0 0<br>
     &gt; 0   -0.581355   0 0<br>
     &gt; 0   -0.584345   0 0<br>
     &gt; 0   -0.584345   6.33911e-05 0<br>
     &gt; 1   -0.603649   6.33911e-05 0<br>
     &gt; 1   -0.603649   6.41689e-05 0<br>
     &gt; 2   -0.624884   6.41689e-05 0<br>
     &gt; 2   -0.624884   7.76054e-05 0<br>
     &gt; 3   -0.638071   7.76054e-05 0<br>
     &gt; 3   -0.638071   6.32524e-05 0<br>
     &gt; 4   -0.655438   6.32524e-05 0<br>
     &gt; 4   -0.655438   7.51525e-05 0<br>
     &gt; 5   -0.677776   7.51525e-05 0<br>
     &gt; 5   -0.677776   6.37494e-05 0<br>
     &gt; 6   -0.696669   6.37494e-05 0<br>
     &gt; 6   -0.696669   5.09743e-05 0<br>
     &gt; 7   -0.713613   5.09743e-05 0<br>
     &gt; 7   -0.713613   5.48518e-05 0<br>
     &gt; ... (60 iterations more)<br>
     &gt; 67   -0.854863   4.01611e-05 0<br>
     &gt; 67   -0.854863   4.01611e-05 0<br>
     &gt; 67   -0.854863   4.01611e-05 0<br>
     &gt; 67   -0.854863   4.01611e-05 0<br>
     &gt;          Probe Tag    Starts    Stops             Time (s)<br>
     &gt;        Registration           1            1           3289.35<br>
     &gt;<br>
     &gt; Next step was to test the same code with prostate MRI images but the<br>
     &gt; registration doesn&#39;t work. The original volume is a central<br>
    region of MRI to<br>
     &gt; focus the registration on the prostate<br>
     &gt; (<a href="http://img145.imageshack.us/img145/200/mrireal.png" target="_blank">http://img145.imageshack.us/img145/200/mrireal.png</a>), and the same<br>
     &gt; deformation, that was applied to the phantom test, is used to<br>
    deform the<br>
     &gt; original prostate. The goal of the registration is the same:<br>
    recovering the<br>
     &gt; deformation. The next link is a checkerboard of one slice of the<br>
    volume to<br>
     &gt; show that fixed and moving images look different enough<br>
     &gt; (<a href="http://img26.imageshack.us/img26/8905/im011.png" target="_blank">http://img26.imageshack.us/img26/8905/im011.png</a>).<br>
     &gt;<br>
     &gt; In this test the program the registration stops too early doing<br>
    only few<br>
     &gt; iterations and the InfinityNormOfProjectedGradient is always zero:<br>
     &gt;<br>
     &gt; Starting Registration<br>
     &gt; 0   -0.742878   0 0<br>
     &gt; 0   -0.722791   0 0<br>
     &gt; 0   -0.721167   0 0<br>
     &gt; 0   -0.721134   0 0<br>
     &gt; 0   -0.733701   0 0<br>
     &gt; 0   -0.733701   0 0<br>
     &gt; 0   -0.742878   0 0<br>
     &gt; 0   -0.742878   0.000122748 0<br>
     &gt;          Probe Tag    Starts    Stops             Time (s)<br>
     &gt;        Registration           1            1           97.3459<br>
     &gt;<br>
     &gt; I have tested the registration using different values of bins<br>
     &gt; (32,64,100,etc), % samples (100, 50, ...), using the original<br>
     &gt; (0.46875,0.46875,0.46875) and the unitary spacing, different<br>
    number of grids<br>
     &gt; (from 5 to 50) and the parameters of the LBFGSBOptimizer are the<br>
    following:<br>
     &gt;<br>
     &gt;  double costFunctionconvergenceFactor = 1.e7;<br>
     &gt;  double projectedGradientTolerance = 1e-6;<br>
     &gt;  int maxNumberOfIterations = 500;<br>
     &gt;  int maxNumberOfEvaluations = 500 ;<br>
     &gt;  int maxNumberOfCorrections = 5;<br>
     &gt;<br>
     &gt; Among other tests, I&#39;ve also changed the metric to<br>
    MeanSquareMetric to know<br>
     &gt; if mattes mutual information metric is the problem or,<br>
    separately, the fixed<br>
     &gt; and moving image have been binarized to reduce the information of<br>
    each<br>
     &gt; image. The output has been the same.<br>
     &gt;<br>
     &gt; All the tests seem to show that the problem is the optimizer, but<br>
    I don&#39;t<br>
     &gt; know how I can solve it because in some posts in the mailing list<br>
    I&#39;ve read<br>
     &gt; that it is the best optimizer for deformable registration. Should<br>
    I change<br>
     &gt; it for another one (Regular or LBFGS)? Any other idea?<br>
     &gt;<br>
     &gt; Thanks in advance.<br>
     &gt;<br>
     &gt; Albert<br>
     &gt; _____________________________________<br></div></div>
     &gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a> &lt;<a href="http://www.kitware.com" target="_blank">http://www.kitware.com</a>&gt;<div><br>
     &gt;<br>
     &gt; Visit other Kitware open-source projects at<br>
     &gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
     &gt;<br>
     &gt; Please keep messages on-topic and check the ITK FAQ at:<br>
     &gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
     &gt;<br>
     &gt; Follow this link to subscribe/unsubscribe:<br>
     &gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
     &gt;<br>
     &gt;<br>
<br>
<br>
<br>
<br>
-- <br>
Albert<br>
</div></blockquote>
</blockquote></div><br><br clear="all"><br>-- <br>Albert<br>