<html>
<body>
<font size=3>Luis,<br><br>
Thanks for the example; actually i didn't realise it would be so simple.
Soon i will adapt my code as well,&nbsp; instead of the
BSplineUpsampleFilter that i mentioned earlier, which is a little crude i
have to admit. :-) <br><br>
One question now 'raises in my head' though: would setting the
low-resolution BSplineTransform as a BulkTransform in the high-resolution
transform not give the exact result as well (and then setting the initial
Coefficients of the high-resolution BSpline to zero)?<br><br>
It would be slightly slower maybe (because everytime the TransformPoint
method is called, the TransformPoint method of the BulkTransform will
also be called). But it might be an easy way of getting the exact
solution.<br><br>
Or am i making a big mistake now?<br><br>
Stefan.<br><br>
<br><br>
<br><br>
At 10:15 24/07/04, you wrote:<br><br>
<blockquote type=cite class=cite cite>Hi Karl,<br><br>
1) In theory you are right.<br><br>
&nbsp;&nbsp; The formal way to do this would be to compute the<br>
&nbsp;&nbsp; control points of the high resolution grid directly<br>
&nbsp;&nbsp; from the control points of the low resolution grid.<br>
&nbsp;&nbsp; That's certainly an interesting exercise for an exam<br>
&nbsp;&nbsp; in a numerical methods course, or for a friendly<br>
&nbsp;&nbsp; homework.<br><br>
<br>
2) A semi-pragmatic way to get the control points for<br>
&nbsp;&nbsp; the high resolution spline could be to sample the<br>
&nbsp;&nbsp; deformation field produced by the first stage of<br>
&nbsp;&nbsp; the registration process, then estimate the control<br>
&nbsp;&nbsp; points in the high resolution BSpline that would<br>
&nbsp;&nbsp; generate a good approximation to those sampled<br>
&nbsp;&nbsp; deformations. A classical option is to do a<br>
&nbsp;&nbsp; least-squares minimization in order to find the<br>
&nbsp;&nbsp; control point values.<br><br>
<br>
3) In practice, However...<br>
&nbsp;&nbsp; You just need to initialize the high resolution<br>
&nbsp;&nbsp; BSpline with reasonable values. Once you initialize<br>
&nbsp;&nbsp; the BSpline transform, the *next* thing you do is<br>
&nbsp;&nbsp; to run an iterative optimization method that is<br>
&nbsp;&nbsp; going to refine the BSpline.&nbsp; In that context it<br>
&nbsp;&nbsp; doesn't seem to be too critical to adhere to the<br>
&nbsp;&nbsp; formality of computing the perfect control points<br>
&nbsp;&nbsp; at initialization.<br><br>
<br>
The full formal estimation of the high resolution<br>
control points will be critical if you were going<br>
to use it directly without further refinement...<br>
but then,... given that this high resolution BSpline<br>
will be fully equivalent to the low resolution one,<br>
.... there will be no point in the whole computation<br>
because you could have used the low resolution grid<br>
from the beginning.&nbsp;&nbsp;&nbsp;&nbsp; :-)<br><br>
<br>
If your goal is to publish a paper, you probably want<br>
to do the nice formal theoretical approach in (1).<br>
That will populate your paper with beautiful equations<br>
that will certainly help to impress the reviewers and<br>
the readers with your intelligence and math skills.<br><br>
If want you want is to get these two images registered,<br>
then, you better invest your energy and time in fine<br>
tunning the parameters of the optimizer and in evaluating<br>
the quality of the registration, since after all, the whole<br>
purpose of the second stage of registration is to change<br>
the deformation field represented by the BSpline in order<br>
to better register the two images.<br><br>
<br>
&nbsp;&quot;Flexibility increases your chances for
survival&quot;<br><br>
<br><br>
Regards,<br><br>
<br><br>
&nbsp;&nbsp; Luis<br><br>
<br><br>
------------------<br>
Karl Baum wrote:<br><br>
<blockquote type=cite class=cite cite>Luis,<br>
Thanks for your help.<br>
Could you please clarify something for me though.&nbsp; In the sample
when<br>
initializing the parameters for the second registration, you are finding
the<br>
displacement(deformation) from the first iteration at the coordinates of
the<br>
new control points.&nbsp; You are then using this as the start for the
new<br>
control points.&nbsp; However doesn't this change the deformation.&nbsp;
Because the<br>
control points are not actually on the spline, don't you need to find
a<br>
control point that causes this same displacement, not use this as
the<br>
displacement of our new control point.<br>
Sorry this was hard to explain and sounds confusing.<br>
Thanks,<br>
Karl<br>
-----Original Message-----<br>
From: Luis Ibanez
[<a href="mailto:luis.ibanez@kitware.com" eudora="autourl">mailto:luis.ibanez@kitware.com</a>]
Sent: Friday, July 23, 2004 11:26 AM<br>
To: Karl Baum<br>
Cc: insight-users@itk.org<br>
Subject: Re: [Insight-users] RE: increasing bspline control point
density<br><br>
Hi Karl,<br>
For your convenience we just added an example to ITK<br>
illustrating how you can increase the resolution of<br>
the BSpline transform grid in order to refine a<br>
deformable registration.<br><br>
You will find this new example under:<br>
&nbsp;&nbsp; Insight/Examples/Registration/<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
DeformableRegistration6.cxx<br>
<a href="http://www.itk.org/cgi-bin/viewcvs.cgi/Examples/Registration/DeformableRegis" eudora="autourl">http://www.itk.org/cgi-bin/viewcvs.cgi/Examples/Registration/DeformableRegis</a><br>
tration6.cxx?root=Insight<br>
You will have to update your CVS checkout in order<br>
to get this new file.<br><br>
The example is mostly based on DeformableRegistration4.cxx,<br>
and a second stage was added in which another BSpline<br>
transform with higher resolution grid is configured.<br>
Please let us know if you find any problems or<br>
have further questions.<br><br>
&nbsp;&nbsp;&nbsp; Thanks<br><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Luis<br><br>
----------------<br>
Karl Baum wrote:<br><br>
<blockquote type=cite class=cite cite>Jim,<br>
You are correct in stating that I would like to &quot;upsample&quot; the
B-Spline</blockquote>and<br><br>
<blockquote type=cite class=cite cite>not the image.<br>
Thanks,<br>
Karl<br><br>
<br>
Date: Fri, 23 Jul 2004 10:25:43 -0400<br>
From: &quot;Miller, James V (Research)&quot;
&lt;millerjv@crd.ge.com&gt;<br>
Subject: RE: [Insight-users] increasing bspline control point
density<br>
To: &quot;'Stefan Klein'&quot; &lt;stefan@isi.uu.nl&gt;,
insight-users@itk.org<br><br>
I think the BSplineUpsampleImageFilter upsamples an image via
B-spline<br>
interpolation. I think Karl wants to &quot;upsample&quot; his B-spline
not an image.<br>
Jim<br><br>
-----Original Message-----<br>
From: Stefan Klein
[<a href="mailto:stefan@isi.uu.nl" eudora="autourl">mailto:stefan@isi.uu.nl</a>]<br>
Sent: Friday, July 23, 2004 9:21 AM<br>
To: insight-users@itk.org<br>
Subject: RE: [Insight-users] increasing bspline control point
density<br><br>
<br>
Hi Karl,<br><br>
You may use the itk::BSplineUpsampleImageFilter.<br>
Look at the help of itk::BSplineUpsampleImageFilterBase. There it's<br>
explained how it works.<br><br>
Regards,<br>
Stefan.<br><br>
<br><br>
<br>
At 08:46 23/07/04, Miller, James V (Research) wrote:<br><br>
<br>
I do not think ITK provides a mechanism for increasing the number of
control points in a B-spline grid.&nbsp; However, the mathematics of
B-splines<br>
do support this operation.&nbsp; There are formulas for adding a control
point<br>
to a B-spline that maintain the trace of the B-spline (shape of the<br>
B-spline).<br><br>
Any good book on B-splines will provide the formulas. <br>
Jim<br><br>
<br><br>
-----Original Message-----<br>
From: Karl Baum [
<a href="mailto:kgbaum@syr.edu" eudora="autourl">mailto:kgbaum@syr.edu</a>
&lt;<a href="mailto:kgbaum@syr.edu" eudora="autourl">mailto:kgbaum@syr.edu</a>&gt; ]<br>
Sent: Thursday, July 22, 2004 5:22 PM<br>
To: insight-users@itk.org<br>
Subject: [Insight-users] increasing bspline control point density<br><br>
<br>
Hi,<br>
I am using BSplines to provide the transformations necessary for my<br>
registration.&nbsp; I would like to take an iterative approach where I first do<br>
registration with a low control point density, and then use the results as<br>
input to a registration with a higher control point density.&nbsp; The issue I</blockquote>am<br><br>
<blockquote type=cite class=cite cite>facing at this point in time is how to initialize the parameters of the<br>
second iteration with the results of the first iteration.&nbsp; In other words</blockquote>I<br><br>
<blockquote type=cite class=cite cite>need to take the grid defined by the deformation coefficients of the first<br>
iteration, and use it as input into the second.&nbsp; To do this I need to<br>
calculate the starting deformation coefficients on the higher density</blockquote>grid. <br>
<blockquote type=cite class=cite cite>Does itk provide anything to do this?&nbsp; I was unable to find any<br>
documentation addressing this.<br><br>
Thanks,<br>
Karl<br><br>
<br>
_______________________________________________<br>
Insight-users mailing list<br>
Insight-users@itk.org<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" eudora="autourl">http://www.itk.org/mailman/listinfo/insight-users</a><br>
</blockquote><br><br>
<br>
_______________________________________________<br>
Insight-users mailing list<br>
Insight-users@itk.org<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" eudora="autourl">http://www.itk.org/mailman/listinfo/insight-users</a><br>
</blockquote><br><br>
<br>
_______________________________________________<br>
Insight-users mailing list<br>
Insight-users@itk.org<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" eudora="autourl">http://www.itk.org/mailman/listinfo/insight-users</a></font></blockquote></body>
<br>
</html>