[Insight-users] RE: Getting at private dicom tags
Kris Thielemans
kris.thielemans at imperial.ac.uk
Wed Oct 11 20:18:40 EDT 2006
Hi
I solved my own problem. Thought to let you know.
The bit that I didn't tell you was that I had to read one of the files in
the series to get at the value of the tags:
typedef itk::GDCMImageIO ImageIOType;
ImageIOType::Pointer dicomIO = ImageIOType::New();
typedef itk::Image< float, 2 > ImageType2D;
typedef itk::ImageFileReader< ImageType2D > ReaderType2D;
ReaderType2D::Pointer reader = ReaderType2D::New();
reader->SetImageIO( dicomIO );
typedef std::vector<std::string> FileNamesContainer;
FileNamesContainer fileNames = nameGenerator->GetFileNames(
seriesItr->c_str());
reader->SetFileName( fileNames[0].c_str() );
reader->Update();
Only then can I call dicomIO->GetMetaDataDictionary() as I said in my
original post.
So, where was the problem?
I had set
nameGenerator->SetLoadPrivateTags ( true );
But I had NOT set
dicomIO->SetLoadPrivateTags(true);
I guess I thought that this was done by the nameGenerator business but as
that one doesn't know about dicomIO, that was rather stupid.
Now you know.
Oh, maybe I really didn't have to read this file to get the dictionary after
all? Do I?
Kris
> -----Original Message-----
> From: Thielemans, Kris [mailto:kris.thielemans at imperial.ac.uk]
> Sent: 15 September 2006 18:07
> To: insight-users at itk.org
> Subject: Getting at private dicom tags
>
> Hi
>
> I need to get the value of a private tag (frame number in GE
> gated PET data). I know for sure that the tag is there (for
> instance using dcmtk's dcmdump).
>
> I've modified the example IO/DicomSeriesReadPrintTags to
> what's happening, e.g. I've added
>
> nameGenerator->SetLoadPrivateTags ( true );
> nameGenerator->AddSeriesRestriction("0009|10D8" );
>
> This works in the sense that the value of the frame_number
> now gets added to the 'seriesIdentifier'. However, when I try
> to get at its value using
>
> typedef itk::MetaDataDictionary DictionaryType;
> const DictionaryType & dictionary =
> dicomIO->GetMetaDataDictionary();
> DictionaryType::ConstIterator tagItr = dictionary.Find(
> "0009|10D8" );
>
> this function tells me that it cannot find the tag. (It can
> find some e.g. "0020|0011" SeriesNumber or patientName.
>
> Indeed, the output of (my modified) DicomSeriesReadPrintTags
> shows no private tags.
>
> Is there a way around this?
>
> Thanks
>
> Kris Thielemans
> Hammersmith Imanet, part of GE Healthcare
>
More information about the Insight-users
mailing list