Differences between revisions 3 and 4
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:

Freesurfer uses at least 4 voxel coordinate systems and 4 "RAS" coordinate systems.
Line 8: Line 10:
Freesurfer uses at least 4 voxel coordinate systems and 4 "RAS" coordinate systems.
Line 24: Line 24:
}}}
Line 25: Line 26:
The functional analysis stream uses another coordinate system to map from the src volume.
Line 26: Line 28:
Functional analysis(fMRI) part uses another coordinate system to map from the src volume.

{{{
Line 39: Line 39:
}}}
Line 44: Line 44:
{{{
Line 49: Line 49:
}}}
Line 52: Line 52:
The transform 4 (surfaceRASFromConformedVoxel) is fixed as The transform 4 (surface``RAS``From``Conformed``Voxel) is fixed as
Line 54: Line 54:
{{{
Line 59: Line 59:
}}}
Line 60: Line 61:
The transform 1 (conformedVoxelFromVoxel) is calculated by (in a matrix sense) The transform 1 (conformed``Voxel``From``Voxel) is calculated by (in a matrix sense)
Line 62: Line 63:
{{{
Line 67: Line 68:
}}}
The transform 3(Surface``RAS``From``RAS) is calculated by (in a matrix sense). Note that it is independent of conformed voxel size S and the length L:
Line 68: Line 71:
The transform 3(SurfaceRASFromRAS) is calculated by (in a matrix sense). Note that it is independent of conformed voxel size S and the length L:

{{{
Line 75: Line 76:
}}}
Because of the xform3 (changing only translation part), it is easy to calculate Surface``RAS``From``Voxel (xform3*xform0) and is given by
Line 76: Line 79:
Because of the xform3 (changing only translation part), it is easy to calculate SurfaceRASFromVoxel (xform3*xform0) and is given by

{{{
Line 83: Line 84:
}}}
Line 88: Line 89:
{{{
Line 93: Line 94:
}}}
Line 95: Line 96:

}}}
Line 113: Line 112:
}}}
Line 116: Line 115:
{{{
Line 118: Line 117:
}}}
Line 121: Line 120:
{{{
Line 126: Line 125:
}}}
Line 128: Line 128:
{{{
Line 134: Line 134:
}}}
Line 136: Line 136:
{{{
Line 142: Line 142:
}}}
Line 145: Line 145:
{{{
Line 148: Line 148:
}}}
Line 151: Line 151:
}}}
Line 154: Line 153:
Each volume format stores information in each own way. COR volume (COR-001, ...) stores it in COR-.info file. Dicom stores it in the file. Each volume format stores information in each own way. COR volume (COR-001, ...) stores it in COR-.info file. Dicom stores it in the file. Note that Analyze file (.img)stores it in .mat file, meanwhile bflort (.bfloat or .bshort) stores it in .bhdr file. For these formats it is essential to have these files.
Line 156: Line 155:
Note that Analyze file (.img)stores it in .mat file, meanwhile bflort (.bfloat or .bshort) stores it in .bhdr file. For these formats it is essential to have these files.

Index

Navigation(children) TableOfContents

Coordinate systems

Freesurfer uses at least 4 voxel coordinate systems and 4 "RAS" coordinate systems.

0. Stored in volume file     
     original volume        ========>     RAS ("scanner RAS", c_(r,a,s)!=0 in general)
          |                                |
          | 1. calculated                  | identity
          |                                |
          V       2. calculated            V
   conformed volume         ========>     RAS (to have the same c_(r,a,s) as above)
      L^3 with S mm voxel                |
          |                                |
          | identity                       | 3. calculated (translation)
          |                                |
          V       4. fixed(standard)       V
   conformed volume         ========>    SurfaceRAS with c_(r,a,s) = 0
      L^3 with S mm voxel                

The functional analysis stream uses another coordinate system to map from the src volume.

     original volume        ========>    RAS ("scanner RAS", c_(r,a,s) != 0 in general)    
          |                                |
          | identity                       |  calculated
          V       5. fixed("standard")     V
     original volume        ========>   tkregRAS where c_(r,a,s) = 0 
          |                                |
          | 6. calculated                  |  mri2fmri (registration will give this)
          |                                |
          V        7. fixed("standard")    V                        
     overlay volume         ========>    fRAS where c_(r,a,s) = 0

All these coordinate systems make it a rather difficult task to trace to the original source volume voxel index from surface or functional index. If you can follow the arrows, you can get the necessary transforms easily.

The transform 2 (CORONAL coordinates) is calculated so that the following equation holds. That is, the direction cosine part is fixed, but not the translation part. In this way, the conformed volume always in the CORONAL orientation.

              [-1  0  0 s1][S 0 0 0][L/2]   [c_r]       s1 = c_r + S*L/2
              [ 0  0  1 s2][0 S 0 0][L/2] = [c_a]  ==>  s2 = c_a - S*L/2
              [ 0 -1  0 s3][0 0 S 0][L/2]   [c_s]       s3 = c_s + S*L/2
              [ 0  0  0  1][0 0 0 1][ 1 ]   [ 1 ]

where c_(r,a,s) is from the "scanner RAS". This "scanner RAS" has the physical meaning of "Right-Anterior-Superior" directions of the head.

The transform 4 (surfaceRASFromConformedVoxel) is fixed as

              [-1  0  0  S*L/2][S 0 0 0]
              [ 0  0  1 -S*L/2][0 S 0 0]
              [ 0 -1  0  S*L/2][0 0 S 0]
              [ 0  0  0    1  ][0 0 0 1]

The transform 1 (conformedVoxelFromVoxel) is calculated by (in a matrix sense)

     xform1 = inv(xform2) * xform0  = [1/S 0  0  0][-1  0   0  s1] * xform0
                                      [ 0 1/S 0  0][ 0  0  -1  s3] 
                                      [ 0  0 1/S 0][ 0  1   0 -s2]
                                      [ 0  0  0  1][ 0  0   0  1 ]   

The transform 3(SurfaceRASFromRAS) is calculated by (in a matrix sense). Note that it is independent of conformed voxel size S and the length L:

     xform3 = xform4 * inv(xform2) = [ 1 0 0  -c_r]
                                     [ 0 1 0  -c_a]
                                     [ 0 0 1  -c_s]
                                     [ 0 0 0    1 ]

Because of the xform3 (changing only translation part), it is easy to calculate SurfaceRASFromVoxel (xform3*xform0) and is given by

     SurfaceRASFromVoxel = [  3x3 part   (t1 - c_r)]
                           [  same as    (t2 - c_a)]
                           [  xform0     (t3 - c_s)]
                           [    0            1     ]

where t1,t2,t3 are the translation part of xform0.

The transform 5 and the transform 7 are calculated by the requirement

              [-1  0  0 s1][xsize  0     0    0][width/2 ]   [0]
              [ 0  0  1 s2][  0  ysize   0    0][height/2] = [0]
              [ 0 -1  0 s3][  0    0   zsize  0][depth/2 ]   [0]
              [ 0  0  0  1][  0    0     0    1][    1   ]   [1]

Here the name "RAS" lost the meaning completely. This "RAS" is just to be used for alignment purpose only. The width/height/depth are for the appropriate volume. The reason is that the original volume could be sagittal or horizontal.

Relationship between lores and hires surfaceRAS

                conformed vol ------------->     surfRAS         
                          |                         |
                          |                         |   surfRASToRAS
                          V                         V
                 high  res    ------------>        RAS
                          |                         |
                          |                         |    Xfm
                          V                         V
                 low  res     ------------>        RAS
                          |                         |
                          |                         |   RASToSurfRAS
                          V                         V
                conformed vol ------------->     surfRAS        

Therefore, the map from the high res surfaceRAS to the low res surfaceRAS is given by

     highresSurfRASTolowresSurfRAS = RASTosurfRAS(lowres) * Xfm * sufRASToRAS(highres)

which is not equal to Xfm. In fact,

       RASTosurfRAS(lowres) = 1 0 0 -c_r(lowres)        surfRASTORAS(highres) =  1 0 0  c_r(highres)
                              0 1 0 -c_a(lowres)                                 0 1 0  c_a(highres)
                              0 0 1 -c_s(lowres)                                 0 0 1  c_s(highres)
                              0 0 0     1                                        0 0 0    1

or write these as

       RASToSurfRAS(lowres) = [ 1  -C(lowres)]      surfRASToRAS(highres) = [ 1 C(highres)]
                              [ 0   1        ]                              [ 0 1         ]

       Xfm                  = [ R   T ]
                              [ 0   1 ]

Then,

       highresSurfRASTolowresSurfRAS = [ 1  -C(lowres)] x [ R   T ]  x [ 1   C(highres)]
                                       [ 0   1        ]   [ 0   1 ]    [ 0   1         ]

                                     = [ R   R*C(highres)-C(lowres) + T ]
                                       [ 0          1                   ]

The conclusion is that the transform is non-trivial. Even when R = 1 and T = 0 (no rotation), we have

      highresSurfRASTolowresSurfRAS =  [ 1  C(highres)-C(lowres)]
                                       [ 0          1           ]

Therefore, when translating highres vertex positions into lowres vertex position, we must make sure that c_(ras) for highres and lowres must match exactly.

Direction cosines

Each volume format stores information in each own way. COR volume (COR-001, ...) stores it in COR-.info file. Dicom stores it in the file. Note that Analyze file (.img)stores it in .mat file, meanwhile bflort (.bfloat or .bshort) stores it in .bhdr file. For these formats it is essential to have these files.

CoordinateSystems (last edited 2019-07-29 17:18:06 by 172)