[Insight-users] Convert NRRD into DICOM

Luis Ibanez luis.ibanez at kitware.com
Sun Jul 5 17:55:49 EDT 2009


Bill,

Great !

Thanks for tracking this.


     Luis


------------------------
Bill Lorensen wrote:
> 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