[ITK] How to get a vector of DICOM Series description strings in ITKv4 (GDCM 2.x)?

Sebastian Ordas sebastian.ordas at gmail.com
Wed Dec 3 11:21:20 EST 2014


Dear All,

I used to be able with ITK 3.12 (GDCM 1.x) to populate a vector with 
series description strings, recursively, given the path to a folder with 
DICOM files.
The goal is to fill in an "Open DICOM" dialog with such information, in 
order to let the user load a single DICOM Series.
How can I do that with ITKv4 (GDCM 2.x)?

thank you,
sebastian

Here´s my original code:

typedef gdcm::FileList DICOMFileListType;

m_GDCMScanner = itk::GDCMSeriesFileNames::New();
m_GDCMScanner->SetUseSeriesDetails(true);
m_GDCMScanner->LoadPrivateTagsOff();
m_GDCMHelper = m_GDCMScanner->GetSeriesHelper();

m_GDCMScanner->SetInputDirectory( m_ImageDirectoryName );

if (!itksys::SystemTools::FileExists (ImageDirectoryName ))
     {
         return;
     }

// we now scan from scratch all dicom file headers
try
{
     this->m_GDCMHelper->Clear();

     unsigned long counter_im = 0;
     gdcm::DirList dirlist(dirname, m_UseRecursiveScan);

     gdcm::DirListType filenames_list = dirlist.GetFilenames();

     unsigned long totalImages = filenames_list.size();
     if (totalImages<10)
         return;

     for( gdcm::DirListType::const_iterator it = filenames_list.begin();
         it != filenames_list.end(); ++it)
     {
       if (itksys::SystemTools::FileExists ((*it).c_str(), true))
           m_GDCMHelper->AddFileName ((*it));
       counter_im++;
     }
}
catch (itk::ExceptionObject & excp)
{
   return;
}

std::vector<std::string> UIDs;
UIDs = m_GDCMScanner->GetSeriesUIDs();

if (!UIDs.size())
return;

     try
     {
         m_SeriesNames.clear();

         int nSeries = 0;

         for (unsigned int uid=0; uid<UIDs.size(); uid++)
         {
             std::string uidname = UIDs[uid];
             DICOMFileListType* t_filelist = 
m_GDCMHelper->GetSingleSerieUIDFileSet(uidname);
             this->m_GDCMHelper->OrderFileList (t_filelist);

             DICOMFileListType::iterator it;
             it = t_filelist.begin();

             for (; it != t_filelist.end(); it++)
             {
                 DICOMFileListType* filelist = (*it);
                 if ( !filelist->size() )
                 {
                 continue;
                 }
                 std::stringstream stream;
                 stream << "series# " << nSeries << ": " << 
this->GenerateName(filelist) << " (" << filelist->size() << " slices)";
                 m_SeriesNames.push_back( stream.str() );
                 nSeries++;
             }
         }
     }
     catch (itk::ExceptionObject & excp)
     {
         return;
     }

template <class TPixelType>
std::string DICOMImageReader<TPixelType>::GenerateName 
(DICOMFileListType* filelist)
{
   std::string description = (*filelist)[0]->GetEntryValue(0x0008, 0x103E);
   if (description == gdcm::GDCM_UNFOUND)
   {
     (*filelist)[0]->Load();
     description = (*filelist)[0]->GetEntryValue(0x0008, 0x103E);
   }
   return description;
}



More information about the Community mailing list