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




_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://www.itk.org/mailman/listinfo/insight-developers

Reply via email to