ITK/Examples/ImageProcessing/SubtractImageFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
(Created page with "==SubtractImageFilter.cxx== <source lang="cpp"> #include "itkImage.h" #include "itkImageFileWriter.h" #include "itkRescaleIntensityImageFilter.h" #include "itkSubtractImageFilter...")
 
Line 6: Line 6:
#include "itkSubtractImageFilter.h"
#include "itkSubtractImageFilter.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 CreateImage1(ImageType::Pointer image);
static void CreateImage1(ImageType::Pointer image);
void CreateImage2(ImageType::Pointer image);
static void CreateImage2(ImageType::Pointer image);


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


   typedef itk::SubtractImageFilter <ImageType, ImageType >
   typedef itk::SubtractImageFilter <ImageType, ImageType >
          SubtractImageFilterType;
    SubtractImageFilterType;


   SubtractImageFilterType::Pointer subtractFilter
   SubtractImageFilterType::Pointer subtractFilter
          = SubtractImageFilterType::New ();
    = SubtractImageFilterType::New ();
   subtractFilter->SetInput1(image1);
   subtractFilter->SetInput1(image1);
   subtractFilter->SetInput2(image2);
   subtractFilter->SetInput2(image2);
Line 139: Line 139:
   // 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 = 20; c < 80; c++)
    for(unsigned int c = 20; c < 80; c++)
       {
       {
          ImageType::IndexType pixelIndex;
      ImageType::IndexType pixelIndex;
          pixelIndex[0] = r;
      pixelIndex[0] = r;
          pixelIndex[1] = c;
      pixelIndex[1] = c;


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


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


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

Revision as of 05:25, 16 November 2010

SubtractImageFilter.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileWriter.h"
  3. include "itkRescaleIntensityImageFilter.h"
  4. include "itkSubtractImageFilter.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 CreateImage1(ImageType::Pointer image); static void CreateImage2(ImageType::Pointer image);

int main(int, char *[]) {

 ImageType::Pointer image1 = ImageType::New();
 CreateImage1(image1);
 ImageType::Pointer image2 = ImageType::New();
 CreateImage2(image2);
 typedef itk::SubtractImageFilter <ImageType, ImageType >
   SubtractImageFilterType;
 SubtractImageFilterType::Pointer subtractFilter
   = SubtractImageFilterType::New ();
 subtractFilter->SetInput1(image1);
 subtractFilter->SetInput2(image2);
 subtractFilter->Update();
 // Visualize first image
 typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
 ConnectorType::Pointer connector1 = ConnectorType::New();
 connector1->SetInput(image1);
 vtkSmartPointer<vtkImageActor> actor1 =
   vtkSmartPointer<vtkImageActor>::New();
 actor1->SetInput(connector1->GetOutput());
 // Visualize second image
 typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
 ConnectorType::Pointer connector2 = ConnectorType::New();
 connector2->SetInput(image2);
 vtkSmartPointer<vtkImageActor> actor2 =
   vtkSmartPointer<vtkImageActor>::New();
 actor2->SetInput(connector2->GetOutput());
 // Visualize subtracted image
 ConnectorType::Pointer subtractConnector = ConnectorType::New();
 subtractConnector->SetInput(subtractFilter->GetOutput());
 vtkSmartPointer<vtkImageActor> subtractActor =
   vtkSmartPointer<vtkImageActor>::New();
 subtractActor->SetInput(subtractConnector->GetOutput());
 // There will be one render window
 vtkSmartPointer<vtkRenderWindow> renderWindow =
   vtkSmartPointer<vtkRenderWindow>::New();
 renderWindow->SetSize(900, 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.33, 1.0};
 double centerViewport[4] = {0.33, 0.0, 0.66, 1.0};
 double rightViewport[4] = {0.66, 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> centerRenderer =
   vtkSmartPointer<vtkRenderer>::New();
 renderWindow->AddRenderer(centerRenderer);
 centerRenderer->SetViewport(centerViewport);
 centerRenderer->SetBackground(.4, .5, .6);
 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(actor1);
 centerRenderer->AddActor(actor2);
 rightRenderer->AddActor(subtractActor);
 leftRenderer->ResetCamera();
 centerRenderer->ResetCamera();
 rightRenderer->ResetCamera();
 renderWindow->Render();
 vtkSmartPointer<vtkInteractorStyleImage> style =
   vtkSmartPointer<vtkInteractorStyleImage>::New();
 interactor->SetInteractorStyle(style);
 interactor->Start();
 return EXIT_SUCCESS;

}

void CreateImage1(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 = 20; c < 80; c++)
     {
     ImageType::IndexType pixelIndex;
     pixelIndex[0] = r;
     pixelIndex[1] = c;
     image->SetPixel(pixelIndex, 15);
     }
   }

}


void CreateImage2(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 another square
 for(unsigned int r = 40; r < 100; r++)
   {
   for(unsigned int c = 40; c < 100; c++)
     {
     ImageType::IndexType pixelIndex;
     pixelIndex[0] = r;
     pixelIndex[1] = c;
     image->SetPixel(pixelIndex, 15);
     }
   }

} </source>

CMakeLists.txt

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

PROJECT(SubtractImageFilter)

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(SubtractImageFilter SubtractImageFilter.cxx) TARGET_LINK_LIBRARIES(SubtractImageFilter vtkHybrid ITKBasicFilters ITKCommon ITKIO) </source>