def warpANTSAffine(targetName, referenceName, affineName, oname, interpolationType='trilinear'): baseName=rcommon.getBaseFileName(targetName) nib_target=nib.load(targetName) nib_reference=nib.load(referenceName) M=nib_target.get_affine() F=nib_reference.get_affine() referenceShape=np.array(nib_reference.shape, dtype=np.int32) ######Load and compose affine##### if not affineName: T=np.eye(4) else: T=rcommon.readAntsAffine(affineName) affineComposition=np.linalg.inv(M).dot(T.dot(F)) ###################### if interpolationType=='NN': target=nib_target.get_data().squeeze().astype(np.int32) target=np.copy(target, order='C') warped=np.array(tf.warp_discrete_volumeNNAffine(target, referenceShape, affineComposition)).astype(np.int16) else: target=nib_target.get_data().squeeze().astype(np.float64) target=np.copy(target, order='C') warped=np.array(tf.warp_volume_affine(target, referenceShape, affineComposition)).astype(np.int16) warped=nib.Nifti1Image(warped, F) if not oname: oname="warped"+baseName+"nii.gz" warped.to_filename(oname)
def save_registration_results(init_affine, displacement, inverse, params): r''' Warp the target image using the obtained deformation field ''' fixed = nib.load(params.reference) fixed_affine = fixed.get_affine() reference_shape = np.array(fixed.shape, dtype=np.int32) warp_dir = params.warp_dir base_moving = rcommon.getBaseFileName(params.target) base_fixed = rcommon.getBaseFileName(params.reference) moving = nib.load(params.target).get_data().squeeze().astype(np.float64) moving = moving.copy(order='C') warped = np.array(tf.warp_volume(moving, displacement)).astype(np.int16) img_warped = nib.Nifti1Image(warped, fixed_affine) img_warped.to_filename('warpedDiff_'+base_moving+'_'+base_fixed+'.nii.gz') #---warp the target image using the affine transformation only--- moving = nib.load(params.target).get_data().squeeze().astype(np.float64) moving = moving.copy(order='C') warped = np.array( tf.warp_volume_affine(moving, reference_shape, init_affine) ).astype(np.int16) img_warped = nib.Nifti1Image(warped, fixed_affine) img_warped.to_filename('warpedAffine_'+base_moving+'_'+base_fixed+'.nii.gz') #---warp all volumes in the warp directory using NN interpolation names = [os.path.join(warp_dir, name) for name in os.listdir(warp_dir)] for name in names: to_warp = nib.load(name).get_data().squeeze().astype(np.int32) to_warp = to_warp.copy(order='C') base_warp = rcommon.getBaseFileName(name) warped = np.array( tf.warp_discrete_volumeNN(to_warp, displacement)).astype(np.int16) img_warped = nib.Nifti1Image(warped, fixed_affine) img_warped.to_filename('warpedDiff_'+base_warp+'_'+base_fixed+'.nii.gz') #---finally, the optional output if params.output_list == None: return if 'lattice' in params.output_list: save_deformed_lattice_3d( displacement, 'latticeDispDiff_'+base_moving+'_'+base_fixed+'.nii.gz') if 'inv_lattice' in params.output_list: save_deformed_lattice_3d( inverse, 'invLatticeDispDiff_'+base_moving+'_'+base_fixed+'.nii.gz') if 'displacement' in params.output_list: np.save('dispDiff_'+base_moving+'_'+base_fixed+'.npy', displacement) if 'inverse' in params.output_list: np.save('invDispDiff_'+base_moving+'_'+base_fixed+'.npy', inverse)
def showRegistrationResultMidSlices(fnameMoving, fnameFixed, fnameAffine=None): ''' showRegistrationResultMidSlices('IBSR_01_ana_strip.nii.gz', 't1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 'IBSR_01_ana_strip_t1_icbm_normal_1mm_pn0_rf0_peeledAffine.txt') showRegistrationResultMidSlices('warpedDiff_IBSR_01_ana_strip_t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 't1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_01_ana_strip_IBSR_02_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_02/IBSR_02_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_01_segTRI_ana_IBSR_02_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_02/IBSR_02_segTRI_ana.nii.gz', None) ##Worst pair: showRegistrationResultMidSlices('warpedDiff_IBSR_16_segTRI_ana_IBSR_12_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_12/IBSR_12_segTRI_ana.nii.gz', None) showRegistrationResultMidSlices('/opt/registration/data/t1/IBSR18/IBSR_16/IBSR_16_segTRI_ana.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_12/IBSR_12_segTRI_ana.nii.gz', None) showRegistrationResultMidSlices('/opt/registration/data/t1/IBSR18/IBSR_16/IBSR_16_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_12/IBSR_12_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedAffine_IBSR_16_segTRI_ana_IBSR_12_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_12/IBSR_12_segTRI_ana.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_16_ana_strip_IBSR_12_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_12/IBSR_12_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedAffine_IBSR_16_ana_strip_IBSR_12_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_12/IBSR_12_ana_strip.nii.gz', None) showRegistrationResultMidSlices('/opt/registration/data/t1/IBSR18/IBSR_10/IBSR_10_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_16/IBSR_16_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedAffine_IBSR_10_ana_strip_IBSR_16_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_16/IBSR_16_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedAffine_IBSR_16_ana_strip_IBSR_10_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_10/IBSR_10_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_16_ana_strip_IBSR_10_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_10/IBSR_10_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_01_ana_strip_IBSR_08_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_08/IBSR_08_ana_strip.nii.gz', None) showRegistrationResultMidSlices('/opt/registration/data/t1/IBSR18/IBSR_01/IBSR_01_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_08/IBSR_08_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_13_ana_strip_IBSR_10_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_10/IBSR_10_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedAffine_IBSR_13_ana_strip_IBSR_10_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_10/IBSR_10_ana_strip.nii.gz', None) showRegistrationResultMidSlices('/opt/registration/data/t1/IBSR18/IBSR_13/IBSR_13_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_10/IBSR_10_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_01_ana_strip_IBSR_02_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_10/IBSR_10_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedAffine_IBSR_16_seg_ana_IBSR_10_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_10/IBSR_10_seg_ana.nii.gz', None) showRegistrationResultMidSlices('/opt/registration/data/t1/IBSR18/IBSR_16/IBSR_16_seg_ana.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_10/IBSR_10_seg_ana.nii.gz', None) showRegistrationResultMidSlices('/opt/registration/data/t1/IBSR18/IBSR_01/IBSR_01_segTRI_fill_ana.nii.gz', 'warpedAffine_IBSR_10_segTRI_fill_ana_IBSR_01_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_07_ana_strip_IBSR_17_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_17/IBSR_17_ana_strip.nii.gz', None) showRegistrationResultMidSlices('/opt/registration/data/t1/IBSR18/IBSR_07/IBSR_07_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_17/IBSR_17_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_06_ana_strip_IBSR_17_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_17/IBSR_17_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_07_ana_strip_IBSR_12_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_12/IBSR_12_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_15_ana_strip_IBSR_10_ana_strip.nii.gz', '/opt/registration/data/t1/IBSR18/IBSR_10/IBSR_10_ana_strip.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_01_ana_strip_t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 't1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_01_segTRI_fill_ana_t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 'data/phantom_1.0mm_normal_crisp.rawb.nii.gz', None) showRegistrationResultMidSlices('data/t1/t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 'data/phantom_1.0mm_normal_crisp_peeled.nii.gz', None) showRegistrationResultMidSlices('data/t2/t2_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 'data/phantom_1.0mm_normal_crisp_peeled.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_16_ana_strip_t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 'data/t1/t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', None) showRegistrationResultMidSlices('warpedAffine_IBSR_16_ana_strip_t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 'data/t1/t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', None) showRegistrationResultMidSlices('test16.nii.gz', 'data/t1/t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', None) showRegistrationResultMidSlices('data/t1/t1_icbm_normal_1mm_pn0_rf0.rawb_peeled.nii.gz', 'data/t1/t1_icbm_normal_1mm_pn0_rf0.rawb_peeled.nii.gz', None) showRegistrationResultMidSlices('warpedAffine_IBSR_15_ana_strip_t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 'data/t1/t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_15_ana_strip_t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 'data/t1/t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', None) showRegistrationResultMidSlices('warpedAffine_IBSR_01_ana_strip_t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 'data/t1/t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', None) showRegistrationResultMidSlices('warpedDiff_IBSR_01_ana_strip_t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', 'data/t1/t1_icbm_normal_1mm_pn0_rf0_peeled.nii.gz', None) ''' if(fnameAffine==None): T=np.eye(4) else: T=rcommon.readAntsAffine(fnameAffine) print 'T:',T fixed=nib.load(fnameFixed) F=fixed.get_affine() print 'F:',F fixed=fixed.get_data().squeeze().astype(np.float64) moving=nib.load(fnameMoving) M=moving.get_affine() print 'M:',M moving=moving.get_data().squeeze().astype(np.float64) initAffine=np.linalg.inv(M).dot(T.dot(F)) fixed=np.copy(fixed, order='C') moving=np.copy(moving, order='C') warped=np.array(tf.warp_volume_affine(moving, np.array(fixed.shape).astype(np.int32), initAffine)) sh=warped.shape rcommon.overlayImages(warped[sh[0]//2,:,:], fixed[sh[0]//2,:,:]) rcommon.overlayImages(warped[:,sh[1]//2,:], fixed[:,sh[1]//2,:]) rcommon.overlayImages(warped[:,:,sh[2]//2], fixed[:,:,sh[2]//2])