title | redirect_from | |
---|---|---|
Fitting a template MRI to the MEG Polhemus head shape |
|
This example script demonstrates how to fit a sphere to the MEG Polhemus recorded head shape, how to fit a sphere to a template MRI, and subsequently use the two fitted spheres to scale the template MRI such that it fits the MEG Polhemus head shape. This example has been written with a Elekta-system fif-file in mind. Accordingly, the variable 'dataset', specified below should point to a fif-file that includes a Polhemus-based headshape description.
load standard_mri % Colin 27 template in fieldtrip
% read MEG sensor location
MEG_sens = ft_read_sens(dataset, 'senstype', 'meg');
MEG_sens = ft_convert_units(MEG_sens, 'mm');
% read polhemus headshape
headshape = ft_read_headshape(dataset);
headshape = ft_convert_units(headshape, 'mm');
save headshape headshape
save MEG_sens MEG_sens
% realign to neuromag coordinate system
lpa = [ 7 104 26];
nas = [ 92 210 32];
rpa = [176 104 26];
zpoint = [ 92 106 139];
cfg = [];
cfg.method = 'fiducial';
cfg.fiducial.nas = nas;
cfg.fiducial.lpa = lpa;
cfg.fiducial.rpa = rpa;
cfg.fiducial.zpoint = zpoint;
cfg.coordsys = 'neuromag';
mri_realigned_fiducial = ft_volumerealign(cfg,mri);
cfg = [];
cfg.output = {'brain','skull','scalp'};
segmentedmri = ft_volumesegment(cfg, mri);
T_neuromag = mri_realigned_fiducial.transform;
segmentedmri.transform = T_neuromag;
segmentedmri.coordsys = 'neuromag';
cfg = [];
cfg.tissue = {'brain'};
cfg.numvertices = 3600;
brain = ft_prepare_mesh(cfg, segmentedmri);
cfg = [];
cfg.tissue = {'scalp'};
cfg.numvertices = [3600];
bnd = ft_prepare_mesh(cfg, segmentedmri);
% remove the lower part of the head
cfg = [];
cfg.translate = [0 0 -140];
cfg.scale = [300 300 300];
cfg.selection = 'outside';
bnd_deface = ft_defacemesh(cfg,bnd);
% remove digitized head points on the nose
cfg = [];
cfg.translate = [0 90 -50];
cfg.scale = [400 400 100];
cfg.selection = 'outside';
headshape_denosed = ft_defacemesh(cfg, headshape);
figure
ft_plot_headshape(headshape);
hold on
ft_plot_mesh(bnd_deface, 'edgecolor', 'none', 'facecolor', 'skin', 'facealpha',0.9)
ft_plot_mesh(brain, 'edgecolor', 'none', 'facecolor', [1 0 1]/1.2, 'facealpha', 0.5)
ft_plot_axes(headshape_denosed)
camlight left
camlight right
material dull
alpha 0.8
lighting phong
% fit a sphere to the MRI template
cfg=[];
cfg.method='singlesphere';
scalp_sphere = ft_prepare_headmodel(cfg, bnd_deface);
%fit a sphere to the polhemus headshape
cfg=[];
cfg.method = 'singlesphere';
headshape_sphere = ft_prepare_headmodel(cfg, headshape_denosed);
% scale the template MRI
scale = headshape_sphere.r/scalp_sphere.r;
T2 = [1 0 0 scalp_sphere.o(1);
0 1 0 scalp_sphere.o(2);
0 0 1 scalp_sphere.o(3);
0 0 0 1 ];
T1 = [1 0 0 -scalp_sphere.o(1);
0 1 0 -scalp_sphere.o(2);
0 0 1 -scalp_sphere.o(3);
0 0 0 1 ];
S = [scale 0 0 0;
0 scale 0 0;
0 0 scale 0;
0 0 0 1 ];
TRANSFORM = T1*S*T2;
segmentedmri.transform = TRANSFORM*T_neuromag;
cfg = [];
cfg.tissue = {'scalp'};
cfg.numvertices = 3600;
scalp_scaled = ft_prepare_mesh(cfg, segmentedmri);
cfg = [];
cfg.tissue = {'brain'};
cfg.numvertices = 3600;
brain_scaled = ft_prepare_mesh(cfg, segmentedmri);
figure
%ft_plot_sens(MEG_sens, 'style', '*b');
ft_plot_headshape(headshape_denosed);
hold on
ft_plot_mesh(scalp_scaled, 'edgecolor', 'none', 'facecolor', [1 1 1]/1.2, 'facealpha', 0.5)
ft_plot_mesh(brain_scaled, 'edgecolor', 'none', 'facecolor', [1 0 1]/1.2, 'facealpha', 0.5)
ft_plot_axes(headshape_denosed)
camlight left
camlight right
material dull
alpha 0.8
lighting phong