[Insight-users] Spline smoothing distance and N4ITK parameters

Nicholas Tustison ntustison at gmail.com
Thu Sep 3 23:10:24 EDT 2009


Hi Andriy,

As I mentioned in our previous correspondence the B-spline fitting  
algorithm is the only methodological difference between N4ITK and  
Sled's original MNI implementation (N3MNI).  The actual smoothing  
routine that N3MNI uses and which Sled discusses in his paper is a  
fairly standard B-spline fitting routine with regularization.   
Although smoothing has a large impact on the results, as noted by  
Sled, the actual smoothing function is a relatively minor contribution  
(in terms of novelty) of the N3 work.

Having said that, when I implemented N4ITK, my decision to use my  
previously contributed B-spline fitting filter was motivated not only  
by the fact that it was already implemented in ITK and I was familiar  
with the code, but it also has the advantage over previous B-spline  
fitting routines in that it is not susceptible to ill-conditioning.   
Although I plan to augment the current technical document associated  
with N4ITK to address your questions (complete with pictures), let me  
see if I can provide a little insight into your questions.

First, just so we're on the same page, the "spline distance" refers to  
the distance between control points in the control point grid, or  
equivalently, the length of a B-spline mesh element.  Changing the  
spline distance varies the locality of the fitted B-spline object.

Now, let me try to give a brief overview in the B-spline fitting  
routine differences.

Given a set of points, a user-specified parametric domain, and B- 
spline parameters (e.g. control point grid size, spline order),  
traditional B-spline fitting routines build a linear system from those  
set of points.  Solving the linear system to yield the control point  
values can be problematic (i.e. ill-conditioning can occur) depending  
upon the placement of the points within the parametric domain.  So for  
example, if the user specifies a high resolution B-spline mesh for a  
relatively low number of points, the linear system could potentially  
be ill-conditioned.  The B-spline fitting routine that is used in  
N3MNI is of this type which is why an additional weighting parameter  
is used to reduce the possibility of ill-conditioning.

N4ITK  uses a generalization of a fitting routine proposed in 1997 by  
Lee et al. which I generalized and contributed to ITK (the references  
are given in the Doxygen documentation for the  
itkBSplineScatteredDataPointSetToImageFilter).  Instead of building a  
linear system, the algorithm iterates through the points and updates  
the control point values as it visits each point (which eliminates the  
possibility of ill-conditioning).   In addition, the user can specify  
a number of fitting levels where each fitting level employs a B-spline  
mesh that is twice the resolution of the previous level.  When  
progressing to the next level, the solution at the previous level is  
propagated to the current level and further refined.  The default  
parameters cause N4ITK to start with a single B-spline mesh element  
encompassing the entire 3-D input image and perform fitting for a  
total of four levels such that the first level has 1x1x1 B-spline mesh  
element, the second level has 2x2x2 B-spline mesh elements, the third  
level has 4x4x4 B-spline mesh elements, and the fourth level has 8x8x8  
B-spline mesh elements.  Since the parametric domain remains the same  
size, the "spline distance" gets smaller at each level.

So, yes, you can vary the "spline distance" by varying the number of  
levels and number of control points at the base level.  However,  
unlike in N3MNI, you can't simply specify the "spline distance"  
directly, as you point out, by calling a function SetSplineDistance 
( RealType ) as N4ITK is written now.  I thought about writing the  
code that way but there were a number of issues that persuaded me from  
doing so.

Like I said, I'll try to add something to the technical document to  
clarify the difference.  In the meantime, let me know if you have  
further questions.

Good luck,
Nick




On Sep 3, 2009, at 2:22 PM, Andriy Fedorov wrote:

> Hi,
>
> I am trying to use the N4ITK implementation
>
> http://www.midasjournal.org/browse/publication/640
>
> for intensity inhomogeneity correction in brain MRI images for
> longitudinal analysis.
>
> Some of the recent publications emphasize the importance of the proper
> selection of the spline distance that controls the smoothness of the
> derived field, especially for the higher field imaging:
>
> http://dx.doi.org/10.1016/j.neuroimage.2007.10.026
> http://dx.doi.org/10.1016/j.neuroimage.2009.06.039
>
> It seems that N4ITK does not allow to control this spline distance
> parameter, at least not directly. I would greatly appreciate if anyone
> could confirm or (much better) debunk my observation. I see that it is
> possible to set the number of spline control points -- is this
> essentially setting the spline distance parameter implicitly?
>
> I am not familiar with all the details of Sled's algorithm, which is
> implemented in N4ITK, so I would greatly appreciate any clarification
> on how/if the spline distance parameter can be properly controlled.
>
> Thank you
>
> --
> Andriy Fedorov, Ph.D.
>
> Research Fellow
> Brigham and Women's Hospital
> Harvard Medical School
> 75 Francis Street
> Boston, MA 02115 USA
> fedorov at bwh.harvard.edu



More information about the Insight-users mailing list