[ITK-users] [ITK] itk Python: origin of DICOM slice does not change

Matt McCormick matt.mccormick at kitware.com
Tue Sep 20 14:14:23 EDT 2016


A Python version of the example is available here:

  http://review.source.kitware.com/#/c/21554/

On Tue, Sep 20, 2016 at 1:03 PM, Matt McCormick
<matt.mccormick at kitware.com> wrote:
> Hi Fabio,
>
> In the example, a 3D non-DICOM is written to the output (e.g. NRRD).
> Your code must have something different if it is writing 2D DICOM
> files. DicomImageReadWrite is also deprecated [1].
>
> DICOM writing support in ITK could be improved. It is recommended to
> write to other output formats.
>
> HTH,
> Matt
>
> [1] https://github.com/InsightSoftwareConsortium/ITK/blob/077527e86d96daf88663fda6bf7abeb1e92b9d9d/Examples/IO/DicomSeriesReadImageWrite.cxx#L22-L28
>
> On Tue, Sep 20, 2016 at 10:26 AM, D'Isidoro  Fabio <fisidoro at ethz.ch> wrote:
>> Hi,
>>
>> I tried this
>>
>> ImageIOType = itk.GDCMImageIO
>> gdcmImageIO = ImageIOType.New()
>> reader.SetImageIO(gdcmImageIO)
>> reader.Update()
>>
>> ...
>>
>> writer_output.SetInput(filter.GetOutput())
>> writer_output.UseInputMetaDataDictionaryOff()
>> gdcmImageIO_output = ImageIOType.New()
>> writer_output.SetImageIO(gdcmImageIO_output)
>>
>> but the written DICOM image has default origin (0,0) mm and default spacing (1., 1.).
>>
>> Also, the example "DicomImageReadWrite" too does not create a new instance of the gdcmImageIO.
>>
>>
>>
>>
>> -----Original Message-----
>> From: Matt McCormick [mailto:matt.mccormick at kitware.com]
>> Sent: Dienstag, 20. September 2016 16:03
>> To: D'Isidoro Fabio
>> Cc: Dženan Zukić; insight-users at itk.org; Timothee Evain
>> Subject: Re: [ITK-users] [ITK] itk Python: origin of DICOM slice does not change
>>
>> Hi Fabio,
>>
>> Also, if
>>
>>   writer_output.SetImageIO(gdcmImageIO)
>>
>> is called, and gdcmImageIO is being re-used, then gdcmImageIO will re-use its MetaDataDictionary. So a new instance of GDCMImageIO shoulrd be passed to avoid using the old MetaDataDictionary.
>>
>> HTH,
>> Matt
>>
>> On Tue, Sep 20, 2016 at 9:14 AM, Matt McCormick <matt.mccormick at kitware.com> wrote:
>>> Hi Fabio,
>>>
>>> As suggested by Tim, call  ->UseInputMetaDataDictionaryOff() to use
>>> the Origin from the itk::Image. The MetaDataDictionary tags will
>>> indicate an Origin that is not correct.
>>>
>>> HTH,
>>> Matt
>>>
>>> On Tue, Sep 20, 2016 at 9:06 AM, D'Isidoro  Fabio <fisidoro at ethz.ch> wrote:
>>>> Hi,
>>>>
>>>>
>>>>
>>>> It doesn’t work.
>>>>
>>>>
>>>>
>>>> Filter.GetOuput() already has the new origin (I can print it and it’s
>>>> right). Something wrong is in the writing process.
>>>>
>>>>
>>>>
>>>> By the way, I noticed this problem occurs for change of the origin
>>>> and of rescaling intensities. It does not occur for changes in size and spacing.
>>>>
>>>>
>>>>
>>>> Regards,
>>>>
>>>> Fabio
>>>>
>>>>
>>>>
>>>> From: Dženan Zukić [mailto:dzenanz at gmail.com]
>>>> Sent: Dienstag, 20. September 2016 14:46
>>>> To: D'Isidoro Fabio
>>>> Cc: Timothee Evain; insight-users at itk.org
>>>> Subject: Re: [ITK-users] [ITK] itk Python: origin of DICOM slice does
>>>> not change
>>>>
>>>>
>>>>
>>>> Hi Fabio,
>>>>
>>>>
>>>>
>>>> did you try setting the origin directly on the result image:
>>>>
>>>> filter->Update();
>>>>
>>>> outImage=filter->GetOutput();
>>>>
>>>> outImage->SetOrigin(new_origin);
>>>>
>>>> writer_output->SetInput(outImage);
>>>>
>>>>
>>>>
>>>> Regards,
>>>>
>>>> Dženan
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Tue, Sep 20, 2016 at 8:34 AM, D'Isidoro Fabio <fisidoro at ethz.ch> wrote:
>>>>
>>>> Hi,
>>>>
>>>> I am currently using the command:
>>>>
>>>> writer_output.UseInputMetaDataDictionaryOff()
>>>>
>>>> If I don't use it, the image is saved with default origin (0,0) mm
>>>> and default spacing (1., 1.).
>>>>
>>>> According to the manual for UseInputMetaDataDictionaryOff(), "this
>>>> flag defines whether the MetaDataDictionary to use will be the one
>>>> from the input image or the one already set in the ImageIO object."
>>>> My understanding is that if I set it off, the DICOM slice will be
>>>> written with current values (and not the input values), which is what
>>>> I want. But this seems not to happen.
>>>>
>>>> Relevant parts of my code:
>>>>
>>>> filter.SetOutputOrigin( new_origin )
>>>> writer_output.SetInput(filter.GetOutput())
>>>> writer_output.UseInputMetaDataDictionaryOff()
>>>> writer_output.SetImageIO(gdcmImageIO)
>>>> writer_output.Update()
>>>>
>>>> Maybe the function UseInputMetaDataDictionaryOff() does not work
>>>> properly for the itk with Python wrapping?
>>>>
>>>> Thanks for your answer.
>>>>
>>>> Fabio.
>>>>
>>>>
>>>> -----Original Message-----
>>>> From: Timothee Evain [mailto:tevain at telecom-paristech.fr]
>>>> Sent: Dienstag, 20. September 2016 10:35
>>>> To: D'Isidoro Fabio
>>>> Cc: insight-users at itk.org
>>>> Subject: Re: [ITK] [ITK-users] itk Python: origin of DICOM slice does
>>>> not change
>>>>
>>>> Hi,
>>>>
>>>> You refer to the DICOMImageReadWrite example. If you don't change the
>>>> writing part, I think your problem comes from the fact that you
>>>> assign the read metadata directly to the output (
>>>> ->UseInputMetaDataDictionaryOff() ) so the original origin will be saved.
>>>>
>>>> HTH,
>>>>
>>>> Tim
>>>>
>>>> ----- Mail original -----
>>>> De: "D'Isidoro Fabio" <fisidoro at ethz.ch>
>>>> À: insight-users at itk.org
>>>> Envoyé: Lundi 19 Septembre 2016 22:09:39
>>>> Objet: [ITK] [ITK-users] itk Python: origin of DICOM slice does not
>>>> change
>>>>
>>>>
>>>>
>>>> Hi,
>>>>
>>>>
>>>>
>>>> Following the code ResampleImageFilter2.cxx, I am applying an
>>>> Identity Transform to a single DICOM slice, I change the origin to
>>>>
>>>>
>>>>
>>>> output_origin = reader.GetOutput().GetOrigin() + offset
>>>>
>>>>
>>>>
>>>> and I write the transformed DICOM slice into a new DICOM slice
>>>> (following the code DICOMImageReadAndWrite.cxx).
>>>>
>>>>
>>>>
>>>> I visualize the written DICOM slice with a viewer (it’s an itk-vtk
>>>> segmentation software).
>>>>
>>>>
>>>>
>>>> The transformed DICOM slice looks as it should. Surprisingly however
>>>> the viewer shows the original input values as origin. This is
>>>> confirmed by the fact that if I read with an itk script the written
>>>> DICOM slice again, and I print the information of the DICOM slice,
>>>> the origin is still the original one and not the modified one.
>>>>
>>>>
>>>>
>>>> How could this be?
>>>>
>>>>
>>>>
>>>> Original DICOM slice:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Transformed DICOM slice:
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Thank you for help,
>>>>
>>>>
>>>>
>>>> Fabio.
>>>>
>>>> _____________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Kitware offers ITK Training Courses, for more information visit:
>>>> http://www.kitware.com/products/protraining.php
>>>>
>>>> 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://public.kitware.com/mailman/listinfo/insight-users
>>>>
>>>> _______________________________________________
>>>> Community mailing list
>>>> Community at itk.org
>>>> http://public.kitware.com/mailman/listinfo/community
>>>> _____________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Kitware offers ITK Training Courses, for more information visit:
>>>> http://www.kitware.com/products/protraining.php
>>>>
>>>> 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://public.kitware.com/mailman/listinfo/insight-users
>>>>
>>>>
>>>>
>>>>
>>>> _____________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Kitware offers ITK Training Courses, for more information visit:
>>>> http://www.kitware.com/products/protraining.php
>>>>
>>>> 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://public.kitware.com/mailman/listinfo/insight-users
>>>>


More information about the Insight-users mailing list