[Insight-users] problem with floodfill iterator

Luis Ibanez luis.ibanez at kitware.com
Sun Sep 19 20:04:12 EDT 2004


Hi Jie,

Please read the chapter on Image Iterators
from the ITK Software Guide.

     http://www.itk.org/ItkSoftwareGuide.pdf

Chapter 11, pdf-page 481.

Your iterator should be created as:

   IteratorType it ( outputImage, function, m_SeedList );
   it.GoToBegin();

where seed list is a std::vector< index >



Note also that you don't need to write this code after all,  :-)

...because the functionality is already provided by the Connected
Threshold Image Filter.  Please read the ITK Software Guide,
Section 9.1.1, pdf-page 342, where this filter is described in
detail.


   Regards,


     Luis



--------------------------
Jie Zhu wrote:

> Hi All,
> I am learning to use the FloodFillIterator, and I am running into a
> problem. I assigned an empty outputimage, a binary thresholding
> (between) function of an input image and a starting point, but when I
> call the iterator the program just crashes. I made sure that at the
> starting point, pixel value is between the lower and upper boundaries.
> Can somebody please tell me why this is happening? Also, altough the
> starting point was inside the boundaries, the it.Get() returned 0, is
> this right?
> Thank you,
> Jie 
> ------------------------------------------------------------------------------------------
> Here is the code:
> 
> typedef itk::Image<unsigned char,2>            ImageType;
>  
> typedef itk::ImageFileReader< ImageType >  ReaderType;
> typedef itk::ImageFileWriter< ImageType >  WriterType;
>  
> ReaderType::Pointer reader = ReaderType::New();
> WriterType::Pointer writer = WriterType::New();
> 
> const char * inputFilename  = argv[1];
> const char * outputFilename = argv[2];
> 
> reader->SetFileName( inputFilename  );
> writer->SetFileName( outputFilename );
> 
> reader->Update();
> ImageType::Pointer image = reader->GetOutput();
> 
> 
> typedef itk::BinaryThresholdImageFunction<ImageType> FunctionType;
> typedef itk::FloodFilledImageFunctionConditionalIterator<ImageType,
> FunctionType> IteratorType;
>   
> index[0] = atoi( argv[3] );
> index[1] = atoi( argv[4] );
> 
> int lowerThreshold = atoi( argv[5] );
> int upperThreshold = atoi( argv[6] );
> 
> ImageType::Pointer outputImage = ImageType::New();
> outputImage->SetBufferedRegion( image->GetRequestedRegion() );
> outputImage->Allocate();
> outputImage->FillBuffer ( 0 );
> 
> FunctionType::Pointer function = FunctionType::New();
> function->SetInputImage ( image );
> function->ThresholdBetween ( lowerThreshold, upperThreshold );
> IteratorType floodIt = IteratorType( outputImage, function, index );
> 
> //works till this point 
> //returns one 0 then crashes
> while(!floodIt.IsAtEnd){
>   std::cout << floodIt.Get() << std::endl;
>   ++floodIt;
> }
> 







More information about the Insight-users mailing list