Print

Print


Hi,

It sounds like you just need a method of converting SPM coordinate
information to FSL coordinate information.  Once you have the
conversion it should just be a matter of keeping the FSL equivalent
of the SPM .mat file.  You can then combine this with any other
FSL/FLIRT registration transformations you might do.

I don't know a whole lot about SPM formats, but I did look at it a
couple of years ago in order to convert coordinates/transforms.
I've included information on both the FSL conventions and my
understanding of the SPM conventions, complete with a formula
for converting between the two.  Hopefully this is correct,
although I can't guarantee it.

Here's the information:

FSL Conventions
---------------
Coordinates:

Voxel indexing is from 0 to N-1 in each dimension.

Voxel coordinates related to data storage such that x is indexed first
then y, then z.  That is, the first byte represents voxel (0,0,0),
the second byte represents voxel (1,0,0), etc.

Origin of all world coordinate systems correspond to voxel (0,0,0).
This means that the point (0,0,0)mm is at the outer corner of
the (0,0,0) voxel.


Transformations:

All FLIRT transformations are from the source to the destination with
both in world coordinates.  The coordinates are homogeneous coordinates
(x,y,z,1) and so the matrices are 4x4 which includes translation as the
fourth column.  Furthermore, the transformation specifies a
physical transformation of space and no information about the
destination voxel dimensions or Field Of View (FOV) is included.
Consequently, this transformation can be used easily with differently
scaled versions (i.e. different voxel dimensions) of a given image.

To convert to a voxel to voxel coordinate transformation the matrix
must be pre-multiplied by inv(Ddest) and post-multiplied by Dsource
where D represents a matrix which scales and shifts the coordinates
appropriately.  For example, if the voxel dimensions were 4x4x6mm
and the origin was the bottom left corner, then
D = [
4  0  0  0
0  4  0  0
0  0  6  0
0  0  0  1
]

File Format:

The file format used to save the transformation is a simple 4x4
ascii matrix, with 4 space separated values per line.


SPM Conventions (as I remember them)
------------------------------------
Coordinates:

Voxel indexing is from 1 to N in each dimension.
Therefore it is necessary to subtract 1 from each SPM voxel
coordinate in order to obtain standard FSL coordinates.

Coordinates relate to the data in the same way as for FSL.
Origin of the world coordinate system is the Centre of Volume (I think).

Transformations:

The transformations used by SPM are from the source to the destination
with the source using voxel coordinates and the destination
using world coordinates.  Conversion to a world-world FSL transformation
matrix is given by:

Afsl = Ddest * VS * inv(SCdest) * inv(Ddest) * Aspm  * inv(VS) *
inv(Dsource)

where VS is the voxel shift matrix (to convert 1 to N into 0 to N-1
conventions).  That is:

VS = [
1  0  0  -1
0  1  0  -1
0  0  1  -1
0  0  0   1
]

In addition, SC is a shift to take into account the Centre of Volume
origin
of the SPM coordinate system.  That is:

SC = [
1  0  0  -(N_x + 1)/2
0  1  0  -(N_y + 1)/2
0  0  1  -(N_z + 1)/2
0  0  0   1
]


With any luck, this will give you what you want.

Cheers,
        Mark



Souheil Inati wrote:
>
> Hello all,
>
> I have just downloaded FSL and have started playing around with it.  Looks
> great!
>
> I have written a converter from GE format to spm format, not quite AVW
> because I'm using the spm functions to create the images, headers and mat
> files.  I'd like to use the information in the .mat files because it relates
> voxel coordinate in the image to location in the scanner coordinate system.
>
> ie I can acquire a small field of view oblique scan over visual cortex and
> it will be very well registered to a full head anatomical scan from the same
> session.  It will be in register as far as the scanner is concerned, ie
> distortions and subject movement are obviously not taken into account.
>
> How can I use this information in FSL?  Any suggestions would be greatly
> appreciated.
>
> Thanks,
> Souheil