Skip to content

Instantly share code, notes, and snippets.

@larsoner
Created February 3, 2021 20:19
Show Gist options
  • Save larsoner/4c964e21045fc499cb5e380dc79137c0 to your computer and use it in GitHub Desktop.
Save larsoner/4c964e21045fc499cb5e380dc79137c0 to your computer and use it in GitHub Desktop.
bems_brainsuite_fsl.py
# convert MGZ->NII
#
# $ bet T1.nii stripped.nii.gz -n -A -v -e
#
import numpy as np
import nibabel as nib
import pyvista as pv
import mne
img = nib.load('T1.mgz')
xfm = img.header.get_vox2ras_tkr()
bet_map = dict(
brain='',
outer_skin='_outskin',
inner_skull='_inskull',
outer_skull='_outskull',
)
for fs_name, bet_name in bet_map.items():
continue # XXX
mesh = pv.read(f'stripped{bet_name}_mesh.vtk')
rr = np.array(mesh.points)
rr = mne.transforms.apply_trans(xfm, rr)
tris = mesh.faces.reshape(5120, 4)[:, 1:]
mne.write_surface(f'bet_{fs_name}.surf', rr, tris)
# Nearly instantaneous but not great:
#
# $ bse -i T1.nii --mask T1_brain.nii
# $ skullfinder -i T1.nii -m T1_brain.nii -o T1_labeled.nii -s subject --finalOpening
#
bs_map = dict(
brain='brain',
inner_skull='inner_skull',
# These are swapped, which is weird
outer_skull='scalp',
outer_skin='outer_skull',
)
ras_xfm = np.array(
[[-1, 0, 0, 256], [0, 0, -1, 256], [0, 1, 0, 0], [0, 0, 0, 1]])
xfm = img.header.get_vox2ras_tkr() @ ras_xfm
for fs_name, bs_name in bs_map.items():
with open(f'subject.{bs_name}.dfs', 'rb') as fid:
header_type = fid.read(12).decode().split('\x00')[0]
assert header_type in ('DFS_LE v2.0', 'DFS_BE v2.0'), repr(header_type)
bo = dict(L='<', B='>')[header_type[4]]
header_size, meta_off, subj_off, n_tris, n_verts = \
np.fromfile(fid, f'{bo}i4', 5)
fid.seek(header_size + meta_off + subj_off)
tris = np.fromfile(fid, f'{bo}i4', 3 * n_tris).reshape(n_tris, 3)
rr = np.fromfile(fid, f'{bo}f4', 3 * n_verts).reshape(n_verts, 3)
rr = mne.transforms.apply_trans(xfm, rr)
mne.write_surface(f'bs_{fs_name}.surf', rr, tris, overwrite=True)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment