[Insight-developers] itkAnalyze Valid Orientations and 3D - 2D conversions

Luis Ibanez luis.ibanez at kitware.com
Thu Apr 2 13:07:17 EDT 2009



There are a couple of new bugs in the MANTIS bug tracker


       http://www.vtk.org/Bug/view.php?id=8832
       http://www.vtk.org/Bug/view.php?id=8650


Related to Orientation (Direction) issues when reading and
writing Analyze 3D and 2D images.


      As usual,
      this is the consequence of lack of testing...  :-/


Therefore, before making any further changes, we are putting
together a full set of orientation tests, that we expect the
Analyze reader should be able to pass.


You can find this test under:

           Insight/Testing/Code/IO/
               itkAnalyzeImageIODirectionsTest.cxx

It currently generates 3D images with each one of the three
supported orientations, and save them and read them back.


Now we are starting to add the interactions with 2D reading.


Let's start with some definitions.

Analyze supports only three image orientations:

Axial (RPI)
Direction =
   1   0   0
   0  -1   0
   0   0   1

Sagittal (PIR)
Direction =
   0   0   1
  -1   0   0
   0   1   0

Coronal (RIP)
Direction =
   1   0   0
   0   0  -1
   0   1   0


The matrices presented here were printed out directly
from image->GetDirection(). They must be read as columns.

That is, the first column is the (x,y,z) components of
the vector indicating the direction along which the pixel
index changes the fastest.

Given that ITK uses the DICOM default orientation, which
is LPS. An Identity matrix in the Direction type would
correspond to... LPS.

In the Analyze description, however the axis are labeled
from the origin of the orientation vector, instead of its
destination. Therefore, what we call LPS, becomes RAI.

In the matrices above, then:

The column
1
0
0
stands for "R" (Analyze Right) ( the "L" of LPS in DICOM)

The Column
  0
  0
  1
stands for "I" (Analyze Inferior) (the "S" of LPS in DICOM)

The Column
  0
-1
  0
stands for "P" (Analyze Posterior) (the -"P" of LPS in DICOM).


The current test is working fine when writing a 3D image
and reading it back as a 3D image, for each one of these
three orientations.


---------


When starting to test the 3D and 2D combinations, the following
questions arise:


1) When instantiating a 2D image (that we plan to write out).

    What are the orientations that
    Analyze is supposed to support ?


2) When reading a 3D image in any of the orientations listed
    above (RPI, RIP, PIR), we are assuming that the resulting
    2D image will simply have an 2D orientation matrix with
    an identity matrix. Given that there is no way to represent
    its original 3D orientation by using a 2D matrix.



   Thanks for any suggestions,


      Luis




More information about the Insight-developers mailing list