ITK/Examples/SimpleOperations/TranslationTransform

From KitwarePublic
< ITK‎ | Examples
Revision as of 00:05, 23 October 2010 by Daviddoria (talk | contribs) (Created page with "This example currently freezes. The idea is to display an image along with a sphere at (0,0). Then display the translated image with the sphere still at (0,0). This should be eno...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

This example currently freezes. The idea is to display an image along with a sphere at (0,0). Then display the translated image with the sphere still at (0,0). This should be enough to see the translation that occured.

TranslateAnImage.cxx

<source lang="cpp">

  1. include "itkImage.h"
  2. include "itkTranslationTransform.h"
  3. include "itkImageFileReader.h"
  4. include "itkNormalizeImageFilter.h"
  5. include "itkResampleImageFilter.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"
  7. include "vtkPolyDataMapper.h"
  8. include "vtkActor.h"
  9. include "vtkProperty.h"
  10. include "vtkSphereSource.h"

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

 if(argc < 2)
   {
   std::cerr << "Required: filename" << std::endl;
   return EXIT_FAILURE;
   }
 typedef itk::Image<unsigned char, 2>  ImageType;
 typedef itk::ImageFileReader<ImageType> ReaderType;
 ReaderType::Pointer reader = ReaderType::New();
 reader->SetFileName(argv[1]);
 typedef itk::ImageToVTKImageFilter<ImageType> ConnectorType;
 ConnectorType::Pointer originalConnector = ConnectorType::New();
 originalConnector->SetInput(reader->GetOutput());
 vtkSmartPointer<vtkImageActor> originalActor =
   vtkSmartPointer<vtkImageActor>::New();
 originalActor->SetInput(originalConnector->GetOutput());
 itk::TranslationTransform<double,2>::Pointer transform =
   itk::TranslationTransform<double,2>::New();
 itk::TranslationTransform<double,2>::OutputVectorType translation;
 translation[0] = 10;
 translation[0] = 20;
 transform->Translate(translation);
 vtkSmartPointer<vtkSphereSource> sphereSource =
   vtkSmartPointer<vtkSphereSource>::New();
 sphereSource->SetRadius(10);
 sphereSource->SetCenter(0, 0, 0);
 sphereSource->Update();
 vtkSmartPointer<vtkPolyDataMapper> mapper =
   vtkSmartPointer<vtkPolyDataMapper>::New();
 mapper->SetInputConnection(sphereSource->GetOutputPort());
 vtkSmartPointer<vtkActor> sphereActor =
   vtkSmartPointer<vtkActor>::New();
 sphereActor->SetMapper(mapper);
 sphereActor->GetProperty()->SetColor(1,0,0);
 
 typedef itk::ResampleImageFilter< ImageType, ImageType > ResampleFilterType;
 ResampleFilterType::Pointer resampleFilter = ResampleFilterType::New();
 resampleFilter->SetInput(reader->GetOutput());
 resampleFilter->SetTransform(transform);
 ConnectorType::Pointer resampledConnector = ConnectorType::New();
 resampledConnector->SetInput(resampleFilter->GetOutput());
 vtkSmartPointer<vtkImageActor> resampledActor =
   vtkSmartPointer<vtkImageActor>::New();
 resampledActor->SetInput(resampledConnector->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);
 leftRenderer->AddActor(sphereActor);
 rightRenderer->AddActor(resampledActor);
 rightRenderer->AddActor(sphereActor);
 
 leftRenderer->ResetCamera();
 rightRenderer->ResetCamera();
 renderWindow->Render();
 vtkSmartPointer<vtkInteractorStyleImage> style =
   vtkSmartPointer<vtkInteractorStyleImage>::New();
 interactor->SetInteractorStyle(style);
 interactor->Start();
 return EXIT_SUCCESS;

} </source>

CMakeLists.txt

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

PROJECT(ResampleImageFilter)

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