Skip to content

Commit 665ee55

Browse files
committed
Merge pull request #1231 from MartinPerez/ants_brain_extract
Ants brain extraction interface
2 parents 8d26eec + 6c24260 commit 665ee55

File tree

3 files changed

+145
-3
lines changed

3 files changed

+145
-3
lines changed

nipype/interfaces/ants/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212

1313
# Segmentation Programs
14-
from .segmentation import Atropos, LaplacianThickness, N4BiasFieldCorrection, JointFusion
14+
from .segmentation import Atropos, LaplacianThickness, N4BiasFieldCorrection, JointFusion, antsCorticalThickness, antsBrainExtraction
1515

1616
# Visualization Programs
1717
from .visualization import ConvertScalarImageToRGB, CreateTiledMosaic

nipype/interfaces/ants/segmentation.py

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ class antsCorticalThicknessInputSpec(ANTSCommandInputSpec):
465465
'Requires single thread computation for complete reproducibility.'))
466466

467467

468-
class antsCorticalThicknessoutputSpec(TraitedSpec):
468+
class antsCorticalThicknessOutputSpec(TraitedSpec):
469469
BrainExtractionMask = File(exists=True, desc='brain extraction mask')
470470
BrainSegmentation = File(exists=True, desc='brain segmentaion image')
471471
BrainSegmentationN4 = File(exists=True, desc='N4 corrected image')
@@ -503,7 +503,7 @@ class antsCorticalThickness(ANTSCommand):
503503
"""
504504

505505
input_spec = antsCorticalThicknessInputSpec
506-
output_spec = antsCorticalThicknessoutputSpec
506+
output_spec = antsCorticalThicknessOutputSpec
507507
_cmd = 'antsCorticalThickness.sh'
508508

509509
def _format_arg(self, opt, spec, val):
@@ -594,6 +594,86 @@ def _list_outputs(self):
594594
return outputs
595595

596596

597+
class antsBrainExtractionInputSpec(ANTSCommandInputSpec):
598+
dimension = traits.Enum(3, 2, argstr='-d %d', usedefault=True,
599+
desc='image dimension (2 or 3)')
600+
anatomical_image = File(exists=True, argstr='-a %s',
601+
desc=('Structural image, typically T1. If more than one'
602+
'anatomical image is specified, subsequently specified'
603+
'images are used during the segmentation process. However,'
604+
'only the first image is used in the registration of priors.'
605+
'Our suggestion would be to specify the T1 as the first image.'
606+
'Anatomical template created using e.g. LPBA40 data set with'
607+
'buildtemplateparallel.sh in ANTs.'),
608+
mandatory=True)
609+
brain_template = File(exists=True, argstr='-e %s',
610+
desc=('Anatomical template created using e.g. LPBA40 data set with'
611+
'buildtemplateparallel.sh in ANTs.'),
612+
mandatory=True)
613+
brain_probability_mask = File(exists=True, argstr='-m %s',
614+
desc=('Brain probability mask created using e.g. LPBA40 data set which'
615+
'have brain masks defined, and warped to anatomical template and'
616+
'averaged resulting in a probability image.'),
617+
copyfile=False, mandatory=True)
618+
out_prefix = traits.Str('highres001_', argstr='-o %s', usedefault=True,
619+
desc=('Prefix that is prepended to all output'
620+
' files (default = highress001_)'))
621+
622+
extraction_registration_mask = File(exists=True, argstr='-f %s',
623+
desc=('Mask (defined in the template space) used during'
624+
' registration for brain extraction.'
625+
'To limit the metric computation to a specific region.'))
626+
image_suffix = traits.Str('nii.gz', desc=('any of standard ITK formats,'
627+
' nii.gz is default'),
628+
argstr='-s %s', usedefault=True)
629+
use_random_seeding = traits.Enum(0, 1, argstr='-u %d',
630+
desc=('Use random number generated from system clock in Atropos'
631+
'(default = 1)'))
632+
keep_temporary_files = traits.Int(argstr='-k %d',
633+
desc='Keep brain extraction/segmentation warps, etc (default = 0).')
634+
use_floatingpoint_precision = traits.Enum(0, 1, argstr='-q %d',
635+
desc=('Use floating point precision '
636+
'in registrations (default = 0)'))
637+
debug = traits.Bool(argstr='-z 1',
638+
desc=('If > 0, runs a faster version of the script.'
639+
'Only for testing. Implies -u 0.'
640+
'Requires single thread computation for complete reproducibility.'))
641+
642+
643+
class antsBrainExtractionOutputSpec(TraitedSpec):
644+
BrainExtractionMask = File(exists=True, desc='brain extraction mask')
645+
BrainExtractionBrain = File(exists=True, desc='brain extraction image')
646+
647+
class antsBrainExtraction(ANTSCommand):
648+
"""
649+
Examples
650+
--------
651+
>>> from nipype.interfaces.ants.segmentation import antsBrainExtraction
652+
>>> brainextraction = antsBrainExtraction()
653+
>>> brainextraction.inputs.dimension = 3
654+
>>> brainextraction.inputs.anatomical_image ='T1.nii.gz'
655+
>>> brainextraction.inputs.brain_template = 'study_template.nii.gz'
656+
>>> brainextraction.inputs.brain_probability_mask ='ProbabilityMaskOfStudyTemplate.nii.gz'
657+
>>> brainextraction.cmdline
658+
'antsBrainExtraction.sh -a T1.nii.gz -m ProbabilityMaskOfStudyTemplate.nii.gz -e study_template.nii.gz -d 3 -s nii.gz -o highres001_'
659+
"""
660+
input_spec = antsBrainExtractionInputSpec
661+
output_spec = antsBrainExtractionOutputSpec
662+
_cmd = 'antsBrainExtraction.sh'
663+
664+
def _list_outputs(self):
665+
outputs = self._outputs().get()
666+
outputs['BrainExtractionMask'] = os.path.join(os.getcwd(),
667+
self.inputs.out_prefix +
668+
'BrainExtractionMask.' +
669+
self.inputs.image_suffix)
670+
outputs['BrainExtractionBrain'] = os.path.join(os.getcwd(),
671+
self.inputs.out_prefix +
672+
'BrainExtractionBrain.' +
673+
self.inputs.image_suffix)
674+
return outputs
675+
676+
597677
class JointFusionInputSpec(ANTSCommandInputSpec):
598678
dimension = traits.Enum(3, 2, 4, argstr='%d', position=0, usedefault=True,
599679
mandatory=True,
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT
2+
from nipype.testing import assert_equal
3+
from nipype.interfaces.ants.segmentation import antsBrainExtraction
4+
5+
6+
def test_antsBrainExtraction_inputs():
7+
input_map = dict(anatomical_image=dict(argstr='-a %s',
8+
mandatory=True,
9+
),
10+
args=dict(argstr='%s',
11+
),
12+
brain_probability_mask=dict(argstr='-m %s',
13+
copyfile=False,
14+
mandatory=True,
15+
),
16+
brain_template=dict(argstr='-e %s',
17+
mandatory=True,
18+
),
19+
debug=dict(argstr='-z 1',
20+
),
21+
dimension=dict(argstr='-d %d',
22+
usedefault=True,
23+
),
24+
environ=dict(nohash=True,
25+
usedefault=True,
26+
),
27+
extraction_registration_mask=dict(argstr='-f %s',
28+
),
29+
ignore_exception=dict(nohash=True,
30+
usedefault=True,
31+
),
32+
image_suffix=dict(argstr='-s %s',
33+
usedefault=True,
34+
),
35+
keep_temporary_files=dict(argstr='-k %d',
36+
),
37+
out_prefix=dict(argstr='-o %s',
38+
usedefault=True,
39+
),
40+
terminal_output=dict(nohash=True,
41+
),
42+
use_floatingpoint_precision=dict(argstr='-q %d',
43+
),
44+
use_random_seeding=dict(argstr='-u %d',
45+
),
46+
)
47+
inputs = antsBrainExtraction.input_spec()
48+
49+
for key, metadata in input_map.items():
50+
for metakey, value in metadata.items():
51+
yield assert_equal, getattr(inputs.traits()[key], metakey), value
52+
53+
54+
def test_antsBrainExtraction_outputs():
55+
output_map = dict(BrainExtractionMask=dict(),
56+
BrainExtractionBrain=dict(),
57+
)
58+
outputs = antsBrainExtraction.output_spec()
59+
60+
for key, metadata in output_map.items():
61+
for metakey, value in metadata.items():
62+
yield assert_equal, getattr(outputs.traits()[key], metakey), value

0 commit comments

Comments
 (0)