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

Daniel Mace dlm19 at duke.edu
Thu Jan 11 16:27:47 EST 2007


Ashish,

It could be an issue with the reader reading in that particular file.  
Tracking down the particular location of the vector assertion error can 
be a bit painful as everything is caught by the ITK exception libraries 
and repropagated.  See what happens if you start you loop off with the 
second image.  Replace your for loop with the following and see if it 
gets through the first iteration.

---------------------------
  for(fni = 1; fni<numberOfFilenames; fni++)
---------------------------

If it still dies on the second loop, then we can at least contribute it 
to the code you wrote and not an error with the reader reading in a 
particular tag/etc. for that particular image.

Cheers,
Dan

Ashish Singh wrote:
> 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 
> <mailto: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
>     <mailto: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> <mailto: 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>
>         <mailto: Insight-users at itk.org <mailto:Insight-users at itk.org>>
>         >     > http://www.itk.org/mailman/listinfo/insight-users
>         >     >
>         >
>         >
>
>
>



More information about the Insight-users mailing list