[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