[Insight-users] Convert NRRD into DICOM

Bill Lorensen bill.lorensen at gmail.com
Sun Jul 5 11:24:52 EDT 2009


Luis,

I found the problem in the nrrd library. This is the better place to
fix it. I'm checking it in now.

Ezequiel,

Please update Insight/Utilities/NrrdIO/read.c

Let us know if this fixes the problem. Thank you for your patience and
thanks for finding this bug,

Bill

On Sun, Jul 5, 2009 at 8:19 AM, Bill Lorensen<bill.lorensen at gmail.com> wrote:
> Luis,
>
> I just verified that nrrd can only handle unix style "/" slashes in
> filenames. It cannot handle windows "\" separators in filenames.
>
> I looked quickly at the nrrd code and it's not obvious how to fix
> this. However, I can easily fix the problem in itkNRRDImageIO.cxx by
> using itksys::SystemTools::ConvertToUnixSlashes(). I tried this and
> the test program now works with "\" in the filenames.
>
> What do you think?
>
> Bill
>
> On Sun, Jul 5, 2009 at 7:50 AM, Bill Lorensen<bill.lorensen at gmail.com> wrote:
>> I think I can reproduce the problem.
>>
>> I just ran itkIOTests itkNrrdImageReadWriteTest with one of the itk
>> testing datasets. When I specified the name with forward slash
>> separators, the test worked. When I specified with "\" backslash
>> separators if failed.
>>
>> Ezequiel, Can you try this command line:
>> C:\Projects\ConversionTool\build\Debug\ConvertIntoDicomSeries.exe
>> C:/Downloads/MS-Lesion-Segmentation-2008/Testing-Data/CHB_test1_Part1/CHB_test1_Case01/CHB_test1_Case01_FLAIR.nhdr
>> C:/Desktop/
>>
>> Bill
>>
>>
>> On Sat, Jul 4, 2009 at 3:51 PM, Luis Ibanez<luis.ibanez at kitware.com> wrote:
>>>
>>> Hi Ezequiel,
>>>
>>> Thanks for the additional information.
>>>
>>> Your image of 512 x 512 x 512 short pixels
>>> would require:
>>>
>>>
>>>              256 Mb
>>>
>>>
>>> which doesn't seem to be too demanding...
>>>
>>>
>>> So...
>>> your suspicion that the problem relates to locating
>>> the file itself, sounds reasonable.
>>>
>>>
>>>
>>> A typical suspect would be the logic that constructs
>>> the filename "fname".
>>>
>>>
>>>
>>> Could you please help us debug this problem ?
>>>
>>>
>>> Please do the following:
>>>
>>>
>>> Compile ITK and your program in Debug mode.
>>>
>>> Put a break point in
>>>
>>>    Insight/Utilities/NrrdIO/formatNRRD.c
>>>
>>> in line : 113:
>>>
>>>  fname = (char*)malloc(airStrlen(nio->path) + strlen("/") + maxl + 1);
>>>
>>> Then track the composition of "fname" through the
>>> subsequent lines.
>>>
>>> Somewhere in between 113 and 160 there should be a logic
>>> flaw on the construction of the raw data filename.
>>>
>>>
>>> Pay particular attention to line 138-144:
>>>
>>>
>>>    if (_NEED_PATH(nio->dataFNFormat)) {
>>>      strcpy(fname, nio->path);
>>>      strcat(fname, "/");
>>>      sprintf(fname +
>>>            strlen(nio->path) +
>>>            strlen("/"), nio->dataFNFormat, ii);
>>>    } else {
>>>      sprintf(fname, nio->dataFNFormat, ii);
>>>    }
>>>
>>>
>>> (e.g. including whath
>>> path of the "if" in line 138 the code is taking.
>>>
>>>
>>> or whether the code enters the section 149-153:
>>>
>>>
>>>    if (_NEED_PATH(nio->dataFN[nio->dataFNIndex])) {
>>>      sprintf(fname, "%s/%s", nio->path, nio->dataFN[nio->dataFNIndex]);
>>>    } else {
>>>      strcpy(fname, nio->dataFN[nio->dataFNIndex]);
>>>    }
>>>
>>>
>>> Please let us know what you find to be the sequence
>>> of lines (in the code) that your program follows when
>>> constructing "fname".
>>>
>>>
>>>
>>>      Thanks
>>>
>>>
>>>         Luis
>>>
>>>
>>> ----------------------------
>>> Ezequiel Geremia wrote:
>>>>
>>>> Hi,
>>>>
>>>>
>>>> Thank you, I appreciate your support on this question.
>>>>
>>>>
>>>> The images are volumes dimensions: ( 512, 512, 512 ) and pixel type is
>>>> short.
>>>>
>>>>
>>>> While trying to run the task manager with the ITK conversion executable
>>>> there is no jump in RAM usage, this is why I think the RAW volume is not
>>>> even loaded in memory, the reader just does not find it.
>>>>
>>>>
>>>> My understanding is that there is no memory problem, indeed I manage to
>>>> load the same image with the same executable just by moving to the directory
>>>> containing the NRRD volumes.
>>>>
>>>>
>>>> Many thanks,
>>>>
>>>>
>>>> Ezequiel
>>>>
>>>>
>>>> *From:* Luis Ibanez [mailto:luis.ibanez at kitware.com]
>>>> *Sent:* 02 July 2009 23:56
>>>> *To:* Ezequiel Geremia
>>>> *Cc:* itk
>>>> *Subject:* Re: [Insight-users] Convert NRRD into DICOM
>>>>
>>>>
>>>>
>>>> Hi Ezequiel,
>>>>
>>>> Thanks for posting the error message from the Exception.
>>>>
>>>> I just verified that a NRRD header file can be moved along
>>>> with its associated .raw file to a different directory and still
>>>> be read with the NRRD reader included into ITK.
>>>>
>>>> --
>>>>
>>>>
>>>> Looking at the code...
>>>>
>>>>  ...(Ah!, the Unbeatable Glory of Open Source)...
>>>>
>>>> We find that the error message that you posted is being
>>>> generated by line 161 of:
>>>>
>>>>            Insight/Utilities/NrrdIO/formatNRRD.c
>>>>
>>>> that curiously is part of (160-165):
>>>>
>>>>      if ((err = (char*)malloc(strlen(fname) + AIR_STRLEN_MED))) {
>>>>        sprintf(err, "%s: couldn't open \"%s\" (data file %d of %d) for
>>>> %s",
>>>>                me, fname, nio->dataFNIndex+1, (int)_nrrdDataFNNumber(nio),
>>>>                reading ? "reading" : "writing");
>>>>        biffAdd(NRRD, err); free(err);
>>>>      }
>>>>
>>>>
>>>>
>>>> Admittedly,
>>>> the error message is quite misleading here...
>>>>
>>>> It is clear that what is happening in these lines above
>>>> is that the code is failing to allocate enough memory
>>>> for your image.
>>>>
>>>> So...
>>>> please tell us:
>>>>
>>>>
>>>>       A)  How big is the image ?
>>>>
>>>>       B)  How much RAM do you have ?
>>>>
>>>> and please run this code while you have open the
>>>> TaskManager, and check on how much memory
>>>> is available at the time the program post this message.
>>>>
>>>>
>>>> If memory allocation turns out to be the real problem,
>>>> please feel free to add a bug report suggesting
>>>> that this error message be replaced with something
>>>> that indicates that we are dealing with a Memory
>>>> Allocation problem, as opposed to an I/O problem.
>>>>
>>>> You can report bugs at:
>>>> http://public.kitware.com/Bug/my_view_page.php
>>>>
>>>>
>>>>
>>>>
>>>>     Please let us know what you find,
>>>>
>>>>
>>>>           Thanks
>>>>
>>>>
>>>>                  Luis
>>>>
>>>>
>>>>
>>>> -----------------------------------------------------------------------------
>>>>
>>>> On Thu, Jul 2, 2009 at 1:31 PM, Ezequiel Geremia <t-egerem at microsoft.com
>>>> <mailto:t-egerem at microsoft.com>> wrote:
>>>>
>>>> Hi Luis,
>>>>
>>>> The reader.Update() call is inside a try\catch block.
>>>>
>>>> Here is the exception which is caught:
>>>>
>>>> ExceptionObject caught !
>>>>
>>>> itk::ExceptionObject (00A0E9A8)
>>>> Location: "void __thiscall itk::NrrdImageIO::ReadImageInformation(void)"
>>>> File: ..\..\..\src\Code\IO\itkNrrdImageIO.cxx
>>>> Line: 264
>>>> Description: itk::ERROR: NrrdImageIO(025D1DC0): ReadImageInformation:
>>>> Error read
>>>> ing C:\Downloads\MS-Lesion-Segmentation-2008\Extracted-Files\Test
>>>> ing-Data\CHB_test1_Part1\CHB_test1_Case01\CHB_test1_Case01_FLAIR.nhdr:
>>>> [nrrd] nrrdLoad: trouble reading "C:\Downloads\MS-Lesion-Segmenta
>>>>
>>>> tion-2008\Extracted-Files\Testing-Data\CHB_test1_Part1\CHB_test1_Case01\CHB_test
>>>> 1_Case01_FLAIR.nhdr"
>>>> [nrrd] nrrdRead: trouble reading NRRD file
>>>> [nrrd] _nrrdFormatNRRD_read: couldn't open the first datafile
>>>> [nrrd] nrrdIoStateDataFileIterNext: couldn't open
>>>> "./CHB_test1_Case01_FLAIR.raw"
>>>>  (data file 1 of 1) for reading
>>>>
>>>> In this case, the reader does not seem to add the path of the header file
>>>> (i.e.
>>>> "C:\Downloads\MS-Lesion-Segmentation-2008\Extracted-Files\Testing-Data\CHB_test1_Part1\CHB_test1_Case01\")
>>>> to the filename found in the header file and which is in the same directory
>>>> (i.e. "./CHB_test1_Case01_FLAIR.raw").
>>>>
>>>> Many thanks,
>>>>
>>>>
>>>> Ezequiel
>>>>
>>>> -----Original Message-----
>>>> From: Luis Ibanez [mailto:luis.ibanez at kitware.com
>>>> <mailto:luis.ibanez at kitware.com>]
>>>>
>>>> Sent: 02 July 2009 17:51
>>>> To: Ezequiel Geremia; Insight Users
>>>> Subject: Re: [Insight-users] Convert NRRD into DICOM
>>>>
>>>>
>>>> Hi Ezequiel,
>>>>
>>>> Thanks for the update.
>>>>
>>>> I haven't seen this problem before.
>>>>
>>>> I would be very surprised if the reader relies on absolute
>>>> paths, because that will mean that it is impossible to
>>>> move NRRD files from one computer to another,... and even
>>>> from one directory to another in the same machine.
>>>>
>>>>
>>>>
>>>> Did you got an error message ?
>>>>
>>>> If so,
>>>> Could you please post it to the mailing list ?
>>>>
>>>> Are you placing the Update() call of the reader
>>>> inside a try/catch block ?
>>>>
>>>>
>>>>
>>>>  Please let us konw
>>>>
>>>>
>>>>     Thanks
>>>>
>>>>
>>>>       Luis
>>>>
>>>>
>>>> ------------------------
>>>> Ezequiel Geremia wrote:
>>>>  > Hi Luis,
>>>>  >
>>>>  > Thank you for answering my mail,
>>>>  >
>>>>  > I managed to read NRRD format by passing the header .nhdr or .mhd files
>>>> and to convert them into DICOM series.
>>>>  >
>>>>  > The NRRD format I got form the MS Segmentation Challenge 2008 & Liver
>>>> Tumor Segmentation Challenge 2008 websites seem to be specified as the union
>>>> of a header and a RAW data file.
>>>>  >
>>>>  > However I experienced another issue concerning the reader. When I pass
>>>> the header, which contains the relative filename of the .raw file to be
>>>> converted, as an input, the reader is not able to find it (maybe because the
>>>> reader relies on absolute filenames).
>>>>  >
>>>>  > Do you know a way out of this ?
>>>>  >
>>>>  > Regards,
>>>>  >
>>>>  > Ezequiel
>>>>  >
>>>>  >
>>>>  >
>>>>  > -----Original Message-----
>>>>  > From: Luis Ibanez [mailto:luis.ibanez at kitware.com
>>>> <mailto:luis.ibanez at kitware.com>]
>>>>  > Sent: 30 June 2009 22:27
>>>>  > To: Ezequiel Geremia
>>>>  > Cc: insight-users at itk.org <mailto:insight-users at itk.org>
>>>>  > Subject: Re: [Insight-users] Convert NRRD into DICOM
>>>>  >
>>>>  >
>>>>  >
>>>>  > Hi Ezequiel,
>>>>  >
>>>>  >
>>>>  >      If your input file is in NRRD format,
>>>>  >      why are you passing a RAW format as input ?
>>>>  >
>>>>  >
>>>>  > ITK is expecting that a NRRD file will be called
>>>>  >
>>>>  >                LTS_IMG05.nrrd
>>>>  >
>>>>  > not to be called:
>>>>  >
>>>>  >                LTS_IMG05.raw
>>>>  >
>>>>  >
>>>>  >
>>>>  > Also, is this image 2D or 3D ?
>>>>  >
>>>>  >
>>>>  > You may have to retouch the example code in order
>>>>  > to manage 3D images.
>>>>  >
>>>>  >
>>>>  >     Regards,
>>>>  >
>>>>  >
>>>>  >         Luis
>>>>  >
>>>>  >
>>>>  > --------------------------
>>>>  > Ezequiel Geremia wrote:
>>>>  >
>>>>  >>Hi,
>>>>  >>
>>>>  >>
>>>>  >>
>>>>  >>I tried to convert NRRD, which is ITK supported format, data volumes
>>>>  >>into DICOM volumes using the generic converter given in
>>>>  >>/ImageReadWrite.exe/ with the following arguments
>>>>  >>
>>>>  >>-          Input file: LTS_IMG05.raw
>>>>  >>
>>>>  >>-          Output file: LTS_IM05.dcm (also tried .dic and .dicom file
>>>>  >>extensions)
>>>>  >>
>>>>  >>-          Exception:
>>>>  >>
>>>>  >>itk::ImageFileReaderException (0146EEC0)
>>>>  >>
>>>>  >>Location: "void __thiscall itk::ImageFileReader<class
>>>>  >>itk::Image<short,3>,class itk::DefaultConvertPixelTraits<short>
>>>>  >> >::GenerateOutputInformation(void)"
>>>>  >>
>>>>  >>File:
>>>>
>>>>  >>c:\users\t-egerem\software\insighttoolkit-3.14.0\src\code\io\itkImageFileReader.txx
>>>>  >>
>>>>  >>Line: 144
>>>>  >>
>>>>  >>Description:  Could not create IO object for file
>>>>
>>>>  >>C:\Users\t-egerem\Downloads\3D-Liver-Tumor-Segmentation-Challenge-2008\Extracted-Files\Testing-Data\LTS_IMG05.raw
>>>>  >>
>>>>  >>  Tried to create one of the following:
>>>>  >>
>>>>  >>    GDCMImageIO
>>>>  >>
>>>>  >>    MetaImageIO
>>>>  >>
>>>>  >>    PNGImageIO
>>>>  >>
>>>>  >>    VTKImageIO
>>>>  >>
>>>>  >>    GiplImageIO
>>>>  >>
>>>>  >>    BioRadImageIO
>>>>  >>
>>>>  >>    LSMImageIO
>>>>  >>
>>>>  >>    AnalyzeImageIO
>>>>  >>
>>>>  >>    NiftiImageIO
>>>>  >>
>>>>  >>    StimulateImageIO
>>>>  >>
>>>>  >>    JPEGImageIO
>>>>  >>
>>>>  >>    TIFFImageIO
>>>>  >>
>>>>  >>    NrrdImageIO
>>>>  >>
>>>>  >>    BMPImageIO
>>>>  >>
>>>>  >>    DICOMImageIO2
>>>>  >>
>>>>  >>  You probably failed to set a file suffix or set the suffix to an
>>>>  >>unsupported type.
>>>>  >>
>>>>  >>
>>>>  >>
>>>>  >>Then I tried to shortcut the pluggable factory mechanism and it does
>>>> not
>>>>  >>as well with the same data it throws the following error message
>>>>  >>
>>>>  >>                itk::ExceptionObject (0122F614)
>>>>  >>
>>>>  >>Location: "void __thiscall itk::ImageFileReader<class
>>>>  >>itk::Image<short,3>,class itk::DefaultConvertPixelTraits<short>
>>>>  >> >::EnlargeOutputRequestedRegion(class itk::DataObject *)"File:
>>>>
>>>>  >>c:\users\t-egerem\software\insighttoolkit-3.14.0\src\code\io\itkImageFileReader.txx
>>>>  >>
>>>>  >>Line: 342
>>>>  >>
>>>>  >>Description: itk::ERROR: ImageFileReader(0172F7C0): ImageIO returns IO
>>>>  >>region that does not fully contain the requested regionRequested
>>>> region:
>>>>  >>ImageRegion (0122F8D8)
>>>>  >>
>>>>  >>  Dimension: 3
>>>>  >>
>>>>  >>  Index: [0, 0, 0]
>>>>  >>
>>>>  >>  Size: [0, 0, 0]
>>>>  >>
>>>>  >>StreamableRegion region: ImageRegion (0172F8A4)
>>>>  >>
>>>>  >>  Dimension: 3
>>>>  >>
>>>>  >>  Index: [0, 0, 0]
>>>>  >>
>>>>  >>  Size: [0, 0, 0]
>>>>  >>
>>>>  >>
>>>>  >>
>>>>  >>If you can think of a solution can you please point it out to me ?
>>>>  >>
>>>>  >>
>>>>  >>
>>>>  >>Regards,
>>>>  >>
>>>>  >>
>>>>  >>
>>>>  >>Ezequiel Geremia
>>>>  >>
>>>>  >>
>>>>  >>
>>>>  >>
>>>>
>>>>  >>------------------------------------------------------------------------
>>>>  >>
>>>>  >>_____________________________________
>>>>  >>Powered by www.kitware.com <http://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-users
>>>>  >
>>>>  >
>>>>  >
>>>>
>>>>
>>>
>>> _____________________________________
>>> 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-users
>>>
>>
>


More information about the Insight-users mailing list