import commands, sys, os
from glob import glob
import nibabel

# Get path of the toolbox
status, path_sct = commands.getstatusoutput('echo $SCT_DIR')
# Append path that contains scripts, to be able to load modules
sys.path.append(path_sct + '/scripts')
sys.path.append(path_sct + '/dev/tamag')

from numpy import mean, append, isnan, array
import sct_utils as sct
from scipy import ndimage
from msct_register import register_slicereg2d_translation

path = '/Users/tamag/Desktop/test_register_multimodal/diff_size'
os.chdir(path)
src = 'T2_crop.nii.gz'
dest ='data_T2_RPI_crop.nii.gz'


# status, output = sct.run('sct_label_utils -i labels_vertebral.nii.gz -t display-voxel')
# nb = output.find('notation')
# int_nb = nb + 10
# labels = output[int_nb:]

register_slicereg2d_translation(dest, src, remove_temp_files=0, verbose=1)


def register(src, dest, paramreg, param, i_step_str):

    # initiate default parameters of antsRegistration transformation
    ants_registration_params = {'rigid': '', 'affine': '', 'compositeaffine': '', 'similarity': '', 'translation': '',
                                'bspline': ',10', 'gaussiandisplacementfield': ',3,0',
                                'bsplinedisplacementfield': ',5,10', 'syn': ',3,0', 'bsplinesyn': ',1,3'}

    fsloutput = 'export FSLOUTPUTTYPE=NIFTI; '  # for faster processing, all outputs are in NIFTI'

    # set metricSize
    if paramreg.steps[i_step_str].metric == 'MI':
        metricSize = '32'  # corresponds to number of bins
    else:
        metricSize = '4'  # corresponds to radius (for CC, MeanSquares...)

    # set masking
    if param.fname_mask:
        fname_mask = 'mask.nii.gz'
        masking = '-x mask.nii.gz'
    else:
        fname_mask = ''
        masking = ''

    if paramreg.steps[i_step_str].algo == 'slicereg':
        from msct_image import find_zmin_zmax
        # threshold images (otherwise, automatic crop does not work -- see issue #293)
        src_th = sct.add_suffix(src, '_th')
        sct.run(fsloutput+'fslmaths '+src+' -thr 0.1 '+src_th, param.verbose)
        dest_th = sct.add_suffix(dest, '_th')
        sct.run(fsloutput+'fslmaths '+dest+' -thr 0.1 '+dest_th, param.verbose)
        # find zmin and zmax
        zmin_src, zmax_src = find_zmin_zmax(src_th)
        zmin_dest, zmax_dest = find_zmin_zmax(dest_th)
        zmin_total = max([zmin_src, zmin_dest])
        zmax_total = min([zmax_src, zmax_dest])
        # crop data
        src_crop = sct.add_suffix(src, '_crop')
        sct.run('sct_crop_image -i '+src+' -o '+src_crop+' -dim 2 -start '+str(zmin_total)+' -end '+str(zmax_total), param.verbose)
        dest_crop = sct.add_suffix(dest, '_crop')
        sct.run('sct_crop_image -i '+dest+' -o '+dest_crop+' -dim 2 -start '+str(zmin_total)+' -end '+str(zmax_total), param.verbose)
        # update variables
        src = src_crop
        dest = dest_crop
        # estimate transfo
        cmd = ('isct_antsSliceRegularizedRegistration '
               '-t Translation[0.5] '
               '-m '+paramreg.steps[i_step_str].metric+'['+dest+','+src+',1,'+metricSize+',Regular,0.2] '
               '-p '+paramreg.steps[i_step_str].poly+' '
               '-i '+paramreg.steps[i_step_str].iter+' '
               '-f 1 '
               '-s '+paramreg.steps[i_step_str].smooth+' '
               '-v 1 '  # verbose (verbose=2 does not exist, so we force it to 1)
               '-o [step'+i_step_str+','+src+'_regStep'+i_step_str+'.nii] '  # here the warp name is stage10 because antsSliceReg add "Warp"
               +masking)
        warp_forward_out = 'step'+i_step_str+'Warp.nii.gz'
        warp_inverse_out = 'step'+i_step_str+'InverseWarp.nii.gz'

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_pointwise':
        from msct_register import register_slicereg2d_pointwise
        warp_forward_out = 'step'+i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step'+i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_pointwise(src, dest, window_length=paramreg.steps[i_step_str].window_length, paramreg=Paramreg(step=paramreg.steps[i_step_str].step, type=paramreg.steps[i_step_str].type, algo='Translation', metric=paramreg.steps[i_step_str].metric, iter= paramreg.steps[i_step_str].iter, shrink=paramreg.steps[i_step_str].shrink, smooth=paramreg.steps[i_step_str].smooth, gradStep=paramreg.steps[i_step_str].gradStep),
                                      warp_forward_out=warp_forward_out, warp_inverse_out=warp_inverse_out, factor=param.outlier_factor, verbose=param.verbose)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_translation':
        from msct_register import register_slicereg2d_translation
        warp_forward_out = 'step'+i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step'+i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_translation(src, dest, window_length=paramreg.steps[i_step_str].window_length, paramreg=Paramreg(step=paramreg.steps[i_step_str].step, type=paramreg.steps[i_step_str].type, algo='Translation', metric=paramreg.steps[i_step_str].metric, iter= paramreg.steps[i_step_str].iter, shrink=paramreg.steps[i_step_str].shrink, smooth=paramreg.steps[i_step_str].smooth, gradStep=paramreg.steps[i_step_str].gradStep),
                                        fname_mask=fname_mask, warp_forward_out=warp_forward_out, warp_inverse_out=warp_inverse_out, factor=param.outlier_factor, remove_temp_files=param.remove_temp_files,
                                        verbose=param.verbose, ants_registration_params=ants_registration_params)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_rigid':
        from msct_register import register_slicereg2d_rigid
        warp_forward_out = 'step'+i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step'+i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_rigid(src, dest, window_length=paramreg.steps[i_step_str].window_length, paramreg=Paramreg(step=paramreg.steps[i_step_str].step, type=paramreg.steps[i_step_str].type, algo='Rigid', metric=paramreg.steps[i_step_str].metric, iter= paramreg.steps[i_step_str].iter, shrink=paramreg.steps[i_step_str].shrink, smooth=paramreg.steps[i_step_str].smooth, gradStep=paramreg.steps[i_step_str].gradStep),
                                  fname_mask=fname_mask, warp_forward_out=warp_forward_out, warp_inverse_out=warp_inverse_out, factor=param.outlier_factor, remove_temp_files=param.remove_temp_files,
                                  verbose=param.verbose, ants_registration_params=ants_registration_params)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_affine':
        from msct_register import register_slicereg2d_affine
        warp_forward_out = 'step'+i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step'+i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_affine(src, dest, window_length=paramreg.steps[i_step_str].window_length, paramreg=Paramreg(step=paramreg.steps[i_step_str].step, type=paramreg.steps[i_step_str].type, algo='Affine', metric=paramreg.steps[i_step_str].metric, iter= paramreg.steps[i_step_str].iter, shrink=paramreg.steps[i_step_str].shrink, smooth=paramreg.steps[i_step_str].smooth, gradStep=paramreg.steps[i_step_str].gradStep),
                                   fname_mask=fname_mask, warp_forward_out=warp_forward_out, warp_inverse_out=warp_inverse_out, factor=param.outlier_factor, remove_temp_files=param.remove_temp_files,
                                   verbose=param.verbose, ants_registration_params=ants_registration_params)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_syn':
        from msct_register import register_slicereg2d_syn
        warp_forward_out = 'step'+i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step'+i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_syn(src, dest, window_length=paramreg.steps[i_step_str].window_length, paramreg=Paramreg(step=paramreg.steps[i_step_str].step, type=paramreg.steps[i_step_str].type, algo='SyN', metric=paramreg.steps[i_step_str].metric, iter= paramreg.steps[i_step_str].iter, shrink=paramreg.steps[i_step_str].shrink, smooth=paramreg.steps[i_step_str].smooth, gradStep=paramreg.steps[i_step_str].gradStep),
                                fname_mask=fname_mask, warp_forward_out=warp_forward_out, warp_inverse_out=warp_inverse_out, factor=param.outlier_factor, remove_temp_files=param.remove_temp_files,
                                verbose=param.verbose, ants_registration_params=ants_registration_params)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_bsplinesyn':
        from msct_register import register_slicereg2d_bsplinesyn
        warp_forward_out = 'step'+i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step'+i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_bsplinesyn(src, dest, window_length=paramreg.steps[i_step_str].window_length, paramreg=Paramreg(step=paramreg.steps[i_step_str].step, type=paramreg.steps[i_step_str].type, algo='BSplineSyN', metric=paramreg.steps[i_step_str].metric, iter= paramreg.steps[i_step_str].iter, shrink=paramreg.steps[i_step_str].shrink, smooth=paramreg.steps[i_step_str].smooth, gradStep=paramreg.steps[i_step_str].gradStep),
                                       fname_mask=fname_mask, warp_forward_out=warp_forward_out, warp_inverse_out=warp_inverse_out, factor=param.outlier_factor, remove_temp_files=param.remove_temp_files,
                                       verbose=param.verbose, ants_registration_params=ants_registration_params)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo.lower() in ants_registration_params:
        from msct_image import pad_image
        # Pad the destination image (because ants doesn't deform the extremities)
        # N.B. no need to pad if iter = 0
        if not paramreg.steps[i_step_str].iter == '0':
            dest_pad = sct.add_suffix(dest, '_pad')
            pad_image(dest, dest_pad, param.padding)
            dest = dest_pad

        cmd = ('isct_antsRegistration '
               '--dimensionality 3 '
               '--transform '+paramreg.steps[i_step_str].algo+'['+paramreg.steps[i_step_str].gradStep +
               ants_registration_params[paramreg.steps[i_step_str].algo.lower()]+'] '
               '--metric '+paramreg.steps[i_step_str].metric+'['+dest+','+src+',1,'+metricSize+'] '
               '--convergence '+paramreg.steps[i_step_str].iter+' '
               '--shrink-factors '+paramreg.steps[i_step_str].shrink+' '
               '--smoothing-sigmas '+paramreg.steps[i_step_str].smooth+'mm '
               '--restrict-deformation 1x1x0 '
               '--output [step'+i_step_str+','+src+'_regStep'+i_step_str+'.nii] '
               '--interpolation BSpline[3] '
               +masking)
        if param.verbose >= 1:
            cmd += ' --verbose 1'
        if paramreg.steps[i_step_str].algo in ['rigid', 'affine']:
            warp_forward_out = 'step'+i_step_str+'0GenericAffine.mat'
            warp_inverse_out = '-step'+i_step_str+'0GenericAffine.mat'
        else:
            warp_forward_out = 'step'+i_step_str+'0Warp.nii.gz'
            warp_inverse_out = 'step'+i_step_str+'0InverseWarp.nii.gz'
    else:
        sct.printv('\nERROR: algo '+paramreg.steps[i_step_str].algo+' does not exist. Exit program\n', 1, 'error')

    # run registration
    status, output = sct.run(cmd, param.verbose)

    if os.path.isfile(warp_forward_out):
        # rename warping fields
        if paramreg.steps[i_step_str].algo in ['rigid', 'affine']:
            warp_forward = 'warp_forward_'+i_step_str+'.mat'
            os.rename(warp_forward_out, warp_forward)
            warp_inverse = '-warp_forward_'+i_step_str+'.mat'
        else:
            warp_forward = 'warp_forward_'+i_step_str+'.nii.gz'
            warp_inverse = 'warp_inverse_'+i_step_str+'.nii.gz'
            os.rename(warp_forward_out, warp_forward)
            os.rename(warp_inverse_out, warp_inverse)
    else:
        sct.printv(output, 1, 'error')
        sct.printv('\nERROR: ANTs failed. Exit program.\n', 1, 'error')

    return warp_forward, warp_inverse
示例#3
0
def register(src, dest, paramreg, param, i_step_str):

    # initiate default parameters of antsRegistration transformation
    ants_registration_params = {
        'rigid': '',
        'affine': '',
        'compositeaffine': '',
        'similarity': '',
        'translation': '',
        'bspline': ',10',
        'gaussiandisplacementfield': ',3,0',
        'bsplinedisplacementfield': ',5,10',
        'syn': ',3,0',
        'bsplinesyn': ',1,3'
    }

    fsloutput = 'export FSLOUTPUTTYPE=NIFTI; '  # for faster processing, all outputs are in NIFTI'

    # set metricSize
    if paramreg.steps[i_step_str].metric == 'MI':
        metricSize = '32'  # corresponds to number of bins
    else:
        metricSize = '4'  # corresponds to radius (for CC, MeanSquares...)

    # set masking
    if param.fname_mask:
        fname_mask = 'mask.nii.gz'
        masking = '-x mask.nii.gz'
    else:
        fname_mask = ''
        masking = ''

    if paramreg.steps[i_step_str].algo == 'slicereg':
        from msct_image import find_zmin_zmax
        # threshold images (otherwise, automatic crop does not work -- see issue #293)
        src_th = sct.add_suffix(src, '_th')
        from msct_image import Image
        nii = Image(src)
        data = nii.data
        data[data < 0.1] = 0
        nii.data = data
        nii.setFileName(src_th)
        nii.save()
        # sct.run(fsloutput+'fslmaths '+src+' -thr 0.1 '+src_th, param.verbose)
        dest_th = sct.add_suffix(dest, '_th')
        nii = Image(dest)
        data = nii.data
        data[data < 0.1] = 0
        nii.data = data
        nii.setFileName(dest_th)
        nii.save()
        # sct.run(fsloutput+'fslmaths '+dest+' -thr 0.1 '+dest_th, param.verbose)
        # find zmin and zmax
        zmin_src, zmax_src = find_zmin_zmax(src_th)
        zmin_dest, zmax_dest = find_zmin_zmax(dest_th)
        zmin_total = max([zmin_src, zmin_dest])
        zmax_total = min([zmax_src, zmax_dest])
        # crop data
        src_crop = sct.add_suffix(src, '_crop')
        sct.run(
            'sct_crop_image -i ' + src + ' -o ' + src_crop +
            ' -dim 2 -start ' + str(zmin_total) + ' -end ' + str(zmax_total),
            param.verbose)
        dest_crop = sct.add_suffix(dest, '_crop')
        sct.run(
            'sct_crop_image -i ' + dest + ' -o ' + dest_crop +
            ' -dim 2 -start ' + str(zmin_total) + ' -end ' + str(zmax_total),
            param.verbose)
        # update variables
        src = src_crop
        dest = dest_crop
        # estimate transfo
        cmd = (
            'isct_antsSliceRegularizedRegistration '
            '-t Translation[0.5] '
            '-m ' + paramreg.steps[i_step_str].metric + '[' + dest + ',' +
            src + ',1,' + metricSize + ',Regular,0.2] '
            '-p ' + paramreg.steps[i_step_str].poly + ' '
            '-i ' + paramreg.steps[i_step_str].iter + ' '
            '-f 1 '
            '-s ' + paramreg.steps[i_step_str].smooth + ' '
            '-v 1 '  # verbose (verbose=2 does not exist, so we force it to 1)
            '-o [step' + i_step_str + ',' + src + '_regStep' + i_step_str +
            '.nii] '  # here the warp name is stage10 because antsSliceReg add "Warp"
            + masking)
        warp_forward_out = 'step' + i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step' + i_step_str + 'InverseWarp.nii.gz'

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_pointwise':
        from msct_register import register_slicereg2d_pointwise
        warp_forward_out = 'step' + i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step' + i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_pointwise(
            src,
            dest,
            window_length=paramreg.steps[i_step_str].window_length,
            paramreg=Paramreg(step=paramreg.steps[i_step_str].step,
                              type=paramreg.steps[i_step_str].type,
                              algo='Translation',
                              metric=paramreg.steps[i_step_str].metric,
                              iter=paramreg.steps[i_step_str].iter,
                              shrink=paramreg.steps[i_step_str].shrink,
                              smooth=paramreg.steps[i_step_str].smooth,
                              gradStep=paramreg.steps[i_step_str].gradStep),
            warp_forward_out=warp_forward_out,
            warp_inverse_out=warp_inverse_out,
            factor=param.outlier_factor,
            verbose=param.verbose)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_translation':
        from msct_register import register_slicereg2d_translation
        warp_forward_out = 'step' + i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step' + i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_translation(
            src,
            dest,
            window_length=paramreg.steps[i_step_str].window_length,
            paramreg=Paramreg(step=paramreg.steps[i_step_str].step,
                              type=paramreg.steps[i_step_str].type,
                              algo='Translation',
                              metric=paramreg.steps[i_step_str].metric,
                              iter=paramreg.steps[i_step_str].iter,
                              shrink=paramreg.steps[i_step_str].shrink,
                              smooth=paramreg.steps[i_step_str].smooth,
                              gradStep=paramreg.steps[i_step_str].gradStep),
            fname_mask=fname_mask,
            warp_forward_out=warp_forward_out,
            warp_inverse_out=warp_inverse_out,
            factor=param.outlier_factor,
            remove_temp_files=param.remove_temp_files,
            verbose=param.verbose,
            ants_registration_params=ants_registration_params)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_rigid':
        from msct_register import register_slicereg2d_rigid
        warp_forward_out = 'step' + i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step' + i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_rigid(
            src,
            dest,
            window_length=paramreg.steps[i_step_str].window_length,
            paramreg=Paramreg(step=paramreg.steps[i_step_str].step,
                              type=paramreg.steps[i_step_str].type,
                              algo='Rigid',
                              metric=paramreg.steps[i_step_str].metric,
                              iter=paramreg.steps[i_step_str].iter,
                              shrink=paramreg.steps[i_step_str].shrink,
                              smooth=paramreg.steps[i_step_str].smooth,
                              gradStep=paramreg.steps[i_step_str].gradStep),
            fname_mask=fname_mask,
            warp_forward_out=warp_forward_out,
            warp_inverse_out=warp_inverse_out,
            factor=param.outlier_factor,
            remove_temp_files=param.remove_temp_files,
            verbose=param.verbose,
            ants_registration_params=ants_registration_params)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_affine':
        from msct_register import register_slicereg2d_affine
        warp_forward_out = 'step' + i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step' + i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_affine(
            src,
            dest,
            window_length=paramreg.steps[i_step_str].window_length,
            paramreg=Paramreg(step=paramreg.steps[i_step_str].step,
                              type=paramreg.steps[i_step_str].type,
                              algo='Affine',
                              metric=paramreg.steps[i_step_str].metric,
                              iter=paramreg.steps[i_step_str].iter,
                              shrink=paramreg.steps[i_step_str].shrink,
                              smooth=paramreg.steps[i_step_str].smooth,
                              gradStep=paramreg.steps[i_step_str].gradStep),
            fname_mask=fname_mask,
            warp_forward_out=warp_forward_out,
            warp_inverse_out=warp_inverse_out,
            factor=param.outlier_factor,
            remove_temp_files=param.remove_temp_files,
            verbose=param.verbose,
            ants_registration_params=ants_registration_params)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_syn':
        from msct_register import register_slicereg2d_syn
        warp_forward_out = 'step' + i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step' + i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_syn(
            src,
            dest,
            window_length=paramreg.steps[i_step_str].window_length,
            paramreg=Paramreg(step=paramreg.steps[i_step_str].step,
                              type=paramreg.steps[i_step_str].type,
                              algo='SyN',
                              metric=paramreg.steps[i_step_str].metric,
                              iter=paramreg.steps[i_step_str].iter,
                              shrink=paramreg.steps[i_step_str].shrink,
                              smooth=paramreg.steps[i_step_str].smooth,
                              gradStep=paramreg.steps[i_step_str].gradStep),
            fname_mask=fname_mask,
            warp_forward_out=warp_forward_out,
            warp_inverse_out=warp_inverse_out,
            factor=param.outlier_factor,
            remove_temp_files=param.remove_temp_files,
            verbose=param.verbose,
            ants_registration_params=ants_registration_params)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo == 'slicereg2d_bsplinesyn':
        from msct_register import register_slicereg2d_bsplinesyn
        warp_forward_out = 'step' + i_step_str + 'Warp.nii.gz'
        warp_inverse_out = 'step' + i_step_str + 'InverseWarp.nii.gz'
        register_slicereg2d_bsplinesyn(
            src,
            dest,
            window_length=paramreg.steps[i_step_str].window_length,
            paramreg=Paramreg(step=paramreg.steps[i_step_str].step,
                              type=paramreg.steps[i_step_str].type,
                              algo='BSplineSyN',
                              metric=paramreg.steps[i_step_str].metric,
                              iter=paramreg.steps[i_step_str].iter,
                              shrink=paramreg.steps[i_step_str].shrink,
                              smooth=paramreg.steps[i_step_str].smooth,
                              gradStep=paramreg.steps[i_step_str].gradStep),
            fname_mask=fname_mask,
            warp_forward_out=warp_forward_out,
            warp_inverse_out=warp_inverse_out,
            factor=param.outlier_factor,
            remove_temp_files=param.remove_temp_files,
            verbose=param.verbose,
            ants_registration_params=ants_registration_params)
        cmd = ('')

    elif paramreg.steps[i_step_str].algo.lower() in ants_registration_params:
        from msct_image import pad_image
        # Pad the destination image (because ants doesn't deform the extremities)
        # N.B. no need to pad if iter = 0
        if not paramreg.steps[i_step_str].iter == '0':
            dest_pad = sct.add_suffix(dest, '_pad')
            pad_image(dest, dest_pad, param.padding)
            dest = dest_pad

        cmd = (
            'isct_antsRegistration '
            '--dimensionality 3 '
            '--transform ' + paramreg.steps[i_step_str].algo + '[' +
            paramreg.steps[i_step_str].gradStep +
            ants_registration_params[paramreg.steps[i_step_str].algo.lower()] +
            '] '
            '--metric ' + paramreg.steps[i_step_str].metric + '[' + dest +
            ',' + src + ',1,' + metricSize + '] '
            '--convergence ' + paramreg.steps[i_step_str].iter + ' '
            '--shrink-factors ' + paramreg.steps[i_step_str].shrink + ' '
            '--smoothing-sigmas ' + paramreg.steps[i_step_str].smooth + 'mm '
            '--restrict-deformation 1x1x0 '
            '--output [step' + i_step_str + ',' + src + '_regStep' +
            i_step_str + '.nii] '
            '--interpolation BSpline[3] ' + masking)
        if param.verbose >= 1:
            cmd += ' --verbose 1'
        if paramreg.steps[i_step_str].algo in ['rigid', 'affine']:
            warp_forward_out = 'step' + i_step_str + '0GenericAffine.mat'
            warp_inverse_out = '-step' + i_step_str + '0GenericAffine.mat'
        else:
            warp_forward_out = 'step' + i_step_str + '0Warp.nii.gz'
            warp_inverse_out = 'step' + i_step_str + '0InverseWarp.nii.gz'
    else:
        sct.printv(
            '\nERROR: algo ' + paramreg.steps[i_step_str].algo +
            ' does not exist. Exit program\n', 1, 'error')

    # run registration
    status, output = sct.run(cmd, param.verbose)

    if os.path.isfile(warp_forward_out):
        # rename warping fields
        if paramreg.steps[i_step_str].algo in ['rigid', 'affine']:
            warp_forward = 'warp_forward_' + i_step_str + '.mat'
            os.rename(warp_forward_out, warp_forward)
            warp_inverse = '-warp_forward_' + i_step_str + '.mat'
        else:
            warp_forward = 'warp_forward_' + i_step_str + '.nii.gz'
            warp_inverse = 'warp_inverse_' + i_step_str + '.nii.gz'
            os.rename(warp_forward_out, warp_forward)
            os.rename(warp_inverse_out, warp_inverse)
    else:
        sct.printv(output, 1, 'error')
        sct.printv('\nERROR: ANTs failed. Exit program.\n', 1, 'error')

    return warp_forward, warp_inverse
示例#4
0
#!/usr/bin/env python

import commands, sys, os
from glob import glob
import nibabel

# Get path of the toolbox
status, path_sct = commands.getstatusoutput('echo $SCT_DIR')
# Append path that contains scripts, to be able to load modules
sys.path.append(path_sct + '/scripts')
sys.path.append(path_sct + '/dev/tamag')

from numpy import mean, append, isnan, array
import sct_utils as sct
from scipy import ndimage
from msct_register import register_slicereg2d_translation

path = '/Users/tamag/Desktop/test_register_multimodal/diff_size'
os.chdir(path)
src = 'T2_crop.nii.gz'
dest = 'data_T2_RPI_crop.nii.gz'

# status, output = sct.run('sct_label_utils -i labels_vertebral.nii.gz -t display-voxel')
# nb = output.find('notation')
# int_nb = nb + 10
# labels = output[int_nb:]

register_slicereg2d_translation(dest, src, remove_temp_files=0, verbose=1)