Print

Print


Dear Neva,

>  This question is rather technical and my apologies to regular users of
> FSL.
>  We would like to use the matrix generated by flirt in another program but
> need to know the image coordinate system i.e. how the x, y, and z
> directions are defined.  For example, the DICOM image coordinate system
> has x increasing from right to left, y increasing from anterior to
> posterior, and z increasing from inferior to superior.  Could you please
> describe the system you use.

The coordinates that flirt uses are not defined with respect to anatomy
but with respect to data storage block.  That is, when going through
the data block byte by byte, the coordinates are: (0,0,0) then (1,0,0)
then (2,0,0) then ... then (0,1,0) then (1,1,0) then ... (0,0,1) then
(1,0,1) then ... etc.
So, the position in the data block of a voxel coordinate (x,y,z) is
given
by (x + N_x * (y + N_y * z)) where (N_x,N_y,N_z) are the number of
voxels in the x, y and z directions.  Note that x is always in the
range 0 to (N_x - 1), and similarly for y and z.

Consequently, the orientation of the axes with respect to the anatomy
depends on the type of scanning and reslicing that's been done (e.g.
axial or coronal or sagittal acquistions)

This defines the *voxel* coordinate conventions.
However, the matrices always use mm coordinates.
These are defined as the voxel coordinates multiplied by the voxel
dimensions.

For example, if the voxel coordinate of interest was (30,20,10) and
the voxel dimensions were (4,4,6) mm then the mm coordinate would be
(120,80,60) mm.  FLIRT uses mm coordinates in all images so that the
voxel dimensions and FOV do not need to be stored in the transformation
matrix.

So, a flirt matrix represents the transformation:
        new mm coordinates =  matrix * old mm coordinates
where each coordinate is represented by as a standard homogeneous
coordinate column vector (i.e. [ x_mm y_mm z_mm 1 ]' )

I hope this is clear and answers your question - if not, let me know.

All the best,
        Mark