Exemplo n.º 1
0
def test_AddNoise_outputs():
    output_map = dict(out_file=dict(), )
    outputs = AddNoise.output_spec()

    for key, metadata in output_map.items():
        for metakey, value in metadata.items():
            yield assert_equal, getattr(outputs.traits()[key], metakey), value
Exemplo n.º 2
0
def test_AddNoise_outputs():
    output_map = dict(out_file=dict(),
    )
    outputs = AddNoise.output_spec()

    for key, metadata in output_map.items():
        for metakey, value in metadata.items():
            yield assert_equal, getattr(outputs.traits()[key], metakey), value
Exemplo n.º 3
0
def test_AddNoise_inputs():
    input_map = dict(bg_dist=dict(mandatory=True,
    usedefault=True,
    ),
    dist=dict(mandatory=True,
    usedefault=True,
    ),
    in_file=dict(mandatory=True,
    ),
    in_mask=dict(),
    out_file=dict(),
    snr=dict(usedefault=True,
    ),
    )
    inputs = AddNoise.input_spec()

    for key, metadata in input_map.items():
        for metakey, value in metadata.items():
            yield assert_equal, getattr(inputs.traits()[key], metakey), value
Exemplo n.º 4
0
def test_AddNoise_inputs():
    input_map = dict(
        bg_dist=dict(
            mandatory=True,
            usedefault=True,
        ),
        dist=dict(
            mandatory=True,
            usedefault=True,
        ),
        in_file=dict(mandatory=True, ),
        in_mask=dict(),
        out_file=dict(),
        snr=dict(usedefault=True, ),
    )
    inputs = AddNoise.input_spec()

    for key, metadata in input_map.items():
        for metakey, value in metadata.items():
            yield assert_equal, getattr(inputs.traits()[key], metakey), value
Exemplo n.º 5
0
def bmap_registration(name="Bmap_Registration"):
    """
    A workflow to register a source B0 map to the T1w image of a real subject.
    """
    workflow = pe.Workflow(name=name)

    # Setup i/o
    inputnode = pe.Node(
        niu.IdentityInterface(fields=['mag', 'pha', 't1w_brain', 'dwi_mask']),
        name='inputnode')

    outputnode = pe.Node(niu.IdentityInterface(
        fields=['magnitude', 'wrapped', 'unwrapped', 'mag_brain']),
                         name='outputnode')

    # Setup initial nodes
    fslroi = pe.Node(fsl.ExtractROI(t_min=0, t_size=1), name='GetFirst')

    mag2RAS = pe.Node(fs.MRIConvert(out_type="niigz", out_orientation="RAS"),
                      name='MagToRAS')
    unwrap = pe.Node(PhaseUnwrap(), name='PhaseUnwrap')
    pha2RAS = pe.Node(fs.MRIConvert(out_type="niigz", out_orientation="RAS"),
                      name='PhaToRAS')

    n4 = pe.Node(ants.N4BiasFieldCorrection(dimension=3), name='Bias')
    bet = pe.Node(fsl.BET(frac=0.4, mask=True), name='BrainExtraction')

    enh_mag = pe.Node(SigmoidFilter(upper_perc=98.8, lower_perc=10.0),
                      name='enh_mag')
    enh_t1w = pe.Node(SigmoidFilter(upper_perc=78.0, lower_perc=15.0),
                      name='enh_t1w')

    # Setup ANTS and registration
    def _aslist(tname):
        import numpy as np
        return np.atleast_1d(tname).tolist()

    fmm2t1w = pe.Node(ants.Registration(output_warped_image=True),
                      name="FMm_to_T1w")
    fmm2t1w.inputs.transforms = ['Rigid'] * 2
    fmm2t1w.inputs.transform_parameters = [(1.0, )] * 2
    fmm2t1w.inputs.number_of_iterations = [[250], [100]]
    fmm2t1w.inputs.dimension = 3
    fmm2t1w.inputs.metric = ['Mattes', 'Mattes']
    fmm2t1w.inputs.metric_weight = [1.0] * 2
    fmm2t1w.inputs.radius_or_number_of_bins = [64, 64]
    fmm2t1w.inputs.sampling_strategy = ['Regular', 'Random']
    fmm2t1w.inputs.sampling_percentage = [None, 0.1]
    fmm2t1w.inputs.convergence_threshold = [1.e-5, 1.e-7]
    fmm2t1w.inputs.convergence_window_size = [10, 5]
    fmm2t1w.inputs.smoothing_sigmas = [[6.0], [2.0]]
    fmm2t1w.inputs.sigma_units = ['vox'] * 2
    fmm2t1w.inputs.shrink_factors = [[6], [1]]  # ,[1] ]
    fmm2t1w.inputs.use_estimate_learning_rate_once = [True] * 2
    fmm2t1w.inputs.use_histogram_matching = [True] * 2
    fmm2t1w.inputs.initial_moving_transform_com = 0
    fmm2t1w.inputs.collapse_output_transforms = True

    binarize = pe.Node(fs.Binarize(min=0.1), name='BinT1')

    warpPhase = pe.Node(ants.ApplyTransforms(dimension=3,
                                             interpolation='BSpline'),
                        name='WarpPhase')
    warpMag = pe.Node(ants.ApplyTransforms(dimension=3,
                                           interpolation='BSpline'),
                      name='WarpMag')

    # Final regrids and phase re-wrapping
    regrid_mag = pe.Node(fs.MRIConvert(resample_type='cubic',
                                       out_datatype='float'),
                         name='Regrid_mag')
    regrid_bmg = pe.Node(fs.MRIConvert(resample_type='cubic',
                                       out_datatype='float'),
                         name='Regrid_mag_brain')
    regrid_pha = pe.Node(fs.MRIConvert(resample_type='cubic',
                                       out_datatype='float'),
                         name='Regrid_pha')

    # denoise = pe.Node(niu.Function(
    #     input_names=['in_file', 'in_mask'], output_names=['out_file'],
    #     function=filter_fmap), name='SmoothBmap')

    addnoise = pe.Node(AddNoise(snr=30), name='PhaseAddNoise')
    wrap_pha = pe.Node(niu.Function(input_names=['in_file'],
                                    output_names=['out_file'],
                                    function=rads_ph_wrap),
                       name='PhaseWrap')

    mwrapped = pe.Node(niu.Merge(2), name='MergeWrapped')
    munwrapped = pe.Node(niu.Merge(2), name='MergeUnwrapped')

    workflow.connect([
        (inputnode, binarize, [('t1w_brain', 'in_file')]),
        (inputnode, fslroi, [('mag', 'in_file')]),
        # Connect first nodes
        (fslroi, mag2RAS, [('roi_file', 'in_file')]),
        (mag2RAS, n4, [('out_file', 'input_image')]),
        (n4, bet, [('output_image', 'in_file')]),
        (inputnode, enh_t1w, [('t1w_brain', 'in_file')]),
        (binarize, enh_t1w, [('binary_file', 'in_mask')]),
        (n4, enh_mag, [('output_image', 'in_file')]),
        (bet, enh_mag, [('mask_file', 'in_mask')]),
        # ANTs
        (enh_t1w, fmm2t1w, [('out_file', 'fixed_image')]),
        (enh_mag, fmm2t1w, [('out_file', 'moving_image')]),
        (binarize, fmm2t1w, [('binary_file', 'fixed_image_mask')]),
        (bet, fmm2t1w, [('mask_file', 'moving_image_mask')]),

        # Unwrap
        (inputnode, unwrap, [('pha', 'in_file')]),
        (bet, unwrap, [('mask_file', 'in_mask')]),
        (unwrap, pha2RAS, [('out_file', 'in_file')]),

        # Transforms
        (inputnode, warpPhase, [('t1w_brain', 'reference_image')]),
        (pha2RAS, warpPhase, [('out_file', 'input_image')]),
        (fmm2t1w, warpPhase, [('forward_transforms', 'transforms'),
                              ('forward_invert_flags',
                               'invert_transform_flags')]),
        (inputnode, warpMag, [('t1w_brain', 'reference_image')]),
        (n4, warpMag, [('output_image', 'input_image')]),
        (fmm2t1w, warpMag, [('forward_transforms', 'transforms'),
                            ('forward_invert_flags', 'invert_transform_flags')
                            ]),
        (warpMag, regrid_mag, [('output_image', 'in_file')]),
        (inputnode, regrid_mag, [('dwi_mask', 'reslice_like')]),
        (fmm2t1w, regrid_bmg, [('warped_image', 'in_file')]),
        (inputnode, regrid_bmg, [('dwi_mask', 'reslice_like')]),
        (warpPhase, regrid_pha, [('output_image', 'in_file')]),
        (inputnode, regrid_pha, [('dwi_mask', 'reslice_like')]),
        (regrid_pha, addnoise, [('out_file', 'in_file')]),
        # (regrid_pha,        denoise, [('out_file', 'in_file')]),
        # (inputnode,         denoise, [('dwi_mask', 'in_mask')]),
        # (denoise,          addnoise, [('out_file', 'in_file')]),
        (inputnode, addnoise, [('dwi_mask', 'in_mask')]),
        (addnoise, wrap_pha, [('out_file', 'in_file')]),
        (regrid_bmg, munwrapped, [('out_file', 'in1')]),
        (regrid_pha, munwrapped, [('out_file', 'in2')]),
        # (denoise,        munwrapped, [('out_file', 'in2')]),
        (regrid_bmg, mwrapped, [('out_file', 'in1')]),
        (wrap_pha, mwrapped, [('out_file', 'in2')]),
        (regrid_mag, outputnode, [('out_file', 'magnitude')]),
        (regrid_bmg, outputnode, [('out_file', 'mag_brain')]),
        (munwrapped, outputnode, [('out', 'unwrapped')]),
        (mwrapped, outputnode, [('out', 'wrapped')]),
    ])
    return workflow