Put Shortly: If you want to perform source reconstruction for a region of interest, and therefore ignore some of the grid points of an evenly spaced source grid, these boundary-element models of several brain areas might be useful.

ctxIn a previous post, i described how to construct a symetric headmodel based on the ICBM152 template MRI, which some readers might consider useful for source reconstruction with e.g. Fieldtrip.

To perform a source reconstruction, one is supposed to define a source grid for the headmodel.


cfg                     = [];
cfg.grid.resolution     = 0.5;
cfg.vol                 = headmodel;
cfg.channel             = 'all';
cfg.elec                = elec;
cfg.normalize           ='yes';
leadfield               = ft_prepare_leadfield(cfg);

hold on
ft_plot_vol(headmodel, 'edgecolor', 'none')
alpha 0.4
close all

The most common approach will return an evenly spaced source grid. It is quite easy to implement. Consider, that after the source reconstruction for an even grid is concluded, and the results projected on an MRI, you want to find out about the activity within a certain region of interest (ROI). Implementation following all these stepsis cumbersome, simply because you estimate activity for sources you are actually not interested in at all. Alternativey, i sometimes am simply not interested in the activity of deep sources or some far off cortical region.

In other words, i want to conduct a source reconstruction only for selected regions of interest (ROIs).

I propose a straightforward solution. First, take an atlas included in FSL, as they are already registered to the ICMB152 template MRI. Essentially, an FSL atlas consists of a MRI matrix, and this matrix’s greyscale values indicate the specific ROI. Some are probabilistic, and the values encode the probability. Be as it may, both allow us to transform each ROI within the atlas into boundary-element meshgrid (BEM).


[atlas]             = ft_read_mri('atlas.nii');

atlas.brain         = double(atlas.anatomy==ROI);
atlas.coordsys      ='MNI';

cfg                 = [];
cfg.tissue          = {'brain'};
cfg.method          = 'isosurface';        
cfg.numvertices     = 200;
cfg.units           = 'cm';
bnd                 = ft_prepare_mesh(cfg, atlas);
bnd                 = ft_convert_units(bnd,'cm');

numv                = 200;
FV.vertices         = bnd.pnt;
FV.faces            = bnd.tri;   
passes              = false;
while ~passes,
    RFV                 = reducepatch(FV,numv);

    bnd                 = [];
    bnd.unit            = 'cm';
    bnd.tri             = RFV.faces;
    bnd.pnt             = RFV.vertices;

    cfg                 = [];
    cfg.method          = 'dipoli';  
    model               = ft_prepare_headmodel(cfg, bnd);
    model.unit          = 'cm';               
    passes              = true;
    catch err
        numv = int32(numv.*0.9);
disp('Model passed')

model.label         = label;
model.name          = name;
model.hemisphere    = 'R';
model               = rmfield(model,'cfg');

I found that the fieldtrip functions sometimes returns an error when the vertices and surfaces of a BEM conflict. It seems that in these cases reducing the number of vertices was a viable solution. This is why i implemented an automatic error detection, adaptation of the number of vertices (line 32-36)  and included the low-level reducepatch function for its speed (line 20).

FSL has quite a list of included atlases. I picked the  cortical Harvard-Oxord, the Jülich and the Oxford thalamus and striatal atlases. My reasoning behind this selection was based on our labs current needs and a specific research question i am interested in at the moment, but i hope there’s something in it for you, too.

If you want to use the BEMs for your own purpose, you are free to download them here: ROI_BEM.

After you have the BEM, you can define grid-points within this ROI. My solution was essentially a fake run of fieldtrips ft_prepare_leadfield, because this was a quick way to first determine an evenly spaced grid roster and subsequently remove all points not within the ROI. Please note that however you implement your solution, you should not use the BEM model directly for leadfield construction (with ft_prepare_leadfield), because then there is no scalp, brain and skull to calculate the proper leadfield! Take the positions of the gridpoints and feed them into the properly configurated ft_prepare_leadfield.



Robert Guggenberger

Written by Robert Guggenberger

Agricolab | Descendant of Latin 'agricola', farmer; Lab (colloquial) A laboratory

1 Comment

hassan aleem

great post! General question, what do you reccomend as the best atlas for the whole headmodel? I followed the link to the atlases but am having trouble actually getting to an atlas file. thanks!


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.