2
votes

I want to read a Series of DICOM image to convert them into a 3D image using ITK. I follow the example in the documentation: " Examples/IO/DicomSeriesReadImageWrite2.cxx" . But I am still having problems, I solved some, but I would like to hear any tip, please!

The problem is in the code line underlined, the code is just below here and it’s not so long. It compiles, and the variable ‘seriesItr’ has the value = "1.2.392.200036.9116.2.6.1.48.1214834239.1284941923.42443543.0512512" . But the variable ‘seriesEnd’ is a null pointer! What am I doing wrong? Thanks for your help in advanced!

// Reading a 2D DICOM Series and Writing a Volume 
  ReaderType::Pointer reader = ReaderType::New();

  ImageIOType::Pointer dicomIO = ImageIOType::New();
  reader->SetImageIO( dicomIO );
  NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();
  nameGenerator->SetUseSeriesDetails( true ); 

  std::string folder;
  folder = "C:\\Documents and Settings\\GTTS\\Mis documentos\\Visual Studio 2008\\Projects\\Reg_mono3D\\Reg_mono3D\\DICOM_SERIES\\T\\";
  nameGenerator->SetDirectory(folder);

  const SeriesIdContainer & seriesUID = nameGenerator->GetSeriesUIDs();
  SeriesIdContainer::const_iterator seriesItr = seriesUID.begin();
  ***SeriesIdContainer::const_iterator seriesEnd = seriesUID.end();***
  while( seriesItr != seriesEnd )
  {
        std::cout << seriesItr->c_str() << std::endl;
        seriesItr++;
  }

  std::string seriesIdentifier;
  seriesIdentifier = seriesUID.begin()->c_str();
  FileNamesContainer fileNames;
  fileNames = nameGenerator->GetFileNames( seriesIdentifier );

  reader->SetFileNames( fileNames );

  try
  {
        reader->Update();
  }
  catch (itk::ExceptionObject &ex)
  {
        cout << ex << std::endl;
  }
1
What is the problem if seriesEnd is NULL?Asha
That I have 82 dicom image and I want to read the complete series...then the 'while' loop must go though the whole image and not only the first part of the first imageAntonio
I am running this code now and it works fine. Do you need double \\ separators? I am using / I also have nameGenerator->AddSeriesRestriction("0008|0021" ); after theuser1072635
The problem is in the line where it gets the filename, cause the iterator goes all over the whole dicom series, but this line : "("0008|0021"" take the path of the 92º dicom image! And don't know why...Antonio
Hi Antonio ... I am trying to run this example, can you tell me what are you typed as "outputFileName" and "seriesName" ? Thank you.flaviu2

1 Answers

4
votes

Is it possible the images aren't 100% compliant? Many toolkits out there are not very fault tolerate, and it seems like 90% of vendors are not 100% compliant. I would try running the images through the DCMtk tool dcmconv to "convert" the files. I use convert in quotes because I'll often run files through it with the exact same settings they currently have because dcmconv will export the copies in a 100% compliant way.

Info on dcmconv can be found here: http://support.dcmtk.org/docs/dcmconv.html

Will