@@ -29,12 +29,18 @@ Copyright 2017, Mindboggle team (http://mindboggle.info), Apache v2.0 License
29
29
30
30
import os
31
31
import argparse
32
+ from glob import glob
32
33
33
34
from nipype import config , logging
34
- from nipype .pipeline .engine import Workflow , Node
35
+ from nipype .pipeline .engine import Workflow , Node , MapNode
35
36
from nipype .interfaces .utility import Function as Fn
37
+ from nipype .interfaces .utility import Merge
36
38
from nipype .interfaces .freesurfer import ReconAll
37
39
from nipype .interfaces .ants .segmentation import CorticalThickness
40
+ from nipype .interfaces .ants import (ApplyTransforms , AntsJointFusion ,
41
+ LabelGeometry )
42
+ from nipype .utils .misc import human_order_sorted
43
+
38
44
39
45
from mindboggle .version import __version__ as mbversion
40
46
mindboggle_version = 'mindboggle version {0}' .format (mbversion )
@@ -274,6 +280,66 @@ Mindboggle.inputs.antsdir = ants_output
274
280
if args .skip_ants :
275
281
Mindboggle .inputs .antsseg = PREFIX + 'BrainSegmentation.nii.gz'
276
282
else :
283
+ comps = TDIR .split (os .sep )
284
+ IDIR = os .sep .join (comps [:(- 2 if not comps [- 1 ] else - 1 )] +
285
+ ['OASIS-TRT_brains_to_OASIS_Atropos_template' ])
286
+ LDIR = os .sep .join (comps [:(- 2 if not comps [- 1 ] else - 1 )] +
287
+ ['OASIS-TRT_labels_to_OASIS_Atropos_template' ])
288
+ T1s = human_order_sorted (glob (os .path .join (IDIR , '*.nii.gz' )))
289
+ labels = human_order_sorted (glob (os .path .join (LDIR , '*.nii.gz' )))
290
+
291
+ # ----------------------------------------------------------------------
292
+ # Create workflow to label ANTs output with JointFusion and derive stats
293
+ # ----------------------------------------------------------------------
294
+ merge_transforms = Node (Merge (2 ), name = "merge_transforms" )
295
+
296
+ # label_wf = Workflow('labelflow')
297
+ transformer = MapNode (ApplyTransforms (), iterfield = ['input_image' ],
298
+ name = "transformer" )
299
+ transformer .inputs .reference_image = IMAGE
300
+ transformer .inputs .input_image = T1s
301
+ transformer .inputs .dimension = 3
302
+ transformer .inputs .invert_transform_flags = [False , False ]
303
+ transformer .inputs .interpolation = 'BSpline'
304
+
305
+ transformer_nn = MapNode (ApplyTransforms (), iterfield = ['input_image' ],
306
+ name = "transformer_nn" )
307
+ transformer_nn .inputs .reference_image = IMAGE
308
+ transformer_nn .inputs .dimension = 3
309
+ transformer_nn .inputs .invert_transform_flags = [False , False ]
310
+ transformer_nn .inputs .input_image = labels
311
+ transformer_nn .inputs .interpolation = 'NearestNeighbor'
312
+
313
+ labeler = Node (AntsJointFusion (), name = 'labeler' )
314
+ labeler .inputs .dimension = 3
315
+ labeler .inputs .target_image = [IMAGE ]
316
+ labeler .inputs .out_label_fusion = 'label.nii.gz'
317
+ if args .num_threads and args .num_threads > 1 :
318
+ labeler .inputs .num_threads = args .num_threads
319
+
320
+ tocsv = Node (LabelGeometry (), name = 'get_measures' )
321
+ tocsv .inputs .output_file = os .path .join (ants_output , ID ,
322
+ 'antslabelstats.csv' )
323
+
324
+ mbFlow .connect (corticalthickness , 'TemplateToSubject1GenericAffine' ,
325
+ merge_transforms , 'in1' )
326
+ mbFlow .connect (corticalthickness , 'TemplateToSubject0Warp' ,
327
+ merge_transforms , 'in2' )
328
+ mbFlow .connect (merge_transforms , 'out' , transformer , 'transforms' )
329
+ mbFlow .connect (merge_transforms , 'out' , transformer_nn , 'transforms' )
330
+ mbFlow .connect (corticalthickness , 'BrainExtractionMask' , labeler ,
331
+ 'mask_image' )
332
+ mbFlow .connect (corticalthickness , 'CorticalThickness' ,
333
+ tocsv , 'intensity_image' )
334
+
335
+ mbFlow .connect (transformer , 'output_image' , labeler , 'atlas_image' )
336
+ mbFlow .connect (transformer_nn , 'output_image' , labeler ,
337
+ 'atlas_segmentation_image' )
338
+ mbFlow .connect (labeler , 'out_label_fusion' , tocsv , 'label_image' )
339
+
340
+ # ----------------------------------------------------------------------------
341
+ # Connect ants to Mindboggle
342
+ # ----------------------------------------------------------------------------
277
343
mbFlow .connect (corticalthickness , 'BrainSegmentation' ,
278
344
Mindboggle , 'antsseg' )
279
345
Mindboggle .inputs .out = mindboggle_output
0 commit comments