[vtkusers] Conversion from ITK to VTK Coordinate spaces

David Gobbi david.gobbi at gmail.com
Tue May 9 13:06:40 EDT 2017

Hi Sam,

The question that you are asking does not have a straightforward answer,
because VTK doesn't actually define its coordinate space... in VTK you can
use whatever coordinate you want.

Since I work with DICOM images, I define my VTK world coordinate system to
be the DICOM patient coordinate system (that is, I follow the convention
that the +x direction is towards the left hand, the +z direction is towards
the head, and +y is towards the back).  This simplifies moving data between
ITK and VTK, because ITK uses the same coordinate system.

However, this means that whenever I read images into VTK, I must put the
images into this coordinate system.  So, for example, I wrote a class
called vtkDICOMToRAS (
https://github.com/dgobbi/vtk-dicom/blob/master/Source/vtkDICOMToRAS.h) to
convert images that are read by the vtkNIFTIImageReader from their native
coordinate system to the DICOM coordinate system.

Most of the VTK image readers assume that the user wants a RAS-like
coordinate system, but as I said, you are free to use whatever coordinate
system you desire inside VTK.  A lot of people prefer RAS because it means
they don't have to convert coordinate systems whenever they read an image.
I prefer using a DICOM coordinate system because I work a lot with DICOM
images, and it improves interoperability with ITK.

To kind-of sort-of answer your question, the general transformation between
an ITK (DICOM-like) coord system and a RAS coordinate system is as follows:

  -1  0  0  0
   0 -1  0  0
   0  0  1  0
   0  0  0  1

However, it's rarely that straightforward, because it really depends on how
the data was read into VTK.

 - David

On Tue, May 9, 2017 at 9:46 AM, <sganesan at cusa.canon.com> wrote:

> Hello
> I'm trying to write a function that can reasonably convert between ITK and
> VTK coordinate spaces. I have a given ITK transform with my 12 parameters,
> (3 fixed).
>        a        b      c    x
>        d      e       f     y
>        g      h        i     z
>         l      m       n    1
> where (a,b,c,d,e,f,g,h,i) represent my ITK matrix, (x,y,z) is my center,
> and (l,m,n) is my translation.
> How do I convert that to VTK format
>        a        b      c    o
>        d      e       f     p
>        g      h        i     q
>         0      0       0    1
> where (a,b,c,d,e,f,g,h,i) represent my VTK matrix,, and (o,p,q) is my
> translation.
> Is there a relatively straightforward way of doing this?
> Kind Regards,
> Sam
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20170509/da78d0f1/attachment.html>

More information about the vtkusers mailing list