Difference between revisions of "BRAINSFit prostate registration"

From NAMIC Wiki
Jump to: navigation, search
Line 41: Line 41:
  
 
|-
 
|-
| --splineGridSize                || 3,3,3 || 3,3,3
+
| --useROIBSpline                  || True || True
 +
 
 +
|-
 +
| --useScaleVersor3D          || True || True
 +
 
 +
|-
 +
| --useScaleSkewVersor3D            || True || True
 +
 
 +
|-
 +
| --useBSpline            || not an option || True
  
 
|-
 
|-
| --useROIBSpline                  || True || True
+
| --splineGridSize                || 3,3,3 || 3,3,3
  
 
|-
 
|-
Line 145: Line 154:
 
| --removeIntensityOutliers            || not an option || 0  
 
| --removeIntensityOutliers            || not an option || 0  
  
|-
 
| --useBSpline            || not an option || True
 
  
 
|-
 
|-
 
| --ROIAutoClosingSize            || not an option || 9
 
| --ROIAutoClosingSize            || not an option || 9
  
|-
 
| --useScaleVersor3D          || True || True
 
  
 
|-
 
|-
| --useScaleSkewVersor3D           || True || True
+
| --useExplicitPDFDerivativesMode           || AUTO || not an option
|-
 
  
| --useExplicitPDFDerivativesMode            || AUTO || not an option
 
 
|-
 
|-
 
 
| --useCachingOfBSplineWeightsMode            || ON || not an option
 
| --useCachingOfBSplineWeightsMode            || ON || not an option
  

Revision as of 18:03, 9 May 2015

Home < BRAINSFit prostate registration

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


Parameter Slicer 3.6 Slicer 4.4
--fixedVolume dir dir
--movingVolume dir dir
--outputVolume dir dir
--bsplineTransform dir dir
--movingBinaryVolume dir dir
--fixedBinaryVolume dir dir
--initializeTransformMode not an option useCenterOfROIAlign
--samplingPercentage not an option 0.002
--useRigid True True
--useAffine True  True
--useROIBSpline True  True
--useScaleVersor3D True  True
--useScaleSkewVersor3D True True
--useBSpline not an option True
--splineGridSize 3,3,3  3,3,3
--numberOfIterations 1500  1500
--maskProcessing ROI  ROI
--outputVolumePixelType float  float
--backgroundFillValue 0  0
--maskInferiorCutOffFromCenter 1000  1000
--interpolationMode Linear  Linear
--minimumStepSize 0.005 not an option
--minimumStepLength not an option 0.005
--translationScale 1000 1000
--reproportionScale 1 1
--skewScale 1 1
--numberOfHistogramBins 50 50
--numberOfMatchPoints 10 10
--numberOfSamples 100000 100000 -> not used, instead: --samplingPercentage
--fixedVolumeTimeIndex 0 0
--movingVolumeTimeIndex 0 0
--medianFilterSize 0,0,0 0,0,0
--ROIAutoDilateSize 0 0
--relaxationFactor 0.5 0.5
--maximumStepSize 0.2  not an option
--maximumStepLength not an option 0.2
--failureExitCode -1  -1
--debugNumberOfThreads -1 not an option
--numberOfThreads not an option -1
--debugLevel 0  0 0
--costFunctionConvergenceFactor 1.00E+09  1.00E+09
--projectedGradientTolerance 1.00E-05  1.00E-05
--maxBSplineDisplacement 0  0
--maximumNumberOfEvaluations not an option 900
--maximumNumberOfCorrections not an option 25
--metricSamplingStrategy not an option  Random
--costMetric not an option  MMI
--removeIntensityOutliers not an option 0


--ROIAutoClosingSize not an option 9


--useExplicitPDFDerivativesMode AUTO not an option
--useCachingOfBSplineWeightsMode ON not an option


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.
Fixed Volume as Reference
SimpleITK result after Initialization
SimpleITK result after rigid registration
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 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
    • setting affineOptimizer here
    • setting RegistrationMethod here
  • 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

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.