[ITK-users] Accessing DICOM header/meta data with Python ITK
Michka Popoff
michkapopoff at gmail.com
Wed Jun 25 08:12:17 EDT 2014
Hi
I think you can directly access it "python style":
tilt = metad['0018|1120']
In fact, the itlMetaDataDictionnary class has a __getitem__ method, which downcasts directly the value [1].
[1] https://github.com/InsightSoftwareConsortium/ITK/blob/master/Wrapping/Generators/Python/PyBase/pyBase.i#L173
Le 25 juin 2014 à 13:35, Mathew Guilfoyle a écrit :
> Hi,
>
> I need some help with how to correctly access the DICOM meta data dictionary using Python wrapped ITK (v.4.5). My CT scans are scanned with gantry tilt which I need to correct with a shear transform prior to segmenting. The gantry tilt angle is stored in the DICOM header under tag (0018, 1120)
>
> example:
>
> import itk
>
> imdir = '/path/to/images'
> image_t = itk.Image[itk.F, 3]
>
> #set up reader
> reader = itk.ImageSeriesReader[image_t].New()
> dicomIO = itk.GDCMImageIO.New()
> dicomFN = itk.GDCMSeriesFileNames.New()
> reader.SetImageIO(dicomIO)
>
> #get file names
> dicomFN.SetUseSeriesDetails(True)
> dicomFN.SetDirectory(imdir)
>
> #get the first image series
> uids = dicomFN.GetSeriesUIDs()
> fnames = dicomFN.GetFileNames(uids[0])
>
> #read in the files
> reader.SetFileNames(fnames)
> reader.Update()
> image = reader.GetOutput()
>
> #getting the image works fine. Now to access the meta data dictionary
> metad = dicomIO.GetMetaDataDictionary()
>
> #get the entry for gantry tilt using the relevant DICOM tag (0018, 1120)
> tilt = metad.Get('0018|1120')
>
> At this point I am stuck. tilt is of type itkMetaDataObjectBase, rather than one the derived classes specific to strings, floats etc.. itkMetaDataObjectBase does not contain the GetMetaDataObjectValue() method, whereas the derived classes do.
>
> In the ITK manual, the C++ example uses a dynamic_cast at the type the tag is extracted so that 'tilt' would be of one the derived class types. I have tried the following:
>
> sst = itk.MetaDataObject.SS
> tilt.__class__ = sst
> tilt.GetMetaDataObjectValue()
>
> casting tilt does work, and the GetMetaDataObjectValue() method is now present as one of tilt's attributes, but just returns an error if executed.
>
> The other approach I have tried is to use the dicomIO.GetValueFromTag() method. From the source file the method signature is
>
> GetValueFromTag(self, string tag, string value)
>
> 'value' is, I presume, meant to be the name of the variable created containing the tilt angle. However if I try:
>
> dicomIO.GetValueFromTag('0018|1120', 't_angle')
>
> I get the error
> in method 'itkGDCMImageIO_GetValueFromTag', argument 3 of type 'std::string &
>
> I would be tremendously grateful for any pointers on how to access the tag data - it must be a routine operation for people using Python/ITK on DICOM images!
>
> Many thanks
> Mat
>
> _____________________________________
> 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