ITK/Examples/ImageProcessing/PasteImageFilter: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
(Created page with "==PasteImageFilter.cxx== <source lang="cpp"> #include "itkImage.h" #include "itkImageFileWriter.h" #include "itkPasteImageFilter.h" #include <itkImageToVTKImageFilter.h> #inclu...")
 
Line 5: Line 5:
#include "itkPasteImageFilter.h"
#include "itkPasteImageFilter.h"


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


#include "vtkImageViewer.h"
#include "vtkImageViewer.h"
Line 16: Line 16:
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 28: Line 28:


   typedef itk::PasteImageFilter <ImageType, ImageType >
   typedef itk::PasteImageFilter <ImageType, ImageType >
          PasteImageFilterType;
    PasteImageFilterType;


   // The SetDestinationIndex() method prescribes where in the first input to start pasting data from the second input.
   // The SetDestinationIndex() method prescribes where in the first input to start pasting data from the second input.
Line 38: Line 38:
    
    
   PasteImageFilterType::Pointer pasteFilter
   PasteImageFilterType::Pointer pasteFilter
          = PasteImageFilterType::New ();
    = PasteImageFilterType::New ();
   pasteFilter->SetInput(0, image1);
   pasteFilter->SetInput(0, image1);
   pasteFilter->SetInput(1, image2);
   pasteFilter->SetInput(1, image2);
Line 147: Line 147:
   // 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, 255);
      image->SetPixel(pixelIndex, 255);
       }
       }
  }
    }
}
}


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


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

Revision as of 05:24, 16 November 2010

PasteImageFilter.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkImageFileWriter.h"
  3. include "itkPasteImageFilter.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::PasteImageFilter <ImageType, ImageType >
   PasteImageFilterType;
 // The SetDestinationIndex() method prescribes where in the first input to start pasting data from the second input.
 // The SetSourceRegion method prescribes the section of the second image to paste into the first.
 ImageType::IndexType destinationIndex;
 destinationIndex[0] = 110;
 destinationIndex[1] = 110;
 
 PasteImageFilterType::Pointer pasteFilter
   = PasteImageFilterType::New ();
 pasteFilter->SetInput(0, image1);
 pasteFilter->SetInput(1, image2);
 pasteFilter->SetSourceRegion(image2->GetLargestPossibleRegion());
 pasteFilter->SetDestinationIndex(destinationIndex);
 pasteFilter->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 joined image
 ConnectorType::Pointer pasteConnector = ConnectorType::New();
 pasteConnector->SetInput(pasteFilter->GetOutput());
 vtkSmartPointer<vtkImageActor> pasteActor =
   vtkSmartPointer<vtkImageActor>::New();
 pasteActor->SetInput(pasteConnector->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(pasteActor);
 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, 255);
     }
   }

}


void CreateImage2(ImageType::Pointer image) {

 // Create an image
 ImageType::RegionType region;
 ImageType::IndexType start;
 start[0] = 0;
 start[1] = 0;
 ImageType::SizeType size;
 unsigned int NumRows = 20;
 unsigned int NumCols = 20;
 size[0] = NumRows;
 size[1] = NumCols;
 region.SetSize(size);
 region.SetIndex(start);
 image->SetRegions(region);
 image->Allocate();
 // Make another square
 for(unsigned int r = 0; r < NumRows; r++)
   {
   for(unsigned int c = 0; c < NumCols; c++)
     {
     ImageType::IndexType pixelIndex;
     pixelIndex[0] = r;
     pixelIndex[1] = c;
     image->SetPixel(pixelIndex, 200);
     }
   }

} </source>

CMakeLists.txt

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

PROJECT(PasteImageFilter)

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