ITK/Examples/WishList/Iterators/FloodFillIterator: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
(Created page with "==FloodFillIterator.cxx== <source lang="cpp"> </source> ==CMakeLists.txt== <source lang="cmake"> </source>")
 
No edit summary
Line 1: Line 1:
This example creates a black image of a 3x3 square. It then uses a flood fill iterator to visit the pixels in this white region (specified by a seed point) and marks them with increasing brightnesses to convey the visit order.
==FloodFillIterator.cxx==
==FloodFillIterator.cxx==
<source lang="cpp">
<source lang="cpp">
#include "itkImage.h"
#include "itkImageFileWriter.h"
#include "itkFloodFilledImageFunctionConditionalIterator.h"
#include "itkBinaryThresholdImageFunction.h"
#include "itkImageFileWriter.h"
#include "QuickView.h"
typedef itk::Image< unsigned char, 2 >  ImageType;
void CreateImage(ImageType::Pointer image);
int main( int argc, char *argv[])
{
  ImageType::Pointer image = ImageType::New();
  CreateImage(image);
  typedef itk::BinaryThresholdImageFunction< ImageType, double > FunctionType;
  FunctionType::Pointer function = FunctionType::New();
  function->SetInputImage(image);
  function->ThresholdAbove(100); // we are looking to capture 255
 
  typedef itk::FloodFilledImageFunctionConditionalIterator< ImageType, FunctionType > IteratorType;
  itk::Index<2> seed;
  seed[0] = 5;
  seed[1] = 5;
 
  std::vector<itk::Index<2> > seeds;
  seeds.push_back(seed);
 
  IteratorType it (image, function, seeds);
  it.GoToBegin();
 
  unsigned int counter = 0;
  while ( !it.IsAtEnd() )
    {
    it.Set(static_cast<float>(counter) * 25.);
    ++it;
    counter++;
    }
   
  typedef  itk::ImageFileWriter< ImageType  > WriterType;
  WriterType::Pointer writer = WriterType::New();
  writer->SetFileName("output.png");
  writer->SetInput(image);
  writer->Update();
   
  ImageType::Pointer originalImage = ImageType::New();
  CreateImage(originalImage);
 
  QuickView viewer;
  viewer.AddImage(originalImage.GetPointer());
  viewer.AddImage(image.GetPointer());
  viewer.Visualize();
  return EXIT_SUCCESS;
}
void CreateImage(ImageType::Pointer image)
{
  itk::Index<2> start;
  start.Fill(0);


  itk::Size<2> size;
  size.Fill(10);
  itk::ImageRegion<2> region(start,size);
  image->SetRegions(region);
  image->Allocate();
  image->FillBuffer(0);
  // Make a square
  for(unsigned int r = 3; r < 6; r++)
    {
    for(unsigned int c = 3; c < 6; c++)
      {
      itk::Index<2> pixelIndex;
      pixelIndex[0] = r;
      pixelIndex[1] = c;
      image->SetPixel(pixelIndex, 255);
      }
    }
}
</source>
</source>


==CMakeLists.txt==
==CMakeLists.txt==
<source lang="cmake">
<source lang="cmake">
cmake_minimum_required(VERSION 2.6)
PROJECT(FloodFilledImageFunctionConditionalIterator)
include_directories(/home/doriad/ITKWikiExamples/ItkVtkGlue)
FIND_PACKAGE(VTK REQUIRED)
INCLUDE(${VTK_USE_FILE})
FIND_PACKAGE(ITK REQUIRED)
INCLUDE(${ITK_USE_FILE})
ADD_EXECUTABLE(FloodFilledImageFunctionConditionalIterator FloodFilledImageFunctionConditionalIterator.cxx /home/doriad/ITKWikiExamples/ItkVtkGlue/QuickView.cxx)
TARGET_LINK_LIBRARIES(FloodFilledImageFunctionConditionalIterator
vtkHybrid
ITKIO ITKBasicFilters ITKCommon
)


</source>
</source>

Revision as of 21:10, 6 February 2011

This example creates a black image of a 3x3 square. It then uses a flood fill iterator to visit the pixels in this white region (specified by a seed point) and marks them with increasing brightnesses to convey the visit order.

FloodFillIterator.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileWriter.h"
  3. include "itkFloodFilledImageFunctionConditionalIterator.h"
  4. include "itkBinaryThresholdImageFunction.h"
  5. include "itkImageFileWriter.h"
  1. include "QuickView.h"

typedef itk::Image< unsigned char, 2 > ImageType;

void CreateImage(ImageType::Pointer image);

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

 ImageType::Pointer image = ImageType::New();
 CreateImage(image);
 typedef itk::BinaryThresholdImageFunction< ImageType, double > FunctionType;
 FunctionType::Pointer function = FunctionType::New();
 function->SetInputImage(image);
 function->ThresholdAbove(100); // we are looking to capture 255
 
 typedef itk::FloodFilledImageFunctionConditionalIterator< ImageType, FunctionType > IteratorType;
 itk::Index<2> seed;
 seed[0] = 5;
 seed[1] = 5;
 
 std::vector<itk::Index<2> > seeds;
 seeds.push_back(seed);
 
 IteratorType it (image, function, seeds);
 it.GoToBegin();
 
 unsigned int counter = 0;
 while ( !it.IsAtEnd() )
   {
   it.Set(static_cast<float>(counter) * 25.);
   ++it;
   counter++;
   }
   
 typedef  itk::ImageFileWriter< ImageType  > WriterType;
 WriterType::Pointer writer = WriterType::New();
 writer->SetFileName("output.png");
 writer->SetInput(image);
 writer->Update();
   
 ImageType::Pointer originalImage = ImageType::New();
 CreateImage(originalImage);
 
 QuickView viewer;
 viewer.AddImage(originalImage.GetPointer());
 viewer.AddImage(image.GetPointer());
 viewer.Visualize();
 return EXIT_SUCCESS;

}

void CreateImage(ImageType::Pointer image) {

 itk::Index<2> start;
 start.Fill(0);
 itk::Size<2> size;
 size.Fill(10);
 itk::ImageRegion<2> region(start,size);
 image->SetRegions(region);
 image->Allocate();
 image->FillBuffer(0);
 // Make a square
 for(unsigned int r = 3; r < 6; r++)
   {
   for(unsigned int c = 3; c < 6; c++)
     {
     itk::Index<2> pixelIndex;
     pixelIndex[0] = r;
     pixelIndex[1] = c;
     image->SetPixel(pixelIndex, 255);
     }
   }

} </source>

CMakeLists.txt

<source lang="cmake"> cmake_minimum_required(VERSION 2.6)

PROJECT(FloodFilledImageFunctionConditionalIterator)

include_directories(/home/doriad/ITKWikiExamples/ItkVtkGlue)

FIND_PACKAGE(VTK REQUIRED) INCLUDE(${VTK_USE_FILE})

FIND_PACKAGE(ITK REQUIRED) INCLUDE(${ITK_USE_FILE})

ADD_EXECUTABLE(FloodFilledImageFunctionConditionalIterator FloodFilledImageFunctionConditionalIterator.cxx /home/doriad/ITKWikiExamples/ItkVtkGlue/QuickView.cxx) TARGET_LINK_LIBRARIES(FloodFilledImageFunctionConditionalIterator vtkHybrid ITKIO ITKBasicFilters ITKCommon )

</source>