[Insight-users] Convert NRRD into DICOM

Bill Lorensen bill.lorensen at gmail.com
Sun Jul 5 07:50:40 EDT 2009


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