@@ -322,21 +322,40 @@ class RegistrationInputSpec(ANTSCommandInputSpec):
322
322
'GaussianDisplacementField' , 'TimeVaryingVelocityField' ,
323
323
'TimeVaryingBSplineVelocityField' , 'SyN' , 'BSplineSyN' ,
324
324
'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 ()
333
333
),
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
337
352
traits .Int (),
338
353
traits .Int (),
339
- traits .Int ())))
354
+ traits .Int (),
355
+ traits .Int ()
356
+ ),
357
+ )
358
+ )
340
359
# Convergence flags
341
360
number_of_iterations = traits .List (traits .List (traits .Int ()))
342
361
smoothing_sigmas = traits .List (traits .List (traits .Float ()), mandatory = True )
@@ -509,6 +528,13 @@ class Registration(ANTSCommand):
509
528
>>> reg7b.inputs.interpolation_parameters = (1.0, 1.0)
510
529
>>> reg7b.cmdline
511
530
'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'
512
538
"""
513
539
DEF_SAMPLING_STRATEGY = 'None'
514
540
"""The default sampling strategy argument."""
@@ -544,7 +570,6 @@ def _formatMetric(self, index):
544
570
sampling_strategy = self .inputs .sampling_strategy [index ]
545
571
if sampling_strategy :
546
572
stage_inputs ['sampling_strategy' ] = sampling_strategy
547
- sampling_percentage = self .inputs .sampling_percentage
548
573
if (isdefined (self .inputs .sampling_percentage ) and self .inputs .sampling_percentage ):
549
574
sampling_percentage = self .inputs .sampling_percentage [index ]
550
575
if sampling_percentage :
0 commit comments