Example #1
0
def test_exec():
    target='target/IBSR_01_ana_strip.nii.gz'
    reference='reference/t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz'
    affine='IBSR_01_ana_strip_t1_icbm_normal_1mm_pn0_rf0_peeledAffine.txt'
    paramiter='30x30x0'
    inversion_iter='20'
    inversion_tolerance='1e-3'
    report_status=True
    print('Registering %s to %s'%(target, reference))
    sys.stdout.flush()
    ####Initialize parameter dictionaries####
    metric_parameters = {
        'max_step_length':0.25,
        'sigma_diff':3.0,
        'radius':4}
    similarity_metric = CCMetric(3, metric_parameters)
    optimizer_parameters = {
        'max_iter':[int(i) for i in paramiter.split(',')],
        'inversion_iter':int(inversion_iter),
        'inversion_tolerance':float(inversion_tolerance),
        'report_status':True if report_status else False}
    moving = nib.load(target)
    moving_affine = moving.get_affine()
    fixed = nib.load(reference)
    fixed_affine = fixed.get_affine()
    print 'Affine:', affine
    if not affine:
        transform = np.eye(4)
    else:
        transform = rcommon.readAntsAffine(affine)
    init_affine = np.linalg.inv(moving_affine).dot(transform.dot(fixed_affine))
    #print initAffine
    moving = moving.get_data().squeeze().astype(np.float64)
    fixed = fixed.get_data().squeeze().astype(np.float64)
    moving = moving.copy(order='C')
    fixed = fixed.copy(order='C')
    moving = (moving-moving.min())/(moving.max()-moving.min())
    fixed = (fixed-fixed.min())/(fixed.max()-fixed.min())
    ###################Run registration##################

    update_rule = UpdateRule.Composition()
    registration_optimizer = SymmetricRegistrationOptimizer(
        fixed, moving, None, init_affine, similarity_metric, update_rule,
        optimizer_parameters)
    registration_optimizer.optimize()
    #displacement = registration_optimizer.get_forward()
    #inverse = registration_optimizer.get_backward()
    del registration_optimizer
    del similarity_metric
    del update_rule
Example #2
0
def register_3d(params):
    r'''
    Runs the non-linear registration with the parsed parameters
    '''
    print('Registering %s to %s'%(params.target, params.reference))
    sys.stdout.flush()
    ####Initialize parameter dictionaries####
    metric_name=params.metric[0:params.metric.find('[')]
    metric_params_list=params.metric[params.metric.find('[')+1:params.metric.find(']')].split(',')
    if metric_name=='EM':
        metric_parameters = {
            'max_step_length':float(metric_params_list[0]),
            'lambda':float(metric_params_list[1]),
            'q_levels':int(metric_params_list[2]),
            'max_inner_iter':int(metric_params_list[3]),
            'use_double_gradient':False if params.single_gradient else True}
        similarity_metric = EMMetric(3, metric_parameters)
    elif metric_name=='CC':
        metric_parameters = {
            'max_step_length':float(metric_params_list[0]),
            'sigma_diff':float(metric_params_list[1]),
            'radius':int(metric_params_list[2])}
        similarity_metric = CCMetric(3, metric_parameters)
    optimizer_parameters = {
        'max_iter':[int(i) for i in params.iter.split(',')],
        'inversion_iter':int(params.inversion_iter),
        'inversion_tolerance':float(params.inversion_tolerance),
        'report_status':True if params.report_status else False}
    moving = nib.load(params.target)
    moving_affine = moving.get_affine()
    fixed = nib.load(params.reference)
    fixed_affine = fixed.get_affine()
    print 'Affine:', params.affine
    if not params.affine:
        transform = np.eye(4)
    else:
        transform = rcommon.readAntsAffine(params.affine)
    init_affine = np.linalg.inv(moving_affine).dot(transform.dot(fixed_affine))
    #print initAffine
    moving = moving.get_data().squeeze().astype(np.float64)
    fixed = fixed.get_data().squeeze().astype(np.float64)
    moving = moving.copy(order='C')
    fixed = fixed.copy(order='C')
    moving = (moving-moving.min())/(moving.max()-moving.min())
    fixed = (fixed-fixed.min())/(fixed.max()-fixed.min())
    ###################Run registration##################

    update_rule = UpdateRule.Composition()
    registration_optimizer = SymmetricRegistrationOptimizer(
        fixed, moving, None, init_affine, similarity_metric, update_rule,
        optimizer_parameters)
    registration_optimizer.optimize()
    displacement = registration_optimizer.get_forward()
    inverse = registration_optimizer.get_backward()
    del registration_optimizer
    del similarity_metric
    del update_rule
    save_registration_results(init_affine, displacement, inverse, params)