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

John Drozd john.drozd at gmail.com
Thu Dec 3 23:41:53 EST 2009


Hi Bill,

You don't have to test my code anymore.  Everything is fine now.
There was an error in my CMakeLists.txt file that was causing the seg fault.
I updated my 3DSlicer which updated its ITK and now both my dicom series
reader code and my segmentation code works.

Thanks,
john

On Thu, Dec 3, 2009 at 6:54 PM, John Drozd <john.drozd at gmail.com> wrote:

> Hi Bill,
>
> Thanks.  Of course, try this when you find time.  That's fine.
>
> BUT BEFORE YOU DO ANYTHING, give me a day to download the latest Slicer and
> CVS and 3.16 to retest my code.
>
> The ITK that my dicom series reader code worked with was ITK 3.14 that came
> with Slicer 3.4.
>
> The ITK that my dicom series reader code seg faults with is the ITK that
> came with the 3D Slicer 3.5 alpha download that I downloaded on 2009-12-02
> 15:43.  I believe that this version of Slicer that I downloaded has ITK 3.16
> with the fix that you did to establish the correct orientation, because with
> this version of ITK, I get the correct orientation from my segmentation code
> that I sent a few days ago.
>
> I've also tested the CVS that I downloaded on 2009-12-01 12:07 and my dicom
> series reader code seg faults as well.
>
> Thanks,
> john
>
>
>
> On Thu, Dec 3, 2009 at 4:46 PM, Bill Lorensen <bill.lorensen at gmail.com>wrote:
>
>> I'll take a look, but it won't be for a few days... Can you clarify
>> what version of itk you are referring to? Is it 3.16? If not, is it
>> the current cvs? There was a bug introduced in the current cvs
>> yesterday. It has been removed. That's why we must know clearly which
>> version you are talking about.
>>
>> Bill
>>
>> On Thu, Dec 3, 2009 at 3:35 PM, John Drozd <john.drozd at gmail.com> wrote:
>> > 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/c6432586/attachment-0001.htm>


More information about the Insight-users mailing list