bem_create_model
bem_create_model() - Creates a model structure combining a mesh,
conductivity information and BEM parameters.
Usage:
>> model = bem_create_model(name, mesh, cond, mod);
Inputs:
name - model name, used as a base filename for matrices
mesh - mesh structure obtained from BEM_LOAD_MESH
cond - conductivity values for mesh tissue classes
vector, starting from first tissue,
0 is reserved for air
mod - index of the modified boundary, for use with IPA.
If mod <= 0, IPA is not used.
Outputs:
model - model structure with the following fields.
Model Structure:
name - name of the model
mesh - mesh structure
cond - conductivity vector
mod - modified boundary information
node_cond - Average conductivity around a node
Optional Fields:
ind_mod - node indices of the modified boundary
ind_imesh - node indices of the inner mesh
ind_imesh_mod - node indices of the modified boundary
relative to the inner mesh
bem_create_session
bem_create_session() - Creates a session structure combining a model,
and sensor data. The session structure contains a model for a
complete head and electrode ’recording session’. Data recorded
using the same set of sensor locations is considered
to be in the same session.
Usage:
>> session = bem_create_session(name, model, Smatrix);
Inputs:
name - session name, used as a base filename for matrices
model - model structure obtained from bem_create_model().
Smatrix - matrix that defines EEG electrodes in terms of
the BEM mesh. Each electrode is a weighted sum of the nodes
of the element. The weights are determined by the element
shape functions. The format of the Smatrix is as follows:
[electrode_index node_index weight]
The rows of the matrix must be sorted by electrode_index
and there can be more than one row with a given electrode
index. The Smatrix can be constructed using one of these:
bem_smatrix_from_nodes() and bem_smatrix_from_points().
Outputs:
session - session structure with the fields defined in the next section
Session Structure:
name - name of the session
model - model structure
Smatrix - EEG sensor information matrix.
num_electrodes - number of EEG sensors
bem_generate_eeg_matrices
bem_generate_eeg_matrices() - Generates BEM matrices for a BEM model.
Usage:
>> bem_generate_eeg_matrices(model);
Inputs:
model - model structure generated by BEM_CREATE_MODEL
Notes: The matrices are created using the name given in the model structure
The following matrices are created on disk, and can be read
using the bem_load_model_matrix() function
<model.name>.cmt - BEM coefficient matrix
<model.name>.dmt - band of Coefficient matrix used by IPA
<model.name>.imt - inner Coefficient Matrix used by IPA
bem_generate_eeg_transfer_matrix
--------------------------------
bem_generate_eeg_transfer_matrix() - Generates EEG transfer matrix.
Usage:
>> session = bem_generate_eeg_transfer_matrix(session);
Inputs:
session - session structure generated by BEM_CREATE_SESSION
Outputs:
session - session object; since it may be modified when
loading model matrices.
Notes: The matrix is created using the name given in the session structure
with "tmte" extension for the EEG transfer matrix. It can be loaded
using the bem_load_transfer_matrix().
nft_get_config
nft_get_config() - Returns the toolbox configuration information
program path names, defaults, etc. Other toolbox functions call this m-file
to read their configuration.
Outputs:
conf - config structure.
Config Structures:
bem_matrix_program - name of the program that creates EEG matrices.
asc - name of adaptive skeleton climbing program.
qslim - name of the coarsening program.
showmesh - name of the correction and smoothing program.
bem_load_mesh
bem_load_mesh() - Loads a BEM mesh.
Usage:
>> mesh = bem_load_mesh(name);
Inputs:
name - mesh name excluding the extension.
Outputs:
mesh - mesh structure.
Mesh Structure:
name - mesh name
coord - node coordinates
elem - elements (connectivity information)
num_nodes - number of nodes
num_elements - number of elements
num_boundaries - number of boundaries
num_node_elem - number of nodes per element
num_class - number of tissue classes
bnd - boundary information array
[num_elements inner_tissue_class outer_tissue_class]
bem_load_model_matrix
bem_load_model_matrix() - Loads the BEM matrix with extension ’ext’.
The matrix file name is defined by <model.name>.<ext>
Matrix is placed into the model with a field name ’ext’
Usage:
>> model = bem_load_model_matrix(model, ext);
Inputs:
model - model structure generated by bem_create_model().
ext - describes the matrix type. The following types are defined:
’cmt’ - BEM Coefficient matrix
’dmt’ - band of Coefficient matrix used by IPA
’imt’ - inner Coefficient Matrix used by IPA
’iinv’ - inverse of the inner coefficient matrix. This matrix is
computed from ’imt’ if the file does not exist.
Outputs:
model - model structure.
bem_load_transfer_matrix
bem_load_transfer_matrix() Loads the BEM transfer matrix with extension ’ext’.
The matrix file name is defined by <session.name>.<ext>.
Matrix is placed into the session with a field name ’ext’.
Usage:
>> session = bem_load_transfer_matrix(session, ext);
Inputs:
session - session structure generated by bem_create_session().
ext - describes the matrix type. The following type is defined
’tmte’ - BEM Transfer matrix.
Outputs:
session - updated session structure.
bem_smatrix_from_nodes
bem_smatrix_from_nodes() - Generates Smatrix from nodes of a mesh.
Smatrix is the sensor information matrix used in
bem_create_session(). See bem_create_session() for more information.
Usage:
>> Smatrix = bem_smatrix_from_nodes(mesh, nodes);
Inputs:
mesh - mesh structure
nodes - vector of node indices.
Outputs:
Smatrix - defines one electrode per node.
bem_solve_dipoles_eeg
bem_solve_dipoles_eeg() - Computes the potential arising from the given dipoles
at the sensor locations defined by the session.
Usage:
>> [pot, session] = bem_solve_dipoles_eeg(session, dipoles);
Inputs:
session - session structure defining the model and the sensors.
dipoles - dipole matrix. Each row defines a dipole as follows:
[x y z px py pz]
Outputs:
pot - potentials at the sensors due to simultaneous activation of
the dipoles.
session - the updated session structure, in case any matrices are
loaded, modifying the underlying model.
bem_solve_lfm_eeg
bem_solve_lfm_eeg() - Computes the LFM arising from given dipoles
at the sensor locations defined by the session.
Usage:
>> [pot, session] = bem_solve_lfm_eeg(session, dipoles);
Inputs:
session - session structure defining the model and the sensors
dipoles - dipole matrix. Each row defines a dipole as follows:
[x y z px py pz]
Outputs:
pot - the LFM at the sensors produced by activation of each dipole,
session - updated session structure in case any matrices are
loaded, modifying the underlying model.
Coregistration
Coregistration() - Produces the GUI for co-registration of electrode locations
to the scalp mesh.
Usage:
>> Coregistration(varargin);
Optional Arguments:
’subjectdir’ - (string) Output folder. The results will be saved
in this folder.
’subject’ - (string) Subject name. The subject-specific output files will start
with this name.
’session’ - (string) Session name. The file name for registered electrodes will
start with this name.
Forward_Problem_Solution
Forward_Problem_Solution() - Produces the forward model generation GUI.
Usage:
>> Forward_Problem_Solution(varargin);
Optional Arguments:
’subjectdir’ - (string) Output folder. The results will be saved in this folder.
’subject’ - (string) Subject name. Subject-specific output files will be saved
starting with this name.
’session’ - (string) Session name. Session-specific output files will be saved
starting with this name.
Mesh_generation
Mesh_generation() - Produces the mesh generation GUI.
Usage:
>> Mesh_generation(varargin);
Optional Arguments:
’subjectdir’ - (string) Output folder. The results will be saved
in this folder.
’subject’ - (string) Subject name. Output files will start with this name.
mesh_local_refinement
mesh_local_refinement() - Refines the meshes in a given folder. Loads
Scalp.smf, Skull.smf, Csf.smf, Brain.smf meshes in .smf format and saves
them with the same names.
Usage:
>> mesh_local_refinement(of, nl, ratio_lmr);
Inputs:
of - mesh folder
nl - number of layers (3 or 4)
ratio_lmr - ratio of local edge length to local distance between meshes
mesh_final_correction
mesh_final_correction() - Performs mesh correction for Scalp.smf,
Skull.smf, Csf.smf, Brain.smf in a given folder. Saves the meshes with
the same names in .smf format.
Usage:
>> mesh_final_correction(of, nl);
Inputs:
of - mesh folder
nl - number of layers (3 or 4)
mesh_read_write
mesh_read_write() - Reads Scalp, Skull, Csf and Brain meshes in .smf
format in a given folder and writes the total head mesh bec, bee, bei
format.
Usage:
>> mesh_read_write(of, mesh_name, nl);
Inputs:
of - mesh folder
mesh_name - name of the mesh that will be saved in bec, bee, bei format
nl - number of layers (3 or 4)
Segmentation
Segmentation() - Produces the GUI for running segmentation functions.
Usage:
>> Segmentation(varargin);
Optional Arguments:
’subjectdir’ - (string) Output folder. The results will be saved
in this folder.
’subject’ - (string) Subject name. The output files will start with this name.
segm_aniso_filtering
segm_aniso_filtering() - Performs anisotropic filtering.
Usage:
>> [b] = segm_aniso_filtering(out, iter, ts, cond);
Inputs:
out - input image
iter - number of iterations
ts - sampling rate
cond - diffusion parameter
Outputs:
b - output image
segm_scalp
segm_scalp() - Performs scalp segmentation
Usage:
>> [Sca] = segm_scalp(b);
Inputs:
b - input image (filtered MR image)
Outputs:
Sca - scalp mask
segm_brain ———-
segm_brain() - Performs brain segmentation
Usage:
>> [Bra] = segm_brain(b,Sca, sli, WMp,sl, st);
Inputs:
b - input image (filtered MR image)
sli - lowest point for cerebellum
WMp - white matter point
sl,st - fill level and threshold for watershed segmentation
Outputs:
Bra - brain mask
segm_outer_skull —————-
segm_brain() - Performs outer skull segmentation
Usage:
>> [Sk_out, X_dark] = segm_outer_skull(b, Sca, Bra, sli_eyes);
Inputs:
b - input image (filtered MR image)
Sca - scalp mask
Bra - brain mask
sli_eyes - slice of the eyes
Outputs:
Sk_out - outer skull mask
X_dark - dark regions of b
segm_inner_skull —————-
segm_inner_skull() - Performs inner skull segmentation
Usage:
>> Sk_in = segm_inner_skull(b, Sk_out, X_dark, Bra);
Inputs:
b - imput image (filtered MR image)
Sk_out - outer skull mask
X_dark - dark regions of b
Bra - Brain mask
Outputs:
Sk_in - inner skull mask
segm_final_skull —————-
segm_final_skull() - Corrects scalp and outer skull masks wrt inner
skull mask
Usage:
>> [Sca, Sk_out] = segm_final_skull(Sca, Sk_out, Sk_in, WMp);
Inputs:
Sca - scalp mask
Sk_out - outer skull mask
Sk_in - inner skull mask
WMp - white matter point
Outputs:
Sca - scalp mask
Sk_out - outer skull mask
utilbem_compute_cond ——————–
utilbem_compute_cond() - Computes the average conductivity
around a node to be used in BEM computations.
Usage:
>> cond = utilbem_compute_cond(Coord, Elem, layers, sigma)
Inputs:
Coord - node coordinate matrix
Elem - element connectivity matrix
layers - mesh boundary information
sigma - vector of element conductivities
Outputs:
cond - average conductivity for each node (vector)
Note: The average conductivity is normally the average of the inner and outer
conductivities of the layer that a node belongs to. However, for
meshes with intersecting boundaries there may be three or more tissues
around a node. This function also handles this general case.
utilbem_compute_indices ———————–
utilbem_compute_indices() - When the Isolated Problem Approach (IPA) is used,
the BEM equations are modified to reduce the numerical errors due to
the low conductivity skull layer. For this purpose an "inner mesh"
is defined consisting of skull and the inner layers. This function
computes the node indices corresponding to these layers to be used
in BEM computations.
Usage:
>> [indMsh, indMod, indMshMod] = utilbem_compute_indices(Coord, Elem, layers, mod);
Inputs:
Coord - node coordinate matrix
Elem - element connectivity matrix
layers - mesh boundary information
mod - index of the boundary modified for IPA.
Outputs:
indMsh - coordinate indices of inner mesh nodes (vector).
indMod - coordinate indices of modified boundary nodes (vector).
indMshMod - Coordinate indices of modified boundary relative to inner
mesh.
utilbem_multilayer_rhs ———————-
utilbem_multilayer_rhs() - Computes the Right-Hand-Side of the
BEM matrix equation when IPA (Isolated Problem Approach) is
used. The RHS vector corrected by IPA reduces numerical errors
in computation due to the low conductivity skull layer.
Usage:
>> RHS = utilbem_multilayer_rhs(Coord, cond, indMod, indMsh, indMshMod,
iinv, dmt, s2, s3, dip);
Inputs:
Coord - node coordinate matrix
cond - average conductivity for each node (vector)
as computed by utilbem_compute_cond()
indMod - coordinate indices of modified boundary nodes (vector).
indMsh - coordinate indices of inner mesh nodes (vector).
indMshMod - coordinate indices of modified boundary relative to inner mesh.
The indices are computed by utilbem_compute_indices()
iinv - inverse inner matrix.
dmt - sub coefficient matrix (# of nodes) x (# of mod. boundary nodes).
s2 - outer conductivity of the modified layer.
s3 - inner conductivity of the modified layer
dip - dipole parameters [x y z px py pz]
Outputs:
RHS - The right-hand-side of the BEM matrix equation for a given
dipole.
utilbem_pot_unbound ——————-
utilbem_pot_unbound() - Computes the unbounded potential at the
given coordinates due to a single dipole. The result is
weighted by the average conductivity around the node.
Usage:
>> pot = utilbem_pot_unbound(Coord, cond, dip)
Inputs:
Coord - node coordinate matrix
cond - average conductivity for each node (vector)
as computed by utilbem_compute_cond()
dip - dipole [x y z px py pz]
Outputs:
pot - node potentials for the homogeneous model
Notes: When IPA is not used the weighted potential
is the Right-Hand-Side of the BEM matrix equation.
Warping_mesh ————
Warping_mesh() - Produces the GUI for warping of a template head model
to measured electrode locations.
Usage:
>> Warping_mesh(varargin);
Optional Arguments:
’subjectdir’ - (string) Output folder. The results will be saved
in this folder.
’subject’ - (string) Subject name. Subject-specific output files will be saved
starting with this name.
’session’ - (string) Session name. Session-specific output files will be saved
starting with this name.
warping_main_function ———————
warping_main_function() - Main warping function.
Usage:
>> [Ptm, ind, Cscalp_w,Cskull_w,CCSF_w,W,A,e,LMm2] =
warping_main_function(Cscalp, Escalp, Cskull, CCSF,LMm, Fm, Fd, pos);
Inputs:
Cscalp, Escalp - scalp mesh
Cskull - coordinates of skull mesh
CCSF - coordinates of CSF mesh
LMm - landmarks on the template mesh
Fm - fiducials of the template mesh
Fd - fiducials from the digitizer data
pos - electrode locations
Outputs:
Ptm - electrode locations on the mesh
ind - index of the electrodes on the mesh
Cscalp_w - warped scalp mesh coordinates
Cskull_w - warped skull mesh coordinates
CCSF_w - warped CSF mesh coordinates
W, A, e - warping transform parameters
LMm2 - warped landmarks