ITK/Examples/EdgesAndGradients/BinaryContourImageFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
(Created page with "==BinaryContourImageFilter.cxx== <source lang="cpp"> #include "itkImage.h" #include "itkImageFileWriter.h" #include "itkBinaryContourImageFilter.h" #include "itkRescaleIntensityI...")
 
Line 6: Line 6:
#include "itkRescaleIntensityImageFilter.h"
#include "itkRescaleIntensityImageFilter.h"


#include <itkImageToVTKImageFilter.h>
#include "itkImageToVTKImageFilter.h"


#include "vtkImageViewer.h"
#include "vtkImageViewer.h"
Line 17: Line 17:
typedef itk::Image<unsigned char, 2>  ImageType;
typedef itk::Image<unsigned char, 2>  ImageType;


void CreateImage(ImageType::Pointer image);
static void CreateImage(ImageType::Pointer image);


int main(int, char *[])
int main(int, char *[])
Line 25: Line 25:


   typedef itk::BinaryContourImageFilter <ImageType, ImageType >
   typedef itk::BinaryContourImageFilter <ImageType, ImageType >
          binaryContourImageFilterType;
    binaryContourImageFilterType;


   binaryContourImageFilterType::Pointer binaryContourFilter
   binaryContourImageFilterType::Pointer binaryContourFilter
          = binaryContourImageFilterType::New ();
    = binaryContourImageFilterType::New ();
   binaryContourFilter->SetInput(image);
   binaryContourFilter->SetInput(image);
   binaryContourFilter->Update();
   binaryContourFilter->Update();
Line 122: Line 122:
   // Make a square
   // Make a square
   for(unsigned int r = 20; r < 80; r++)
   for(unsigned int r = 20; r < 80; r++)
  {
    {
      for(unsigned int c = 30; c < 100; c++)
    for(unsigned int c = 30; c < 100; c++)
       {
       {
          ImageType::IndexType pixelIndex;
      ImageType::IndexType pixelIndex;
          pixelIndex[0] = r;
      pixelIndex[0] = r;
          pixelIndex[1] = c;
      pixelIndex[1] = c;


          image->SetPixel(pixelIndex, 255);
      image->SetPixel(pixelIndex, 255);
       }
       }
  }
    }


   // Make another square
   // Make another square
   for(unsigned int r = 100; r < 130; r++)
   for(unsigned int r = 100; r < 130; r++)
  {
    {
      for(unsigned int c = 115; c < 160; c++)
    for(unsigned int c = 115; c < 160; c++)
       {
       {
          ImageType::IndexType pixelIndex;
      ImageType::IndexType pixelIndex;
          pixelIndex[0] = r;
      pixelIndex[0] = r;
          pixelIndex[1] = c;
      pixelIndex[1] = c;


          image->SetPixel(pixelIndex, 255);
      image->SetPixel(pixelIndex, 255);
       }
       }
  }
    }
}
}
</source>
</source>

Revision as of 05:19, 16 November 2010

BinaryContourImageFilter.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileWriter.h"
  3. include "itkBinaryContourImageFilter.h"
  4. include "itkRescaleIntensityImageFilter.h"
  1. include "itkImageToVTKImageFilter.h"
  1. include "vtkImageViewer.h"
  2. include "vtkRenderWindowInteractor.h"
  3. include "vtkSmartPointer.h"
  4. include "vtkImageActor.h"
  5. include "vtkInteractorStyleImage.h"
  6. include "vtkRenderer.h"

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

static void CreateImage(ImageType::Pointer image);

int main(int, char *[]) {

 ImageType::Pointer image = ImageType::New();
 CreateImage(image);
 typedef itk::BinaryContourImageFilter <ImageType, ImageType >
   binaryContourImageFilterType;
 binaryContourImageFilterType::Pointer binaryContourFilter
   = binaryContourImageFilterType::New ();
 binaryContourFilter->SetInput(image);
 binaryContourFilter->Update();
 typedef itk::RescaleIntensityImageFilter< ImageType, ImageType > RescaleFilterType;
 RescaleFilterType::Pointer rescaleFilter = RescaleFilterType::New();
 rescaleFilter->SetOutputMinimum(0);
 rescaleFilter->SetOutputMaximum(255);
 rescaleFilter->SetInput(binaryContourFilter->GetOutput());
 typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
 ConnectorType::Pointer originalConnector = ConnectorType::New();
 originalConnector->SetInput(image);
 vtkSmartPointer<vtkImageActor> originalActor =
   vtkSmartPointer<vtkImageActor>::New();
 originalActor->SetInput(originalConnector->GetOutput());
 ConnectorType::Pointer boundaryConnector = ConnectorType::New();
 boundaryConnector->SetInput(rescaleFilter->GetOutput());
 vtkSmartPointer<vtkImageActor> boundaryActor =
   vtkSmartPointer<vtkImageActor>::New();
 boundaryActor->SetInput(boundaryConnector->GetOutput());
 // There will be one render window
 vtkSmartPointer<vtkRenderWindow> renderWindow =
   vtkSmartPointer<vtkRenderWindow>::New();
 renderWindow->SetSize(600, 300);
 vtkSmartPointer<vtkRenderWindowInteractor> interactor =
   vtkSmartPointer<vtkRenderWindowInteractor>::New();
 interactor->SetRenderWindow(renderWindow);
 // Define viewport ranges
 // (xmin, ymin, xmax, ymax)
 double leftViewport[4] = {0.0, 0.0, 0.5, 1.0};
 double rightViewport[4] = {0.5, 0.0, 1.0, 1.0};
 // Setup both renderers
 vtkSmartPointer<vtkRenderer> leftRenderer =
   vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(leftRenderer);
 leftRenderer->SetViewport(leftViewport);
 leftRenderer->SetBackground(.6, .5, .4);
 vtkSmartPointer<vtkRenderer> rightRenderer =
   vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(rightRenderer);
 rightRenderer->SetViewport(rightViewport);
 rightRenderer->SetBackground(.4, .5, .6);
 // Add the sphere to the left and the cube to the right
 leftRenderer->AddActor(originalActor);
 rightRenderer->AddActor(boundaryActor);
 leftRenderer->ResetCamera();
 rightRenderer->ResetCamera();
 renderWindow->Render();
 vtkSmartPointer<vtkInteractorStyleImage> style =
   vtkSmartPointer<vtkInteractorStyleImage>::New();
 interactor->SetInteractorStyle(style);
 interactor->Start();
 return EXIT_SUCCESS;

}

void CreateImage(ImageType::Pointer image) {

 // Create an image with 2 connected components
 ImageType::RegionType region;
 ImageType::IndexType start;
 start[0] = 0;
 start[1] = 0;
 ImageType::SizeType size;
 unsigned int NumRows = 200;
 unsigned int NumCols = 300;
 size[0] = NumRows;
 size[1] = NumCols;
 region.SetSize(size);
 region.SetIndex(start);
 image->SetRegions(region);
 image->Allocate();
 // Make a square
 for(unsigned int r = 20; r < 80; r++)
   {
   for(unsigned int c = 30; c < 100; c++)
     {
     ImageType::IndexType pixelIndex;
     pixelIndex[0] = r;
     pixelIndex[1] = c;
     image->SetPixel(pixelIndex, 255);
     }
   }
 // Make another square
 for(unsigned int r = 100; r < 130; r++)
   {
   for(unsigned int c = 115; c < 160; 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(BinaryContourImageFilter)

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

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

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

ADD_EXECUTABLE(BinaryContourImageFilter BinaryContourImageFilter.cxx) TARGET_LINK_LIBRARIES(BinaryContourImageFilter vtkHybrid ITKBasicFilters ITKCommon ITKIO) </source>