[Insight-developers] question regarding nifti IO

Luis Ibanez luis.ibanez at kitware.com
Thu Apr 30 08:18:07 EDT 2009


Hi Kent,

ITK images use the itk::Size<> type to store the
number of pixels along every dimension.

The components of itk::Size are of type:

                 "unsigned long"

It seems that you can count on it being 32-bits

   http://en.wikipedia.org/wiki/Long_integer


although after a search in the C++ standard, I couldn't
identify a clear definition of the number of bytes expected
in a "long int"...


      Luis


-------------------------------------------------------------------
On Wed, Apr 29, 2009 at 5:10 PM, kent williams
<norman-k-williams at uiowa.edu> wrote:
> OK I'll log it as a bug for Analyze and NIfTI, and fix it ;-)
>
> This will have to happen in WriteImageInformation, as that's the first point
> in the ImageIO where you can get ahold of the image dimensions.
>
> For ITK, ImageDimensions are at least 32 bits, right?
>
> On 4/29/09 2:52 PM, "Bill Lorensen" <bill.lorensen at gmail.com> wrote:
>
>> I think it's a bug if the imageio does not throw an exception for
>> execeeding the size.
>>
>> On Wed, Apr 29, 2009 at 2:43 PM, kent williams
>> <norman-k-williams at uiowa.edu> wrote:
>>> You¹re absolutely correct ‹ if you happen to look in the NIfTI header (in
>>> ITK, it¹s Insight/Utilities/nifti/niftilib/nifti1.h)  you will see that the
>>> image dimensions are stored as an array of shorts.
>>>
>>>                                  /* NIFTI-1 usage         */              /*
>>> ANALYZE 7.5 field(s) */
>>>  short dim[8];        /*!< Data array dimensions.*/  /* short dim[8];
>>>        */
>>>
>>> This is not a bug in ITK, this is a basic limitation of the file format.  So
>>> the maximum of any dimension is going to be 32767.
>>>
>>> In other words, if you really want to have an image with any dimension >
>>> 32767, you will have to use a different image format.  Which rather begs the
>>> question of why you would need to save such a data object to a standard
>>> image format at all, but I¹m sure you have your reasons.
>>>
>>>
>>> On 4/28/09 8:03 PM, "Nicholas Tustison" <ntustison at gmail.com> wrote:
>>>
>>> Developers,
>>>
>>> My colleague, Brian Avants, asked that I post the following question to the
>>> Insight Developers' list.  Essentially, as he points out below, and I've
>>> reproduced using my own code, it seems as though 1-D images can't be created
>>> in nifti format where the size exceeds ~30,000 pixels but can be created
>>> using the mhd format.  Is this behavior known and is there a particular
>>> reason for it?
>>>
>>> Thanks,
>>> Nick Tustison
>>>
>>> Begin forwarded message:
>>>
>>> From: brian avants <stnava at gmail.com>
>>> Date: April 28, 2009 1:48:58 PM EDT
>>> To: Nicholas Tustison <ntustison at gmail.com>
>>> Subject: bug nifti writer?
>>>
>>>
>>>
>>>
>>> is this a known/unknown bug?
>>>
>>> only appears to happen if #voxels exceeds about 30,000.
>>> suggesting datatype problem.
>>>
>>> see below:
>>>
>>> # first, just print the mhd header
>>>
>>> $ PrintHeader zero2.mhd
>>>  Spacing [1, 1]
>>>  Origin [0, 0]
>>>  Direction
>>> 1 0
>>> 0 1
>>>  Size
>>> [1, 65536]
>>>
>>> # convert to nifti
>>>  $ MultiplyImages 2 zero2.mhd 1 zero2.nii
>>>
>>> # print nifti header
>>> $ PrintHeader zero2.nii
>>>  Spacing [1, 1]
>>>  Origin [0, 0]
>>>  Direction
>>> 1 0
>>>  0 1
>>>
>>>  Size
>>> [1, 1]
>>>
>>> # size is wrong in terms of the header info
>>> # but not in terms of the raw data ...
>>> $ ls -l zero2.nii
>>> -rw-r--r--  1 user  user  262496 Apr 28 13:37 zero2.nii
>>>
>>> $ ls -l zero2.raw
>>> -rw-r--r--  1 user  user  262144 Mar 25  2008 zero2.raw
>>>
>>> # if i convert zero2.nii to mhd the size is wrong
>>> ls -l zero3.raw
>>> -rw-r--r--  1   user  user  4 Apr 28 13:42 zero3.raw
>>>
>>>
>>>
>>>
>>>
>>> ________________________________
>>> _______________________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.itk.org/mailman/listinfo/insight-developers
>>>
>>> _______________________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.itk.org/mailman/listinfo/insight-developers
>>>
>>>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the ITK FAQ at: http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-developers
>


More information about the Insight-developers mailing list