[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