Skip to content

Commit b6e83d8

Browse files
committed
Merge pull request #1160 from BRAINSia/AddJointFusion
ENH: Add ants JointFusion() node with testing
2 parents 814997a + 5cf5475 commit b6e83d8

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

nipype/interfaces/ants/segmentation.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,7 @@ def _list_outputs(self):
574574
'brainvols.csv')
575575
return outputs
576576

577+
577578
class JointFusionInputSpec(ANTSCommandInputSpec):
578579
dimension = traits.Enum(3, 2, 4, argstr='%d', position=0, usedefault=True, mandatory=True,
579580
desc='image dimension (2, 3, or 4)')
@@ -588,21 +589,23 @@ class JointFusionInputSpec(ANTSCommandInputSpec):
588589
patch_radius = traits.ListInt(minlen=3, maxlen=3, argstr='-rp %s', desc='Patch radius for similarity measures, scalar or vector. Default: 2x2x2')
589590
search_radius = traits.ListInt(minlen=3, maxlen=3, argstr='-rs %s', desc='Local search radius. Default: 3x3x3')
590591
exclusion_region = File(exists=True, argstr='-x %s', desc='Specify an exclusion region for the given label.')
591-
output_posteriors_name_template = traits.Str('POSTERIOR_%02d.nii.gz', argstr='-p %s',
592-
desc="Save the posterior maps (probability that each voxel belongs to each " +\
593-
"label) as images. The number of images saved equals the number of labels. " +\
594-
"The filename pattern must be in C printf format, e.g. posterior%04d.nii.gz")
595-
output_voting_weights_name_template = traits.Str('WEIGHTED_%04d.nii.gz', argstr='-w %s', desc="Save the voting weights as " +\
596-
"images. The number of images saved equals the number of atlases. The " +\
597-
"filename pattern must be in C printf format, e.g. weight%04d.nii.gz")
592+
# TODO: These are almost never needed except for debugging
593+
# output_posteriors_name_template = traits.Str('POSTERIOR_%02d.nii.gz', argstr='-p %s',
594+
# desc="Save the posterior maps (probability that each voxel belongs to each " +\
595+
# "label) as images. The number of images saved equals the number of labels. " +\
596+
# "The filename pattern must be in C printf format, e.g. posterior%04d.nii.gz")
597+
# output_voting_weights_name_template = traits.Str('WEIGHTED_%04d.nii.gz', argstr='-w %s', desc="Save the voting weights as " +\
598+
# "images. The number of images saved equals the number of atlases. The " +\
599+
# "filename pattern must be in C printf format, e.g. weight%04d.nii.gz")
598600
atlas_group_id = traits.ListInt(argstr='-gp %d...', desc='Assign a group ID for each atlas')
599601
atlas_group_weights = traits.ListInt(argstr='-gpw %d...', desc='Assign the voting weights to each atlas group')
600602

601603

602604
class JointFusionOutputSpec(TraitedSpec):
603605
output_label_image = File(exists=True)
604-
# TODO: optional outputs - output_posteriors, output_voting_weights
605-
606+
# TODO: These are almost never needed except for debugging,
607+
# so delay complicated implementation until a need arises
608+
# optional outputs - output_posteriors, output_voting_weights
606609

607610
class JointFusion(ANTSCommand):
608611
"""
@@ -616,22 +619,24 @@ class JointFusion(ANTSCommand):
616619
>>> at.inputs.method = 'Joint[0.1,2]'
617620
>>> at.inputs.output_label_image ='fusion_labelimage_output.nii'
618621
>>> at.inputs.warped_intensity_images = ['im1.nii',
619-
... 'im2.nii']
622+
... 'im2.nii',
623+
... 'im3.nii']
620624
>>> at.inputs.warped_label_images = ['segmentation0.nii.gz',
625+
... 'segmentation1.nii.gz',
621626
... 'segmentation1.nii.gz']
622627
>>> at.inputs.target_image = 'T1.nii'
623628
>>> at.inputs.patch_radius = [3,2,1]
624629
>>> at.inputs.search_radius = [1,2,3]
625630
>>> at.cmdline
626-
'jointfusion 3 1 -m Joint[0.1,2] -rp 3x2x1 -rs 1x2x3 -tg T1.nii -g im1.nii -g im2.nii -l segmentation0.nii.gz -l segmentation1.nii.gz fusion_labelimage_output.nii'
631+
'jointfusion 3 1 -m Joint[0.1,2] -rp 3x2x1 -rs 1x2x3 -tg T1.nii -g im1.nii -g im2.nii -g im3.nii -l segmentation0.nii.gz -l segmentation1.nii.gz -l segmentation1.nii.gz fusion_labelimage_output.nii'
627632
628633
Alternately, you can specify the voting method and parameters more 'Pythonically':
629634
630635
>>> at.inputs.method = 'Joint'
631636
>>> at.inputs.alpha = 0.5
632637
>>> at.inputs.beta = 1
633638
>>> at.cmdline
634-
'jointfusion 3 1 -m Joint[0.5,1] -rp 3x2x1 -rs 1x2x3 -tg T1.nii -g im1.nii -g im2.nii -l segmentation0.nii.gz -l segmentation1.nii.gz fusion_labelimage_output.nii'
639+
'jointfusion 3 1 -m Joint[0.5,1] -rp 3x2x1 -rs 1x2x3 -tg T1.nii -g im1.nii -g im2.nii -g im3.nii -l segmentation0.nii.gz -l segmentation1.nii.gz -l segmentation1.nii.gz fusion_labelimage_output.nii'
635640
"""
636641
input_spec = JointFusionInputSpec
637642
output_spec = JointFusionOutputSpec

0 commit comments

Comments
 (0)