[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