[ITK-users] SimpleITK | read a 3D image from a non DICOM file and write it as a series of DICOM slices

Bradley Lowekamp blowekamp at mail.nih.gov
Wed Dec 31 10:46:45 EST 2014


Hello,

Sorry for the slow reply. Earlier you linked to this nice example for reference:
http://www.itk.org/Doxygen/html/Examples_2IO_2ImageReadDicomSeriesWrite_8cxx-example.html

With SimpleITK I have done the following when I needed to write a series in Python:

for i in range(img.GetSize()[2]):
    sitk.WriteImage(img[:,:,i],"test_{0:04}.tif".format(i))


However it is not quite this simple for a DICOM series. The metadata tags need to be correct too. SimpleITK is not designed to be a full fledge interface to DICOM files. Other tools may be better for that. But this seems like a reasonable thing to do but it's not currently readily available in the SimpleITK interface. Perhaps after some discussion on the best way to do it it and be added.


There are 3 main components to this example:

1) MetaDataDictionary

In SimpleITK the MetaDataDictionary interface is only part of the Image class. Currently it provides a read only interface, with the GetMetaDataKeys(), and GetMetaData(key) methods[1]. This get method only returns the type of data in the dictionary converted to a string.

The required method would be Image::SetMetaData(key,value). The issue would be what types of value need to be supported. For this example only std::string is needed, perhaps others should be overloaded?

2) NumericSeriesFileNameGenerator

This class only produces a "list" of file names. I think that many of the languages may have a more convenient way to do this. For example in Python:

[ "test_{0:04}.png".format(i) for i in range(img.GetSize()[2]) ]

So I don't think this is so important.

3) SeriesWriter

What we just used above is different then the SeriesWriter, as special metadata is passed from the ImageSeriesWriter to the ImageIO [2]. Here is the JIRA issue for this task [3].


So after these get done something like the following would do what you ask:

import SimpleITK as sitk

img = stik.ReadImage(argv[1])
img.SetMetaData("008|0060", "MR") // Modality
img.SetMetaData("008|0008", "DERIVED\\SECONDARY") // Image Type
img.SetMetaData("008|0064", "DV") // Conversion Type
sitk.WriteImage(img, [ "test_{0:04}.dcm".format(i) for i in range(img.GetSize()[2]) ])

Does that look like what you are looking for?

Brad

[1] http://www.itk.org/SimpleITKDoxygen/html/classitk_1_1simple_1_1Image.html#a3d6cb12a211352ee38da5405b9c75928
[2] https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/IO/ImageBase/include/itkImageSeriesWriter.hxx#L327-L368
[3] https://issues.itk.org/jira/browse/SIMPLEITK-122

On Dec 29, 2014, at 2:48 PM, Matias Montroull <matimontg at gmail.com> wrote:

> Hi,
> 
> Is there an example for SimpleITK to read a 3D image from a non Dicom file such as mhd and then write it as a series of DICOM Slices?
> 
> I can do this with C++ but I haven't been able to figure out how to do it using simpleITK.
> 
> Thanks,
> 
> Matias.
> _____________________________________
> 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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/insight-users/attachments/20141231/fb677969/attachment.html>


More information about the Insight-users mailing list