Symmetric diffeomorphic non-linear registration

This is a Python/Cython implementation of Avant's mid-point algorithm for symmetric diffeomorphic non-linear registration. We basically reverse-engineered the reference implementation available in ANTS.

This module includes the basic features for volumetric registration:
* The SyN algorithm using free-form deformation fields (a displacement vector per voxel) in 2D and 3D
* Two metrics: Sum of Squared Differences (SSD) and Cross Correlation (CC) 

To validate our implementation, we reproduced the results reported in Rohlfing's [1] paper to make sure we can obtain equivalent results as ANTS with the same number of iterations. This validation consists on registering 18 manually annotated brains (the IBSR database) with each other (306 registrations in total) and comparing the overlap of 31 anatomical areas after registration using the Jaccard index. 

Since this is a long pull request we would also like to have a hang out to explain the main structure, algorithms and tests so that it's easier for you to go through the code.

[1] Rohlfing, T. (2012). Image similarity and tissue overlaps as surrogates for image registration accuracy: widely used but unreliable. IEEE Transactions on Medical Imaging, 31(2), 153–63. doi:10.1109/TMI.2011.2163944
No problem, I'll make it go from coarse to fine. I made it go from fine to
coarse because that's the order of the pyramid (as far as I know, the 0th
level is traditionally the finest one), and I wanted them to be consistent,
otherwise level_iters[k] is the number of iterations used for [n-1-k]th
pyramid level... but I agree that it may be confusing for most people,
especially because coarse-to-fine is how the algorithm proceeds and it is
also the convention in ANTS.
Thanks! =)


On Thu, Jun 26, 2014 at 4:10 AM, Matthew Brett <notifications@github.com>
wrote:

> In dipy/align/imwarp.py:
>
> > +            the object measuring the similarity of the two images. The
> > +            registration algorithm will minimize (or maximize) the provided
> > +            similarity.
> > +        """
> > +        self.metric = metric
> > +        self.dim = metric.dim
> > +
> > +    def set_level_iters(self, level_iters):
> > +        r"""Sets the number of iterations at each pyramid level
> > +
> > +        Establishes the maximum number of iterations to be performed at each
> > +        level of the Gaussian pyramid, similar to ANTS.
> > +
> > +        Parameters
> > +        ----------
> > +        level_iters : list
>
> Sorry - I think, in the commit changes, we lost the discussion about
> whether this list should go from fine to coarse, or coarse to fine.
>
> So - Omar - would it be odd to make this variable go from the top of the
> pyramid to the bottom? (I think that's coarse to fine)? Or is there some
> tradition of naming in a paper somewhere which would make this confusing?
> Maybe an explanation in the docstring would be enough to reduce the
> confusion for the person reading the paper?
>
> —
> Reply to this email directly or view it on GitHub
> <https://github.com/nipy/dipy/pull/346/files#r14234950>.
>



-- 
"Cada quien es dueño de lo que calla y esclavo de lo que dice"
-Proverbio chino.
"We all are owners of what we keep silent and slaves of what we say"
-Chinese proverb.

http://www.cimat.mx/~omar