def mni305_mni152(voxels): mni152_header, mni305_header = get_mni152_and_305_headers() ras = apply_trans(np.linalg.inv(mni305_header.get_vox2ras()), voxels) mni152 = np.rint( apply_trans(np.linalg.inv(mni152_header.get_vox2ras()), ras)).astype(int) return mni152
def mni_to_tkras(points, subject, subjects_dir, tal_xfm=None, orig_vox2ras=None, orig_vox2tkras=None): # https://mail.nmr.mgh.harvard.edu/pipermail/freesurfer/2012-June/024293.html # MNI305RAS = TalXFM * orig_vox2ras * inv(orig_vox2tkras) * [tkrR tkrA tkrS 1] if tal_xfm is None: tal_xfm = get_talxfm(subject, subjects_dir) if orig_vox2ras is None: orig_vox2ras = get_vox2ras( op.join(subjects_dir, subject, 'mri', 'orig.mgz')) if orig_vox2tkras is None: orig_vox2tkras = get_vox2ras_tkr( op.join(subjects_dir, subject, 'mri', 'orig.mgz')) # Only in python 3.5: # trans = tal_xfm @ orig_vox2ras @ np.linalg.inv(orig_vox2tkras) # trans = tal_xfm.dot(orig_vox2ras).dot(np.linalg.inv(orig_vox2tkras)) # trans = np.linalg.inv(trans) trans = inv(tal_xfm @ orig_vox2ras @ inv(orig_vox2tkras)) # points = apply_trans(orig_vox2tkras, points) # points = apply_trans(np.linalg.inv(orig_vox2ras), points) # points = apply_trans(np.linalg.inv(tal_xfm), points) points = apply_trans(trans, points) return points
def tkras_to_vox(points, subject_orig_header=None, subject='', subjects_dir=''): if subject_orig_header is None: subject_orig_header = get_subject_orig_header(subject, subjects_dir) vox2ras_tkr = subject_orig_header.get_vox2ras_tkr() ras_tkr2vox = np.linalg.inv(vox2ras_tkr) vox = apply_trans(ras_tkr2vox, points) return vox
def tkras_to_mni(points, subject, subjects_dir): # https://mail.nmr.mgh.harvard.edu/pipermail/freesurfer/2012-June/024293.html # MNI305RAS = TalXFM * orig_vox2ras * inv(orig_vox2tkras) * [tkrR tkrA tkrS 1] tal_xfm = get_talxfm(subject, subjects_dir) orig_vox2ras = get_vox2ras( op.join(subjects_dir, subject, 'mri', 'orig.mgz')) orig_vox2tkras = get_vox2ras_tkr( op.join(subjects_dir, subject, 'mri', 'orig.mgz')) trans = tal_xfm @ orig_vox2ras @ inv(orig_vox2tkras) points = apply_trans(trans, points) # points = apply_trans(tal_xfm, points) # points = apply_trans(orig_vox2ras, points) # points = apply_trans(np.linalg.inv(orig_vox2tkras), points) return points
def vox_to_ras(points, subject_orig_header=None, subject='', subjects_dir=''): if subject_orig_header is None: subject_orig_header = get_subject_orig_header(subject, subjects_dir) vox2ras = subject_orig_header.get_vox2ras() ras = apply_trans(vox2ras, points) return ras
def mni152_mni305(points): return apply_trans(np.linalg.inv(mni305_to_mni152_matrix()), points)
def mni305_to_mni152(points): return apply_trans(mni305_to_mni152_matrix(), points)