[Insight-developers] SimpleITK ImageRegistrationMethod straw man

Bradley Lowekamp blowekamp at mail.nih.gov
Sat Dec 28 16:04:17 EST 2013


Hello,

I have hacked away to a  working version of the  ImageRegistationMethod in SimpleITK. This is the 4th SimpleITK registration interface attempted. This one seems about right to me. The branch/commit is available in my github account:

https://github.com/blowekamp/SimpleITK/tree/STRAW_ImageRegistrationMethod

Note: this topic will continued to be hacked and rebased/amended/squashed etc....

Of particular interest is the interface to the method class which encapsulates the metric and optimizer while working with the existing sitk Transform facade:

https://github.com/blowekamp/SimpleITK/blob/STRAW_ImageRegistrationMethod/Code/Registration/include/sitkImageRegistrationMethod.h

I ported  several ITK ImageRegistration examples to drive the implementation:

https://github.com/blowekamp/SimpleITK/blob/STRAW_ImageRegistrationMethod/Examples/ImageRegistration1.py
https://github.com/blowekamp/SimpleITK/blob/STRAW_ImageRegistrationMethod/Examples/ImageRegistration2.py
https://github.com/blowekamp/SimpleITK/blob/STRAW_ImageRegistrationMethod/Examples/ImageRegistration15.py

Also note I have found the scale dependent nature for ITK's RegularStepGradientDecent method un-usable and erratic. So I have use my version which possess sensible parameter scaling properties:
https://github.com/blowekamp/SimpleITK/blob/STRAW_ImageRegistrationMethod/Code/Registration/include/itkScaledRegularStepGradientDescentOptimizer.h


---------------
So what does this class support...

--Transforms:  sitkTranslation, sitkScale, sitkScaleLogarithmic, sitkEuler, sitkSimilarity, sitkQuaternionRigid, sitkVersor, sitkVersorRigid, sitkAffine, sitkComposite
--Metrics: MeansSquares, NormalizedCorrelation, MeanReciprocalSquaredDifference MutualInformation, MatchCardinality, KullbackLeiblerCompareHistogram, MeanSquaresHistogram
--Optimizers: RegularStepGradientDescent, GradientDescent, ConjugateGradient, OnePlusOneEvolutionary, Exhaustive, Amoeba, LBFS
--Interpolators:  sitkNearestNeighbor, sitkLinear, sitkBSpline, sitkGaussian, sitkLabelGaussian, sitkHammingWindowedSinc, sitkCosineWindowedSinc, sitkWelchWindowedSinc, sitkLanczosWindowedSinc, sitkBlackmanWindowedSinc

So that is 4900 combinations.... Ever try a MatchCardinality metric with a LabelGaussian interpolator and a Amoeba optimizer?

---------------
Things still todo and figure out:

Callbacks and information/interface needed,
BSpline transfroms.
Sample masking from images.

There is a lot that is going to need to be done for testing, and improved parameter checking, verifying defaults, and doing a  different implementation of parameter management. But it is working, and enable easy exploration of registration in a way I have not been able to do before.



---------------
I look forward to suggestions and comments. A long with information regarding the importance of features and things that are missing.

Thanks,
Brad






More information about the Insight-developers mailing list