ITK/Examples/EdgesAndGradients/BinaryBoundaries

From KitwarePublic
< ITK‎ | Examples
Revision as of 04:31, 3 February 2011 by Lorensen (talk | contribs)
Jump to navigationJump to search
ITK Examples Baseline EdgesAndGradients TestBinaryBoundaries.png

BinaryBoundaries.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileWriter.h"
  3. include "itkInvertIntensityImageFilter.h"
  4. include "itkBinaryContourImageFilter.h"
  5. include "itkRescaleIntensityImageFilter.h"
  1. include "QuickView.h"

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

void CreateImage(ImageType::Pointer image);

int main(int, char *[]) {

 ImageType::Pointer image = ImageType::New();
 CreateImage(image);
 typedef itk::BinaryContourImageFilter <ImageType, ImageType >
         binaryContourImageFilterType;
 // Outer boundary
 binaryContourImageFilterType::Pointer binaryContourFilter
         = binaryContourImageFilterType::New ();
 binaryContourFilter->SetInput(image);
 binaryContourFilter->SetForegroundValue(0);
 binaryContourFilter->SetBackgroundValue(255);
 binaryContourFilter->Update();
 // Invert the result
 typedef itk::InvertIntensityImageFilter <ImageType>
         InvertIntensityImageFilterType;
 InvertIntensityImageFilterType::Pointer invertIntensityFilter
         = InvertIntensityImageFilterType::New();
 invertIntensityFilter->SetInput(binaryContourFilter->GetOutput());
 invertIntensityFilter->Update();
 ImageType::Pointer outerBoundary = ImageType::New();
 outerBoundary->Graft(invertIntensityFilter->GetOutput());
 
 // Inner boundary
 binaryContourFilter->SetForegroundValue(255);
 binaryContourFilter->SetBackgroundValue(0);
 binaryContourFilter->Update();
 QuickView viewer;
 viewer.AddImage(image.GetPointer());
 viewer.AddImage(outerBoundary.GetPointer());
 viewer.AddImage(binaryContourFilter->GetOutput());
 viewer.Visualize();
 return EXIT_SUCCESS;

}

void CreateImage(ImageType::Pointer image) {

 ImageType::IndexType start;
 start.Fill(0);
 ImageType::SizeType size;
 size.Fill(20);
 ImageType::RegionType region(start, size);
 image->SetRegions(region);
 image->Allocate();
 // Make a square
 for(unsigned int r = 5; r < 10; r++)
   {
   for(unsigned int c = 5; c < 10; c++)
     {
     ImageType::IndexType pixelIndex;
     pixelIndex[0] = r;
     pixelIndex[1] = c;
     image->SetPixel(pixelIndex, 255);
     }
   }

} </source>

CMakeLists.txt

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

PROJECT(BinaryBoundaries)

include_directories(/home/doriad/src/ITK/Wrapping/WrapITK/ExternalProjects/ItkVtkGlue/src/) include_directories(/home/doriad/ITKWikiExamples/ItkVtkGlue)

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

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

ADD_EXECUTABLE(BinaryBoundaries BinaryBoundaries.cxx /home/doriad/ITKWikiExamples/ItkVtkGlue/QuickView.cxx) TARGET_LINK_LIBRARIES(BinaryBoundaries vtkHybrid ITKBasicFilters ITKCommon ITKIO) </source>