[Insight-users] Convert NRRD into DICOM

Luis Ibanez luis.ibanez at kitware.com
Sat Jul 4 15:51:58 EDT 2009


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
>  >
>  >
>  >
> 
>  
> 


More information about the Insight-users mailing list