Skip to content

Commit 9acb53e

Browse files
committed
ENH: Adding --float to antsReg and BFit cmdlines
Expose --float option in ants registration. This allows for computations to be done in single precision rather than double precision.
1 parent ff2f983 commit 9acb53e

File tree

3 files changed

+18
-0
lines changed

3 files changed

+18
-0
lines changed

nipype/interfaces/ants/registration.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,11 @@ class RegistrationInputSpec(ANTSCommandInputSpec):
291291
'each stage directly updates the estimated linear transform from the previous '
292292
'stage. (e.g. Translation -> Rigid -> Affine). '
293293
))
294+
# NOTE: Even though only 0=False and 1=True are allowed, ants uses integer
295+
# values instead of booleans
296+
float = traits.Bool(
297+
argstr='--float %d', default=False,
298+
desc=('Use float instead of double for computations.'))
294299

295300
transforms = traits.List(traits.Enum('Rigid', 'Affine', 'CompositeAffine',
296301
'Similarity', 'Translation', 'BSpline',
@@ -405,6 +410,16 @@ class Registration(ANTSCommand):
405410
>>> reg3.cmdline
406411
'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 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.025, 0.975 ] --write-composite-transform 1'
407412
413+
>>> reg3a = copy.deepcopy(reg)
414+
>>> reg3a.inputs.float = True
415+
>>> reg3a.cmdline
416+
'antsRegistration --collapse-output-transforms 0 --dimensionality 3 --float 1 --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 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'
417+
418+
>>> reg3b = copy.deepcopy(reg)
419+
>>> reg3b.inputs.float = False
420+
>>> reg3b.cmdline
421+
'antsRegistration --collapse-output-transforms 0 --dimensionality 3 --float 0 --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 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'
422+
408423
>>> # Test collapse transforms flag
409424
>>> reg4 = copy.deepcopy(reg)
410425
>>> reg.inputs.save_state = 'trans.mat'

nipype/interfaces/slicer/registration/brainsfit.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class BRAINSFitInputSpec(CommandLineInputSpec):
6767
NEVER_USE_THIS_FLAG_IT_IS_OUTDATED_02 = traits.Bool(desc="DO NOT USE THIS FLAG", argstr="--NEVER_USE_THIS_FLAG_IT_IS_OUTDATED_02 ")
6868
permitParameterVariation = InputMultiPath(traits.Int, desc="A bit vector to permit linear transform parameters to vary under optimization. The vector order corresponds with transform parameters, and beyond the end ones fill in as a default. For instance, you can choose to rotate only in x (pitch) with 1,0,0; this is mostly for expert use in turning on and off individual degrees of freedom in rotation, translation or scaling without multiplying the number of transform representations; this trick is probably meaningless when tried with the general affine transform.", sep=",", argstr="--permitParameterVariation %s")
6969
costMetric = traits.Enum("MMI", "MSE", "NC", "MC", desc="The cost metric to be used during fitting. Defaults to MMI. Options are MMI (Mattes Mutual Information), MSE (Mean Square Error), NC (Normalized Correlation), MC (Match Cardinality for binary images)", argstr="--costMetric %s")
70+
writeOutputTransformInFloat = traits.Bool(desc="By default, the output registration transforms (either the output composite transform or each transform component) are written to the disk in double precision. If this flag is ON, the output transforms will be written in single (float) precision. It is especially important if the output transform is a displacement field transform, or it is a composite transform that includes several displacement fields.", argstr="--writeOutputTransformInFloat ")
7071

7172

7273
class BRAINSFitOutputSpec(TraitedSpec):

nipype/interfaces/slicer/registration/tests/test_auto_BRAINSFit.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ def test_BRAINSFit_inputs():
146146
),
147147
writeTransformOnFailure=dict(argstr='--writeTransformOnFailure ',
148148
),
149+
writeOutputTransformInFloat=dict(argstr='--writeOutputTransformInFloat ',
150+
),
149151
)
150152
inputs = BRAINSFit.input_spec()
151153

0 commit comments

Comments
 (0)