[Insight-users] now my dicom series reader seg faults with the changes

John Drozd john.drozd at gmail.com
Thu Dec 3 15:35:52 EST 2009


Hi Bill,

Sorry, but it's getting more complicated with itkGDCMIMageIO.cxx.

With the previous ITK (the version prior to the rev 1.162 change that you
did to itkGDCMIMageIO.cxx so my outputted 3d dicom volume would be in the
correct orientation):

With this previous ITK, I had code working that read two dicom series and
wrote them to a 3d dicom single file volume.

Now with the revised ITK (the version with the re 1.162 change that you did
to itkGDCMIMageIO.cxx so my outputted 3d dicom volume would be in the
correct orientation):

With this revised ITK, my code that reads two dicom series and writes them
to a 3d dicom single file volume.
seg faults.

Could you check this for me please.

Ideally, I would like my previous segmentation code to output the correct
dicom orientation, and my code that reads dicom series to both work with the
same version of ITK.

Thanks,
john

You can download my dicom series data as compressed tar.gz from the
following links:

http://www.apmaths.uwo.ca/~jdrozd/datasubject.tar.gz

and

http://www.apmaths.uwo.ca/~jdrozd/datasubject4.tar.gz

(Prior to running the below code, untar and unzip these two compressed files
and have them in the same directory as the code executable)

Below is my code:

/* to run ReadAtlasDicomSeriesAndReadSubjectDicomSeries.cxx, compile and
type:
./ReadAtlasDicomSeriesAndReadSubjectDicomSeries "datasubject"
"datasubject4/136_S_0429/MPR__GradWarp__B1_Correction__N3__Scaled/2007-06-18_13_28_06.0/S33724/70809234826766_S33724_I66806_Dicom"
*/

#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif

#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkOrientedImage.h"
#include "itkGDCMImageIO.h"
#include "itkGDCMSeriesFileNames.h"
#include "itkImageSeriesReader.h"

int main(int argc, char *argv[])
{

  typedef short InputPixelType;
  const unsigned int   InputDimension = 3;

  typedef itk::Image< InputPixelType, InputDimension > InputImageType;

  typedef itk::ImageSeriesReader< InputImageType > AtlasReaderSeriesType;

  typedef itk::ImageSeriesReader< InputImageType > SubjectReaderSeriesType;

  AtlasReaderSeriesType::Pointer movingatlasfilter =
AtlasReaderSeriesType::New();

  SubjectReaderSeriesType::Pointer fixedsubjectfilter =
SubjectReaderSeriesType::New();

 typedef itk::GDCMImageIO           ImageIOType;

  ImageIOType::Pointer gdcmImageIOAtlas = ImageIOType::New();

  ImageIOType::Pointer gdcmImageIOSubject = ImageIOType::New();

  fixedsubjectfilter->SetImageIO( gdcmImageIOSubject );

  movingatlasfilter->SetImageIO( gdcmImageIOAtlas );

typedef itk::GDCMSeriesFileNames AtlasNamesGeneratorType;
  AtlasNamesGeneratorType::Pointer AtlasnameGenerator =
AtlasNamesGeneratorType::New();

typedef itk::GDCMSeriesFileNames SubjectNamesGeneratorType;
  SubjectNamesGeneratorType::Pointer SubjectnameGenerator =
SubjectNamesGeneratorType::New();

  SubjectnameGenerator->SetUseSeriesDetails( true );
  SubjectnameGenerator->AddSeriesRestriction("0008|0021" );

  SubjectnameGenerator->SetDirectory( argv[2] );

  AtlasnameGenerator->SetUseSeriesDetails( true );
  AtlasnameGenerator->AddSeriesRestriction("0008|0021" );

  AtlasnameGenerator->SetDirectory( argv[1] );

try
    {
    std::cout << std::endl << "The directory: " << std::endl;
    std::cout << std::endl << argv[1] << std::endl << std::endl;
    std::cout << "Contains the following Atlas DICOM Series: ";
    std::cout << std::endl << std::endl;

typedef std::vector< std::string >    AtlasSeriesIdContainer;

    const AtlasSeriesIdContainer & AtlasseriesUID =
AtlasnameGenerator->GetSeriesUIDs();

    AtlasSeriesIdContainer::const_iterator AtlasseriesItr =
AtlasseriesUID.begin();
    AtlasSeriesIdContainer::const_iterator AtlasseriesEnd =
AtlasseriesUID.end();
    while( AtlasseriesItr != AtlasseriesEnd )
      {
      std::cout << AtlasseriesItr->c_str() << std::endl;
      AtlasseriesItr++;
      }

std::string AtlasseriesIdentifier;

    if( argc > 4 ) // If no optional series identifier
      {
      AtlasseriesIdentifier = argv[3];
      }
    else
      {
      AtlasseriesIdentifier = AtlasseriesUID.begin()->c_str();
      }

std::cout << std::endl << std::endl;
    std::cout << "Now reading Atlas series: " << std::endl << std::endl;
    std::cout << AtlasseriesIdentifier << std::endl;
    std::cout << std::endl << std::endl;

typedef std::vector< std::string >   AtlasFileNamesContainer;
    AtlasFileNamesContainer AtlasfileNames;

    AtlasfileNames = AtlasnameGenerator->GetFileNames( AtlasseriesIdentifier
);

    movingatlasfilter->SetFileNames( AtlasfileNames );


    try
      {
      movingatlasfilter->Update();
      std::cout << "Atlas read successfully"  << std::endl;
      }
    catch (itk::ExceptionObject &ex)
      {
      std::cout << ex << std::endl;
      return EXIT_FAILURE;
      }

      typedef itk::ImageFileWriter< InputImageType > AtlasWriterSubjectType;

  AtlasWriterSubjectType::Pointer movingatlasfilterwriter =
AtlasWriterSubjectType::New();


  movingatlasfilterwriter->UseInputMetaDataDictionaryOff();
  movingatlasfilterwriter->SetImageIO( gdcmImageIOAtlas );


movingatlasfilterwriter->SetFileName( "atlasout.dcm" );

movingatlasfilterwriter->SetInput( movingatlasfilter->GetOutput() );


try
      {
      movingatlasfilterwriter->Update();
      }
    catch (itk::ExceptionObject &ex)
      {
      std::cout << ex << std::endl;
      return EXIT_FAILURE;
      }
    }
  catch (itk::ExceptionObject &ex)
    {
    std::cout << ex << std::endl;
    return EXIT_FAILURE;
    }

    try
    {
    std::cout << std::endl << "The directory: " << std::endl;
    std::cout << std::endl << argv[2] << std::endl << std::endl;
    std::cout << "Contains the following Subject DICOM Series: ";
    std::cout << std::endl << std::endl;

typedef std::vector< std::string >    SubjectSeriesIdContainer;

    const SubjectSeriesIdContainer & SubjectseriesUID =
SubjectnameGenerator->GetSeriesUIDs();

    SubjectSeriesIdContainer::const_iterator SubjectseriesItr =
SubjectseriesUID.begin();
    SubjectSeriesIdContainer::const_iterator SubjectseriesEnd =
SubjectseriesUID.end();
    while( SubjectseriesItr != SubjectseriesEnd )
      {
      std::cout << SubjectseriesItr->c_str() << std::endl;
      SubjectseriesItr++;
      }

std::string SubjectseriesIdentifier;

    if( argc > 4 ) // If no optional series identifier
      {
      SubjectseriesIdentifier = argv[2];
      }
    else
      {
      SubjectseriesIdentifier = SubjectseriesUID.begin()->c_str();
      }

std::cout << std::endl << std::endl;
    std::cout << "Now reading Subject series: " << std::endl << std::endl;
    std::cout << SubjectseriesIdentifier << std::endl;
    std::cout << std::endl << std::endl;

typedef std::vector< std::string >   SubjectFileNamesContainer;
    SubjectFileNamesContainer SubjectfileNames;

    SubjectfileNames = SubjectnameGenerator->GetFileNames(
SubjectseriesIdentifier );

    fixedsubjectfilter->SetFileNames( SubjectfileNames );

    try
      {
      fixedsubjectfilter->Update();
      std::cout << "Subject read successfully"  << std::endl;
      }
    catch (itk::ExceptionObject &ex)
      {
      std::cout << ex << std::endl;
      return EXIT_FAILURE;
      }

      typedef itk::ImageFileWriter< InputImageType >
SubjectWriterSubjectType;

  SubjectWriterSubjectType::Pointer fixedsubjectfilterwriter =
SubjectWriterSubjectType::New();

  fixedsubjectfilterwriter->UseInputMetaDataDictionaryOff();
  fixedsubjectfilterwriter->SetImageIO( gdcmImageIOSubject );

  fixedsubjectfilterwriter->SetFileName( "subjectout.dcm" );

  fixedsubjectfilterwriter->SetInput( fixedsubjectfilter->GetOutput() );


try
      {
      fixedsubjectfilterwriter->Update();
      }
    catch (itk::ExceptionObject &ex)
      {
      std::cout << ex << std::endl;
      return EXIT_FAILURE;
      }
      }
  catch (itk::ExceptionObject &ex)
    {
    std::cout << ex << std::endl;
    return EXIT_FAILURE;
    }



return EXIT_SUCCESS;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20091203/de1b2890/attachment-0001.htm>


More information about the Insight-users mailing list