Skip to content

Commit e40999c

Browse files
committed
Add transform_parameter options
Added additional transform_parameter options to allow for all transform options. Also added comments to describe which options are used by which transforms. Added another test for a complex transform input. Updated TODO
1 parent ffae5be commit e40999c

File tree

1 file changed

+38
-13
lines changed

1 file changed

+38
-13
lines changed

nipype/interfaces/ants/registration.py

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -322,21 +322,40 @@ class RegistrationInputSpec(ANTSCommandInputSpec):
322322
'GaussianDisplacementField', 'TimeVaryingVelocityField',
323323
'TimeVaryingBSplineVelocityField', 'SyN', 'BSplineSyN',
324324
'Exponential', 'BSplineExponential'), argstr='%s', mandatory=True)
325-
# TODO: transform_parameters currently supports rigid, affine, composite
326-
# affine, translation, bspline, gaussian displacement field (gdf), and SyN
327-
# -----ONLY-----!
328-
transform_parameters = traits.List(traits.Either(traits.Float(),
329-
traits.Tuple(
330-
traits.Float()),
331-
traits.Tuple(traits.Float(), # gdf & syn
332-
traits.Float(
325+
# TODO: input checking and allow defaults
326+
# All parameters must be specified for BSplineDisplacementField, TimeVaryingBSplineVelocityField, BSplineSyN,
327+
# Exponential, and BSplineExponential. EVEN DEFAULTS!
328+
transform_parameters = traits.List(traits.Either(traits.Tuple(traits.Float()), # Translation, Rigid, Affine,
329+
# CompositeAffine, Similarity
330+
traits.Tuple(traits.Float(), # GaussianDisplacementField, SyN
331+
traits.Float(),
332+
traits.Float()
333333
),
334-
traits.Float(
335-
)),
336-
traits.Tuple(traits.Float(), # BSplineSyn
334+
traits.Tuple(traits.Float(), # BSplineSyn,
335+
traits.Int(), # BSplineDisplacementField,
336+
traits.Int(), # TimeVaryingBSplineVelocityField
337+
traits.Int()
338+
),
339+
traits.Tuple(traits.Float(), # TimeVaryingVelocityField
340+
traits.Int(),
341+
traits.Float(),
342+
traits.Float(),
343+
traits.Float(),
344+
traits.Float()
345+
),
346+
traits.Tuple(traits.Float(), # Exponential
347+
traits.Float(),
348+
traits.Float(),
349+
traits.Int()
350+
),
351+
traits.Tuple(traits.Float(), # BSplineExponential
337352
traits.Int(),
338353
traits.Int(),
339-
traits.Int())))
354+
traits.Int(),
355+
traits.Int()
356+
),
357+
)
358+
)
340359
# Convergence flags
341360
number_of_iterations = traits.List(traits.List(traits.Int()))
342361
smoothing_sigmas = traits.List(traits.List(traits.Float()), mandatory=True)
@@ -509,6 +528,13 @@ class Registration(ANTSCommand):
509528
>>> reg7b.inputs.interpolation_parameters = (1.0, 1.0)
510529
>>> reg7b.cmdline
511530
'antsRegistration --collapse-output-transforms 0 --dimensionality 3 --initial-moving-transform [ trans.mat, 1 ] --initialize-transforms-per-stage 0 --interpolation Gaussian[ 1.0, 1.0 ] --output [ output_, output_warped_image.nii.gz ] --transform Affine[ 2.0 ] --metric Mattes[ fixed1.nii, moving1.nii, 1, 32, Random, 0.05 ] --convergence [ 1500x200, 1e-08, 20 ] --smoothing-sigmas 1.0x0.0vox --shrink-factors 2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --transform SyN[ 0.25, 3.0, 0.0 ] --metric Mattes[ fixed1.nii, moving1.nii, 1, 32 ] --convergence [ 100x50x30, 1e-09, 20 ] --smoothing-sigmas 2.0x1.0x0.0vox --shrink-factors 3x2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --winsorize-image-intensities [ 0.0, 1.0 ] --write-composite-transform 1'
531+
532+
>>> # Test Extended Transform Parameters
533+
>>> reg8 = copy.deepcopy(reg)
534+
>>> reg8.inputs.transforms = ['Affine', 'BSplineSyN']
535+
>>> reg8.inputs.transform_parameters = [(2.0,), (0.25, 26, 0, 3)]
536+
>>> reg8.cmdline
537+
'antsRegistration --collapse-output-transforms 0 --dimensionality 3 --initial-moving-transform [ trans.mat, 1 ] --initialize-transforms-per-stage 0 --interpolation Linear --output [ output_, output_warped_image.nii.gz ] --transform Affine[ 2.0 ] --metric Mattes[ fixed1.nii, moving1.nii, 1, 32, Random, 0.05 ] --convergence [ 1500x200, 1e-08, 20 ] --smoothing-sigmas 1.0x0.0vox --shrink-factors 2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --transform BSplineSyN[ 0.25, 26, 0, 3 ] --metric Mattes[ fixed1.nii, moving1.nii, 1, 32 ] --convergence [ 100x50x30, 1e-09, 20 ] --smoothing-sigmas 2.0x1.0x0.0vox --shrink-factors 3x2x1 --use-estimate-learning-rate-once 1 --use-histogram-matching 1 --winsorize-image-intensities [ 0.0, 1.0 ] --write-composite-transform 1'
512538
"""
513539
DEF_SAMPLING_STRATEGY = 'None'
514540
"""The default sampling strategy argument."""
@@ -544,7 +570,6 @@ def _formatMetric(self, index):
544570
sampling_strategy = self.inputs.sampling_strategy[index]
545571
if sampling_strategy:
546572
stage_inputs['sampling_strategy'] = sampling_strategy
547-
sampling_percentage = self.inputs.sampling_percentage
548573
if (isdefined(self.inputs.sampling_percentage) and self.inputs.sampling_percentage):
549574
sampling_percentage = self.inputs.sampling_percentage[index]
550575
if sampling_percentage:

0 commit comments

Comments
 (0)