[ITK] How to get a vector of DICOM Series description strings in ITKv4 (GDCM 2.x)?
Matt McCormick
matt.mccormick at kitware.com
Wed Dec 3 14:29:53 EST 2014
Passing along nice follow-up from Mathieu Malaterre:
You should be using gdcm::Scanner:
http://gdcm.sourceforge.net/html/classgdcm_1_1Scanner.html
See for example:
http://gdcm.sourceforge.net/html/SimpleScanner_8cxx-example.html#_a7
>From the command line, you will discover it is much *much* faster than
the very old GDCM 1.x implementation, see:
http://gdcm.sourceforge.net/html/gdcmscanner.html
On Wed, Dec 3, 2014 at 11:43 AM, Sebastian Ordas
<sebastian.ordas at gmail.com> wrote:
> Hi Matt,
> several issues: the GDCM API has changed in 2.x
> For instance, gdcm::DirList does not exist anymore, same for
> m_GDCMHelper->AddFileName(), etc
> I would also like to know whether to put the efforts on GDCM or DCMTK (I
> have seen a gdcm::SerieHelper2 class in plastimach that is worthy to
> explore)
>
>
> ... but there should be some basic functionality / approach already
> available for such a simple and general action (i.e. explore available DICOM
> Series and/or Studies in a folder with DICOM files)
>
> let me know if you have some useful links (I don´'t want to link against CTK
> in my app)
>
> thanks
> sebastian
>
>
> On 03/12/2014 01:30 p.m., Matt McCormick wrote:
>>
>> Hi Sebastian,
>>
>> What specifically is the issue using this code with ITKv4?
>>
>> Thanks,
>> Matt
>>
>> On Wed, Dec 3, 2014 at 11:21 AM, Sebastian Ordas
>> <sebastian.ordas at gmail.com> wrote:
>>>
>>> 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;
>>> }
>>>
>>> _______________________________________________
>>> Community mailing list
>>> Community at itk.org
>>> http://public.kitware.com/mailman/listinfo/community
>
>
More information about the Community
mailing list