[vtk-developers] vtkNIFTIImageReader coordinates

padraig padraig.looney at gmail.com
Sat Nov 12 09:42:51 EST 2016


Hi David,


vtkNIFTIImageHeader (0x3346680)
   Debug: Off
   Modified Time: 85
   Reference Count: 1
   Registered Events: (none)
   DimInfo: 0x0
   Dim: 3 224 153 52 1 1 1 1
   PixDim: -1 0.9195 1.40018 2.89048 0 0 0 0
   VoxOffset:352
   IntentP1: 0
   IntentP2: 0
   IntentP3: 0
   IntentCode: 0
   DataType: 2
   BitPix: 8
   SliceStart: 0
   SclSlope: 1
   SclInter: 0
   SliceEnd: 0
   SliceCode: 0
   XYZTUnits: 0x2
   CalMax: 0
   CalMin: 0
   SliceDuration: 0
   TOffset: 0
   Descrip: ""
   AuxFile: ""
   QFormCode: 2
   SFormCode: 1
   QuaternB: 0
   QuaternC: 0
   QuaternD: 1
   QOffsetX: 102.536
   QOffsetY: 106.413
   QOffsetZ: 30.1491
   SRowX: -0.9195 0 -0 102.536
   SRowY: 0 -1.40018 -0 106.413
   SRowZ: 0 0 -2.89048 30.1491
   IntentName: ""
   Magic: "n+1"

The direction in ITK is


1 0 0
0 1 0
0 0 -1

I don't know how to see the direction in nibabel


On 12/11/16 14:10, David Gobbi wrote:
> Hi Padraig,
>
> Can you show us the raw qform and sform fields from the NIFTI header 
> itself? In VTK, you can do this as follows:
>
> >>> print(reader.GetNIFTIHeader())
>
> The difference you see between nibabel, ITK, and VTK has to do with 
> differences in the way these packages deal with the pixdim and the 
> qfac of the nifti file.  If you print the Direction from the ITK image 
> you might find that it differs from nibabel, too.
>
> For VTK, you can read all the gory details here:
>
> http://gitlab.kitware.com/vtk/vtk/blob/v7.0.0/IO/Image/vtkNIFTIImageReader.cxx#L738
>
>  - David
>
>
> On Sat, Nov 12, 2016 at 6:10 AM, padraig <padraig.looney at gmail.com 
> <mailto:padraig.looney at gmail.com>> wrote:
>
>     I have noticed some inconsistencies in how NIFTI images are
>     handled in VTK, ITK, and NiBabel. ITK and NiBabel are in agreement
>     with each other and differ with VTK on the position of the volume.
>     The VTK output for a file is below.
>
>     vtkNIFTIImageReader (0x1de67d0)
>       Debug: Off
>       Modified Time: 91
>       Reference Count: 2
>       Registered Events: (none)
>       Executive: 0x1de7720
>       ErrorCode: Success
>       Information: 0x1de6ad0
>       AbortExecute: Off
>       Progress: 1
>       Progress Text: (None)
>       FileName: /home/padraig/Desktop/59674/Seeding/I0000003_59674_sn.nii
>       FileNames: 0
>       FilePrefix: (none)
>       FilePattern: %s.%d
>       FileNameSliceOffset: 0
>       FileNameSliceSpacing: 1
>       DataScalarType: unsigned char
>       NumberOfScalarComponents: 1
>       File Dimensionality: 3
>       File Lower Left: On
>       Swap Bytes: Off
>       DataIncrements: (1, 1)
>       DataExtent: (0, 223, 0, 152, 0, 51)
>       DataSpacing: (0.9195, 1.40018, 2.89048)
>       DataOrigin: (0, 0, 0)
>       HeaderSize: 352
>       Internal File Name: (none)
>       TimeAsVector: Off
>       TimeDimension: 1
>       TimeSpacing: 1
>       RescaleSlope: 1
>       RescaleIntercept: 0
>       QFac: -1
>       QFormMatrix: -1 0 0 102.536 0 -1 0 106.413 0 0 1 -117.265 0 0 0 1
>       SFormMatrix: -1 0 -0 102.536 0 -1 -0 106.413 0 0 1 -117.265 0 0 0 1
>       NIFTIHeader:
>       PlanarRGB: Off
>
>     the qform given by nibabel is
>
>     >>> ni_ob.get_qform()
>     array([[  -0.91949999,    0.        ,    0.        , 102.53600311],
>            [   0.        ,   -1.40017998,    0.        , 106.41300201],
>            [   0.        ,    0.        ,    2.89048004, 30.14909935],
>            [   0.        ,    0.        ,    0. ,    1. ]])
>
>
>     ITK has the origin at
>
>     [-102.536, -106.413, 30.1491]
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20161112/4887ef2e/attachment-0001.html>


More information about the vtk-developers mailing list