[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