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
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)