[Insight-users] image reader->Update() problem

Ashish Singh mrasingh at gmail.com
Thu Jan 11 16:19:19 EST 2007


Dan here's my complete code.It is crashing inside the loop second time at
the reader->Update().Can you or anyone please help me figure out what's
wrong  here?

Thanks,
Ashish
------------
#include "itkImageFileReader.h"
#include "itkImageFileWriter.h"
#include "itkRescaleIntensityImageFilter.h"
#include "itkGDCMImageIO.h"
#include "itkImageRegionConstIterator.h"
#include "itkImageRegionIterator.h"
#include "itkRegionOfInterestImageFilter.h"
#include "itkGDCMSeriesFileNames.h"
#include <list>
#include <fstream>
#include <vector>
#include <itksys/SystemTools.hxx>

using namespace std;
 int main( int argc, char* argv[] )
 {

  typedef signed short InputPixelType;
  const unsigned int   InputDimension = 2;

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

  typedef itk::GDCMImageIO           ImageIOType;
  ImageIOType::Pointer gdcmImageIO = ImageIOType::New();

  ReaderType::Pointer reader = ReaderType::New();

  typedef itk::GDCMSeriesFileNames NamesGeneratorType;
  NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New();
  nameGenerator->SetInputDirectory( "D:\\testimages\\SRS00001"  );

  typedef std::vector<std::string> FileNamesContainer;
  FileNamesContainer fileNames = nameGenerator->GetInputFileNames();
  unsigned int numberOfFilenames =  fileNames.size();
  std::cout << numberOfFilenames << std::endl;
  unsigned int fni;
  for(fni = 0; fni<numberOfFilenames; fni++)
  {
    std::cout << "filename # " << fni << " = ";
    std::cout << fileNames[fni] << std::endl;
  }

 typedef itk::Image<InputPixelType, InputDimension> InputImageType;
 typedef itk::ImageRegionConstIterator< InputImageType > ConstIteratorType;
 typedef itk::ImageRegionIterator< InputImageType > IteratorType;
 InputImageType::Pointer image2 = InputImageType::New();
 typedef itk::ImageFileWriter< InputImageType >  Writer1Type;
 Writer1Type::Pointer writer1 = Writer1Type::New();

  for(fni = 0; fni<numberOfFilenames; fni++)
  {
      cout<<"inside for loop"<<" "<<"loop # "<<fni<<endl;

      reader->SetFileName( fileNames[fni] );
      reader->SetImageIO( gdcmImageIO );
      try
        {
            reader->Update();
        }
      catch (itk::ExceptionObject & e)
        {
            std::cerr << "exception in file reader " << std::endl;
            std::cerr << e << std::endl;
            return EXIT_FAILURE;
        }

     InputImageType::Pointer image = reader->GetOutput();
     image2->SetRegions(image->GetRequestedRegion());
     image2->CopyInformation(image);
     image2->Allocate();

     ConstIteratorType in1( image, image->GetRequestedRegion() );

     IteratorType out( image2, image->GetRequestedRegion() );

     for (in1.GoToBegin(),out.GoToBegin();!in1.IsAtEnd();++in1,++out) //copy
original image to new image
     {
        out.Set(in1.Get());
     }

      if(fni==0)
        writer1->SetFileName("D:\\testimages\\SRS\\IM1.dcm" );
      if(fni==1)
          writer1->SetFileName("D:\\testimages\\SRS\\IM2.dcm" );
      writer1->SetInput( image2 );
      writer1->SetImageIO(gdcmImageIO);

      try
        {
            writer1->Update();
        }
      catch (itk::ExceptionObject & e)
        {
            std::cerr << "exception in file writer " << std::endl;
            std::cerr << e << std::endl;
            return EXIT_FAILURE;
        }
  }//for loop end
    return EXIT_SUCCESS;

 }
--------------

On 1/11/07, Ashish Singh <mrasingh at gmail.com> wrote:
>
> Thanks Dan. I tried this. It still doesn't work.Now I get an unhandled
> exception at 0x00406515 in my exe file.
>
> On 1/11/07, Daniel Mace < dlm19 at duke.edu> wrote:
> >
> > Ashish,
> >
> > I think I ran into the same problem a while ago.  I ended up replacing
> > the code with the following
> > -----------------------------------------
> > const vector<string> &fileNames =  nameGenerator->GetInputFileNames();
> > -----------------------------------------
> >
> > and then set the file names by calling
> >
> > ---------------------------------------------
> > reader->SetFileName( fileNames[i].c_str());
> > ---------------------------------------------
> >
> > More of a quick fix for me (as I was returning to C++ after an 8 year
> > hiatus), and I'm sure there is something more efficient.  Try making
> > that change and let me know if it works.
> >
> > Cheers,
> > Dan
> >
> > Ashish Singh wrote:
> > > Thanks for replying Dan. Yes that's what it is,
> > > reader->SetFileName(fileNames[fni]).
> > > The fname was a typo in my previous message,sorry for that. It doesn't
> > > work with
> > > reader->SetFileName(fileNames[fni])
> > >
> > > The exact error message is a pop up box, titled Microsft Visual C++
> > > debug Library. It reads-
> > > ---------
> > > Debug Assertion Failed!
> > > Program:...
> > > File: C:\program Files(x86)\Microsft Visual Studio 8\VC\include\vector
> > > Line: 756
> > >
> > > Expression: vector subscript out of range
> > >
> > > For information on how your program can cause assertion failure, see
> > > the Visual C++ documentation on asserts.
> > >
> > > abort-retry-ignore
> > > --------
> > >
> > > Do you know what is going wrong here?
> > >
> > > Thanks,
> > > Ashish
> > >
> > > On 1/11/07, *Daniel Mace* <dlm19 at duke.edu <mailto:dlm19 at duke.edu>>
> > wrote:
> > >
> > >     Ashish,
> > >
> > >     What's the exact error message that it gives you?  Also, where do
> > you
> > >     set "fname".  perhaps it should be:
> > >     -----------
> > >     reader->SetFileName(fileNames[fni])
> > >     --------
> > >     unless you set fname somewhere else in the code that isn't
> > present.
> > >
> > >     Cheers,
> > >     Dan
> > >
> > >     Ashish Singh wrote:
> > >     > Hi,
> > >     >
> > >     > I am a newbie to ITK. I was trying to read a set of dicom images
> > >     from
> > >     > a directory and then use reader->update() to process each one of
> > >     them
> > >     > one after the other. But the reader->update() gives me an error
> > >     after
> > >     > reading the first image. Can anyone please tell me how to fix
> > this
> > >     > problem?
> > >     >
> > >     > This is what my code looks like. It is not the complete code,
> > >     but only
> > >     > the relevant part of it.
> > >     > ---------------
> > >     >   typedef itk::GDCMSeriesFileNames NamesGeneratorType;
> > >     >   NamesGeneratorType::Pointer nameGenerator =
> > >     NamesGeneratorType::New();
> > >     >   nameGenerator->SetInputDirectory( "D:\\testimages"  );
> > >     >
> > >     >   typedef std::vector<std::string> FileNamesContainer;
> > >     >   FileNamesContainer fileNames =
> > nameGenerator->GetInputFileNames();
> > >     >     unsigned int numberOfFilenames =  fileNames.size();
> > >     >   std::cout << numberOfFilenames << std::endl;
> > >     >   unsigned int fni;
> > >     >
> > >     >   for(fni = 0; fni<numberOfFilenames; fni++)
> > >     >     {
> > >     >     std::cout << "filename # " << fni << " = ";
> > >     >     std::cout << fileNames[fni] << std::endl;
> > >     >     }
> > >     >
> > >     >   for(fni = 0; fni<numberOfFilenames; fni++)
> > >     >   {
> > >     >   reader->SetFileName( fname);
> > >     >
> > >     >   reader->SetImageIO( gdcmImageIO );
> > >     >
> > >     >   try
> > >     >     {
> > >     >         reader->Update();//this is where it gives me an error
> > second
> > >     > time in the loop.
> > >     >     }
> > >     >   catch (itk::ExceptionObject & e)
> > >     >     {
> > >     >     std::cerr << "exception in file reader " << std::endl;
> > >     >     std::cerr << e << std::endl;
> > >     >     return EXIT_FAILURE;
> > >     >     }
> > >     > // code for processing the image //
> > >     > //code for writing the processed image//
> > >     > }// for loop complete
> > >     > --------------------------------------
> > >     > The filenames are correctly read, the code runs fine the first
> > time
> > >     > through the for loop, but second time it gives an error at the
> > >     > reader->Update() line.
> > >     > Can anyone please tell me why is this happening and how to fix
> > it?
> > >     >
> > >     > Thanks,
> > >     > Ashish
> > >     >
> > >     >
> > >     >
> > >
> > ------------------------------------------------------------------------
> > >
> > >     >
> > >     > _______________________________________________
> > >     > Insight-users mailing list
> > >     > Insight-users at itk.org <mailto:Insight-users at itk.org>
> > >     > http://www.itk.org/mailman/listinfo/insight-users
> > >     >
> > >
> > >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/insight-users/attachments/20070111/a8d52765/attachment-0001.html


More information about the Insight-users mailing list