fiducials: head -> MRI ccordinates ?

Markus Bauer m.bauer at UCL.AC.UK
Tue Apr 27 15:36:39 CEST 2010

Hi Vladimir

thanks a lot for your elaborated and detailed response...

to quickly summarize and check that I have understood you correctly:

forward.datareg.fid_mri.fid.pnt -

"sensor coordinate" based positions of the fiducials.
'sensor based' meaning here that they are in the same coordinate system
as the D.sensors (or in fieldtrip the 'grad' definition) - but does not
(necessarily) mean that they are "locked" to the actual sensor
positions. those can vary between datasets (esp for MEG)

D.inv{...}.mesh.Affine -

is the transformation matrix between the coordinate system inherent to
the individual MRI (i.e usually the analyze file *.hdr/*.img) and the MNI

the transformation matrix (in the code represented by 'M1') that rotates
the 'sensor-based' (in the case of CTF: head-based) coordinate system
onto the native individual's MRI (as in the analyze file) - is not
directly stored but can be obtained by:

inv(D.inv{val}.mesh.Affine) * D.inv{val}.datareg(ind).toMNI

Thanks a lot again. I guess that should be correct and seems quite clear.

> Hi Markus,
> On Mon, Apr 26, 2010 at 5:51 PM, Markus Bauer<m.bauer at>  wrote:
>> Are the fiducial positions after manual coregistration (using
>> spm_eeg_inv_datareg_ui) stored anywhere in MRI-coordinates?
>> I looked into the code and from what I see there, the manually entered
>> fiducials (by clicking in the interactive window) are stored in the
>> following field:
>> forward.datareg.fid_mri.fid.pnt
>> But that seems to be in (CTF ?) headcoordinates.
>> I also found
>> forward.mesh.fid.fid.pnt
>> which seem to be the standard (MNI based) fiducial positions.
>> I also found
>> forward.datareg.fid_eeg.fid.pnt
>> which could be the fiducials measured by the system, but I neither found the
>> fiducials in MRI coordinates nor the transformation matrix to go from MRI to
>> headcoordinates.
>> Do you know where that is?
> I'll try to give a detailed answer this time to explain the logic
> behind the code. SPM needs to take into account 4 coordinate systems
> that might or might not be different.
> 1) The coordinate system in which sensor locations were provided.
> That's what you get from D.sensors and D.fiducials.
> 2) MNI coordinates corresponding to the template brain .
> 3) Native coordinates corresponding to the subject's structural. They
> might be the same as MNI coordinates of the structural was
> coregistered to the template, but might also be different.
> 4) The coordinate system in which MRI and sensors are coregistered. In
> the case of EEG these are 'native coordinates' (3) and in the case of
> MEG these are sensor coordinates (1). Usually for MEG these are so
> called head coordinates, but they are defined in different way for
> different MEG systems.
> The reason for the difference between EEG and MEG is that for EEG the
> coordinate system where sensor locations are measured is usually not
> very meaningful so it is convenient to express everything in
> MRI-linked coordinates. In MEG, however, it is convenient to use head
> coordinates because then the same coregistration can be used for
> different runs  (the location of the head in head coordinates is fixed
> and only the sensor locations change).
> Now, the canonical meshes that can be found in the .gii files under
> spm/canonical are in MNI coordinates. There is also a set of standard
> fiducials defined in MNI coordinates on the template brain. When you
> use individual structural, nonlinear transformation is computed from
> the template image to your individual image. The meshes and the
> standard fiducials are then warped to correspond to the individual
> image. These new meshes are stored in gii files in the directory where
> that structural is. The names of these files appear in
> D.inv{...}.mesh. There is also a copy of the unwarped canonical mesh
> stored there (mesh.tess_mni). This is useful for producing output when
> you move your datasets with inversions somewhere where the links to
> individual meshes no longer work. Under D.inv{...}.mesh.fid you can
> find the standard fiducials transformed to the 'native' coordinates.
> If you use the template rather than individual image, these fiducials
> will be in MNI coordinates. Under D.inv{...}.mesh.Affine you can find
> a transformation matrix from native to MNI coordinates. Note that this
> is just approximation to the nonlinear transform that is actually
> applied to the meshes.
> Now, when you do coregistration you define some corresponding points
> in the native coordinates to at least 3 fiducials from those available
> in sensor coordinates. These are used to compute the transformation
> matrix between sensor and native coordinates (called M1 in the code of
> spm_eeg_inv_datareg_ui). In the MEG case everything is then stored in
> sensor coordinates, including the MRI fiducials. The function also
> computes transformation matrices between the coregistration
> coordinates (head coordinates) and MNI coordinates, since these are
> the most useful to know in practice. If you look at lines 174-175 in
> the latest version, you'll see:
> D.inv{val}.datareg(ind).toMNI = D.inv{val}.mesh.Affine*M1;
> D.inv{val}.datareg(ind).fromMNI = inv(D.inv{val}.datareg(ind).toMNI);
> Now I can finally answer your question. You have MRI fiducials in head
> coordinates stored under D.inv{...}.datareg.fid_mri . You can use the
> function forwinv_transform_headshape (in the latest in-house SPM it's
> called ft_transform_headshape) to transform these fiducials to another
> coordinate system. All you need to provide is a 4x4 transformation
> matrix. All you need for that is also provided. To go from head to MNI
> coordinates you can use D.inv{...}.datareg.toMNI . To go to native
> coordinates you can use
> inv(D.inv{...}.mesh.Affine)*D.inv{...}.datareg.toMNI. So let's say
> that you have a unimodal MEG dataset with a single inversion and want
> to get MRI fiducials in MNI coordinates. Then you do:
> mnifid = ft_transform_headshape(D.inv{1}.datareg.toMNI,
> D.inv{1}.datareg.fid_mri );
> I hope that was clear. If not, keep asking.
> Best,
> Vladimir

The aim of this list is to facilitate the discussion between users of the FieldTrip  toolbox, to share experiences and to discuss new ideas for MEG and EEG analysis. See also and

More information about the fieldtrip mailing list