Difference between revisions of "BRAINSFit to simpleITK"
(30 intermediate revisions by 2 users not shown) | |||
Line 11: | Line 11: | ||
Sample data [http://www.slicer.org/publications/item/view/2147 can be found here]. | Sample data [http://www.slicer.org/publications/item/view/2147 can be found here]. | ||
− | |||
− | |||
=Current status= | =Current status= | ||
Line 25: | Line 23: | ||
==Things that are implemented, but are not working== | ==Things that are implemented, but are not working== | ||
* SimpleITK code for rigid registration | * SimpleITK code for rigid registration | ||
+ | ** the voxel sampling exception can be avoided by cropping the images sharply around the masks. | ||
+ | {| | ||
+ | | | ||
+ | |[[Image:FixedVolume.png|thumb|300px|Fixed Volume as Reference]] | ||
+ | |[[Image:AfterInit.png|thumb|300px|SimpleITK result after Initialization]] | ||
+ | |[[Image:AfterRigid.png|thumb|300px|SimpleITK result after rigid registration]] | ||
+ | |[[Image:BRAINSFitOut.png|thumb|300px|BRAINSFit result after rigid without using masks and --useCenterOfGeometryAlign]] | ||
+ | |} | ||
+ | ** The rigid registration result is too much rotated and translated. Also the number of iteration steps varies with every computation. Reason might be that seed is set randomized and not set as done in BRAINSFit [https://github.com/BRAINSia/BRAINSTools/blob/af0ff12b8b751f9423061d42178268acab5f85f4/BRAINSCommonLib/BRAINSFitHelper.h#L375 here]. There is no option at the [http://www.itk.org/SimpleITKDoxygen/html/classitk_1_1simple_1_1ImageRegistrationMethod.html SimpleITK::ImageRegistrationMethod] to set a metric seed. | ||
==Things that are not implemented, but need to be implemented== | ==Things that are not implemented, but need to be implemented== | ||
* SimpleITK code for affine registration | * SimpleITK code for affine registration | ||
− | * SimpleITK code for BSpline registration | + | ** setting affineOptimizer [https://github.com/BRAINSia/BRAINSTools/blob/19fa37dfbdee37deff4ccee412bb601f7a787bda/BRAINSCommonLib/genericRegistrationHelper.hxx#L158-L187 here] |
+ | ** setting RegistrationMethod [https://github.com/BRAINSia/BRAINSTools/blob/19fa37dfbdee37deff4ccee412bb601f7a787bda/BRAINSCommonLib/genericRegistrationHelper.hxx#L289-L353 here] | ||
+ | * SimpleITK code for BSpline registration (started [https://github.com/PeterBehringer/SimpleITKtraining/blob/master/simpleITK_to_sitk_BSpline.py here]) | ||
=Unresolved issues out of our direct control= | =Unresolved issues out of our direct control= |
Latest revision as of 02:33, 1 May 2015
Home < BRAINSFit to simpleITKContents
Goal
We are developing registration module in Slicer version 4 (which is using ITKv4) for deformable registration of prostate MRI.
We want to develop a SimpleITK prostate registration tool in Slicer4/ITKv4. This Slicer4/ITKv4 registration tool should be functional, accurate and fast (i.e., comparable with the the functionality we had in Slicer3/ITKv3, which has been evaluated previously [1]).
Details on the registration approach
Registration is applied to align preprocedural and intraoperational MR T2 image volumes. We are using masks the prostate for both image data sets. Registration is done using MMI metric with rigid, affine and B-spline stages applied in sequence. In Slicer3/BRAINSFit we use gradient descent for rigid/affine, and LBFGS for B-spline.
Parameters we are using to call BRAINSFit in Slicer 3.6 can be found here.
Sample data can be found here.
Current status
Registration code on github: here
Latest update: April 28, 2015
Things that are working
- exhaustive search based initialization procedure implemented and produces good results (cross-correlation metric)
Things that are implemented, but are not working
- SimpleITK code for rigid registration
- the voxel sampling exception can be avoided by cropping the images sharply around the masks.
- The rigid registration result is too much rotated and translated. Also the number of iteration steps varies with every computation. Reason might be that seed is set randomized and not set as done in BRAINSFit here. There is no option at the SimpleITK::ImageRegistrationMethod to set a metric seed.
Things that are not implemented, but need to be implemented
- SimpleITK code for affine registration
- SimpleITK code for BSpline registration (started here)
Unresolved issues out of our direct control
Standing SimpleITK issues
- no API for consistent initialization of the metric seed
Standing ITKv4 issues
- capability to sample voxels only within the mask (see topic under review on Gerrit: http://review.source.kitware.com/#/c/19684/)
Standing Slicer4 issues
References
[1] Fedorov A, Tuncali K, Fennessy FM, Tokuda J, Hata N, et al. (2012) Image registration for targeted MRI-guided transperineal prostate biopsy. J Magn Reson Imaging 36: 987–992. Available: http://dx.doi.org/10.1002/jmri.23688.