ITK/Examples/SimpleOperations/TranslationTransform: Difference between revisions

From KitwarePublic
< ITK‎ | Examples
Jump to navigationJump to search
(No difference)

Revision as of 17:28, 27 January 2011

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>